Following a suggestion I change/extend my proposol to the following project: A networked render system. This would still kind of fulfill my previous project idea, the null render system, but more to that a bit later.
I would create a render system which gathers the render calls on the server, transmits them over the network to one or multiple client systems (via UDP or maybe even TCP) where the input is finally rendered.
A few examples how such a feature could be utilized are:
- remote visual debugging of a server
- video transmission
- logging into a game client to see what the user can see (user support)
- running a server without video card (more to that later)
Technically this would work by creating two different networked render systems, for now let's call them serverRenderSystem and clientRenderSystem. The serverRenderSystem receives render calls and sends those calls to one or multiple clientRenderSystem (which have subscribed at the server beforehand), where the image is rendered.
The serverRenderSystem would optionally also have a normal render system (e.g. OpenGL), therefore the server can additionally also render the render calls by itself.
In a nutshell:
render call -> serverRenderSystem -> (optional) copy render call and render by itself -> send render call to clientRenderSystem
Since the copying and display of render calls on the server itself is optional, the networked render system can also be used as a
null render system: Simply do not send the render calls to a client, and do not copy the render calls.
I will try to create the networked render system highly flexible, e.g. to allow for a scene to be split into multiple parts, and only one part is sent to each client. To illustrate what I mean please bear with my not very artistic paint drawing attached to this post, or see the following link:
http://www.ogre3d.org/tikiwiki/High+res ... creenshots
It goes in the direction of a render farm, but probably not quite yet, because for now the goal would not to be to render faster, but display an image split on multiple output devices. This might be a feasible extension though. (note: it is of course possible to render on different systems and thus multiple video cards, but the result of the rendering is not transmitted back to the server, if you know what I mean)
This could be useful for e.g. Display Walls or Virtual Reality. The feature would probably work by splitting the source image into multiple render windows by the user, the networked render system then creates and manages "render streams" for each such render window. Those can be requested by one or multiple clients at will. I'm not sure about the need for multiple render windows to implement the feature, that is just the way I think it will work for sure. Another possibility that comes to my head and I need to further look in to is one viewport = one network stream.
Schedule:
until Mai 14.
Get to know mentor/mentors better.
Further strengthen my knowledge of the Ogre source code and look into existing render systems.
Mai 15. - Mai 21.
Set up development environment, ascertain the workflow is working without problems.
Mai 22. - June 10.
Create and refine the implementation plan (e.g. which transmission protocol, options when creating render system, ...).
Discuss project and ideas with mentor/mentors.
Also run basic tests for remote rendering, explore difficulties and problems.
June 11. - June 14.
Create communication protocol between server and client render system
June 15 - July 02.
Start implementing the server render system, goal of this step: working rendering on server system and null render system.
Dummy functions and calls for transmitting render calls to client system.
July 03. - July 20.
Start the work on client render system and implement the network code, the registration of the clients at the server, the sending of render calls from the server to clients and reception by clients)
July 21. - July 28.
Complete client server system (Rendering part).
July 29. - August 07.
Testing
August 08. - August 12.
Complete the Documentation
August 13.
Suggested pencils down date
August 13. - August 19.
Buffer / split rendering
At the end of GSoC i will have finished:
1. Working networked render system (server and client)
2. Documentation
After GSoC
Finishing the split rendering part if not already done, also render farms if there is interest.
I am glad about any suggestions/input/comments you might have, and also ideas for better implementation of the "Split Rendering" part.
Thanks for reading!