Question:

I'm looking for a performance boost. Based on performance I have seen in your HOOPS samples, I suspect my data organization may not be optimal for hoops rendering, but I need to keep it structured this way for other reasons. Given that, is there anything that I can do to improve performance?

Answer:

Yes, there is. In version 16 two new capabilities were introduced which can offer significant performance improvements for sub optimal segment hierarchies. These capabilities are the new "static model" heuristic and "display list = segment" rendering option.

When the "static" heuristic is set, HOOPS will generate a second, optimized tree which will be used for drawing. The model data will be
unmodified and will still be used for all purposes except drawing. However, there is some subtlety to the use of the "static" heuristic. It can be set at multiple locations within your scene graph though the more segments that it can aggregate the better the results. Consequently you should try and set it as high up your segment tree as possible. Once set any modifications to the underlying segment hierarchy will cause the static tree to be regenerated which can be expensive depending on your model (roughly 4 seconds for a 100,000 segment hierarchy). Consequently, you should only set it on portions of your segment hierarchy which are not being continuously modified. Changes that do not affect the data in the static tree are still encouraged, including manipulating the camera, inserting cutting planes, and modifying geometry and attributes outside of the static area. Also, the MVO selection capabilities have been enhanced so that you can select within a "static" tree without incurring a regeneration. We are are currently working on improving the editability of "static" trees.

The second enhancement is support for "segment" level display lists. These allow HOOPS to batch all the geometry in a particular segment before it sends it down to the 3D driver. This results in fewer OpenGL and/or DirectX calls which has a positive effect on rendering performance. The static heuristic tends to create a shadow tree which has a high geometry-per-segment ratio, so combining this with the segment-level display lists usually results in significant performance gains.

To test I'd encourage you to load some of your data in to the HOOPS Part Viewer and set both these options via the General pane of the Tool/Options dialog. Under the "Rendering" section, check the "Static Tree" box and turn on "Segment" level display lists.