VIS- und Uni-Logo
Blindversion home uni university suche search sitemap sitemap kontakt contact
unilogo University of Stuttgart
Institute for Visualization and Interactive Systems

Effective scene graph design

german VersionPrintversionBlind Version
 

Effective scene graph design

Several graphics APIs, such as IRIS Performer or OpenGL Optimizer, have been developed to take advantage of recent progress in compute server and workstation architecture with multiprocessing hardware in mind. Since those APIs are usually scene graph based, we can take advantage of model optimization during scene graph creation and benefit from multiprocessing using frustum culling and occlusion culling while traversing the scene graph to increase frame and interaction rates. Since the time-dependent databases of our finite element models are very bulky, an efficient scene graph design is very important in order to handle the complex data interdependencies and to achieve high rendering speeds.
We have to

  • visualize meshes of about 500,000 FEs with nearly the same number of nodes for each of 60 time steps

  • and
  • represent the connectivity of the finite elements.


Our Open Inventor scene graph (first) stores the coordinates for all states in the left part as children of a SoSwitch node, the right part represents the mesh topology. This Open Inventor scene graph design would not work with Cosmo3D / OpenGL Optimizer because there attributes are inherited downwards only – not horizontally like in Open Inventor. The second images outlines our Cosmo3D scene graph design: the csIndexSets provide the finite element connectivity and they are shared over all time steps. The csCoordSets store the coordinates for one time step and they are referenced by each shape of that time step.

Shared index sets for Gouraud shaded geometry

In order to determine the vertices with multiple normals an edge detection algorithm is applied to the meshes of the first and the last time step. The combined results of those two time steps specify the set of Gouraud edges for all time steps. For each vertex vj the number Nj of different normals is known, its normals are appended to csNormalSet, and the coordinates are stored Nj times into csCoordSet as outlined in the following figure. Finally, we initialize the csIndexSet to represent the time-invariant mesh topology. Four consecutive indices refer to the coordinates and normals of a quadrilateral. Three-sided shell elements are rendered as degenerated quadrilaterals where the last index is used twice.

This example outlines how the csIndexSet can be shared to reference both coordinates and normals. The Gouraud edge is marked as the thick line which means that the vertices 4, 5, 7, 8, and 11 correspond to two different normal vectors, vertex 6 even corresponds to three different ones. Therefore, the coordinates for those vertices are duplicated in the csCoordSet for each varying normal. Duplicating vertex coordinates lying on Gouraud edges is more memory efficient than referencing coordinates and normals by separated csIndexSets.

csIndexSet [0,3,2,1] [1,2,6,4] [2,11,8,6] [3,13,11,2] [5,7,16,15] ...
index: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...
csCoordSet 0 1 2 3 4 4 5 5 6 6 6 7 7 8 8 9 10 11 11 12 13 ...
csNormalSet 0 1 2 3 4a 4b 5a 5b 6a 6b 6c 7a 7b 8a 8b 9 10 11a 11b 12 13 ...


Contact:
Ove Sommer Email: Ove.Sommer@informatik.uni-stuttgart.de