[osg-users] Distributed rendering of scene graph
Benjamin Eikel
osg at eikel.org
Sat Mar 1 10:13:15 PST 2008
Hello Robert,
On Saturday 01 March 2008 at 18:50:16, Robert Osfield wrote:
> Hi Benjamin,
>
> Could you possibly repost the below text, but broken down into shorter
> paragraphs as long paragraphs are really hard to follow. Try to keep
> one major point per paragraph.
of course.
o What do we want to display?
We want to visualize scenes which are generated by a simulation of a factory.
o Why do we want to use a cluster?
The simulation is running on a cluster. We want to do the rendering on
the cluster because
- we can get messages from the simulation faster (10 GBit/s
InfiniBand, lower latency than Ethernet, DMA transfers from one node to
another)
- we are able to cope with big scenes by just using more rendering
nodes (at least that is our goal).
- we have the computation power there.
o Why do we have big scenes?
Models of some machines are very complex because they are generated by CAD
programs and we do not want to do an extensive preprocessing because the
models may change over time.
o What is the architecture of the system?
- We have a central node for each user which is connected to our system. On
that node we want to use OpenSceneGraph (reasons below). So each of these
nodes has an own view into the scene.
- We have a set of rendering nodes. These rendering nodes are partitioned by a
balancing algorithm and each central node gets some of them for rendering. We
want to balance between different users and between the rendering nodes one
central node is able to render with.
Example: User A sees only a small part of the factory => needs only few
rendering nodes. User B sees some very complex machines => needs lots of
rendering nodes.
Example: Central node A can render with 20 rendering nodes. It has 20 objects
with 1 million polygons and so it gives each rendering node one object.
o How to we get the scene data from the simulation?
We get a identification number for each machine mesh from the simulation. We
then want to load the meshes for that machine inside the scene graph.
o Why do we want to use OpenSceneGraph?
- We can use the already existing reader/writer plugins of OSG and do not have
to write our own.
- OSG can do culling, picking, moving machines with grabbers for us.
- We want to use the animation capabilities of OSG for some special models (e.
g. forklifts, packages on a conveyor).
o How will OpenSceneGraph be connected to the rendering nodes?
When a frame should be rendererd we want to know the nodes (e. g. Geodes)
which are visible and their transformation matrix (which should be known to
OSG after it's update and culling traversals). With this knowledge (list of
visible nodes and transformations) the central nodes instruct their rendering
nodes by sending them the mesh ids, the transformations of the meshes and the
camera transformation.
o How can we optimize the rendering on the rendering nodes?
We want to exploit the fact that there may be the same machine (= same mesh)
multiple times inside the factory. So we could load the mesh of such a
machine as VBO and let one rendering node render the machines with different
transformations multiple times.
o What is my question at all?
I am searching for a interface where I can grab these visible nodes and put
them into a list. I need them so I can analyse them to run the balancing
algorithm and send the data to the rendering nodes. I think that it might be
possible to use the DrawImplementation of the Drawable nodes.
Regards,
Benjamin
More information about the osg-users
mailing list