1.10. Optimizations

Significant optimizations have been added since the initial 2.0 release in order to speed up computation and rendering.

New NURBS Implementation

The original SGI NURBS implementation has been replaced with FEI technology and offers significant advantages:

  • Faster tessellation

  • More accurate and consistent tessellation (especially around holes)

  • More robust tessellation (no more crashes on large NURBS models)

  • No limit on the order of NURBS curves and surfaces

  • Faster rendering (fewer triangles and smarter caching)

  • Adaptive tessellation (more triangles where they’re needed, less where they’re not)

  • Crack-free tessellation (avoiding gaps between adjacent NURBS surfaces)

Handling Large Amounts of Data

Particular effort has been made to provide additional features that are helpful for applications that deal with large amounts of data.

  • A texture node with memory management (SoExtTexture2 SoExtTexture2 SoExtTexture2 ): This node is similar to SoTexture2 SoTexture2 SoTexture2 but also manages system memory used to hold texture images, supports asynchronous texture loading, and can convert RGBA textures to indexed textures to reduce by 4x the texture memory required.

  • Pass-by-reference for all multiple fields (SoMFField), SoSFImage SoSFImage SoSFImage , and SoSFImage3 SoSFImage3 SoSFImage3 : New methods allow you to pass values to Open Inventor by reference. All potentially large data sets (coordinates, normals, colors, etc.) are passed to Open Inventor though the multiple fields classes or the image fields SoSFImage SoSFImage SoSFImage and SoSFImage3 SoSFImage3 SoSFImage3 (textures, images, etc.). The pass-by-reference enhancement allows Open Inventor to use data directly from application memory instead of making a copy of the data. For large data sets, this significantly reduces the amount of system memory used and increases performance, particularly if the application changes its data frequently.

  • A new field, fastEditing, has been added to SoSeparator SoSeparator SoSeparator . It allows you to modify the sub-scene graph of the separator without redrawing the entire Inventor scene; only the modified part is redrawn. This feature provides the greatest performance increase when the number of triangles in the modified part of the scene graph is relatively small relative to the entire scene graph. See the section called “Fast Editing” for details.

  • SoShapeHints SoShapeHints SoShapeHints has a new field, useVBO, that allows you to speed up the rendering of large non-cached indexed shapes using the OpenGL Vertex Buffer Object feature. See the section called “Optimizing a Non-Cached Scene” for details.

Chapter 30, Optimizing Applications , deals with this topic.

OpenGL 1.x and Extensions

OpenGL 1.1, 1.2, 1.3, 1.4, 1.5, 2.0, and 2.1 provide progressively more advanced rendering capabilities. Open Inventor version 2.2 and subsequent releases have used these versions of OpenGL on all platforms where they were available. Of course, for other platforms, OpenGL 1.0 is still supported. The main OpenGL 1.1, 1.2, 1.3, 1.4, 1.5, 2.0, and 2.1 features used are:

  • Texture Objects: The OpenGL 1.1 texture object feature dramatically improves texture mapping performance.

  • 3D textures: OpenGL 1.2 3D textures are supported by Open Inventor.

  • Vertex Arrays: Open Inventor uses the vertex array feature to improve geometry rendering performance. Vertex arrays are automatically used for all standard shapes (Cone, Cylinder,…) and also for IndexedFaceSet and IndexedTriangleStripSet.

  • Vertex Buffer Object: Open Inventor uses the Vertex Buffer Object feature to improve rendering performance of non-cached geometry. Vertex Buffer Objects are used by IndexedFaceSet and IndexedTriangleStripSet shapes.

  • GLU Tessellator: The OpenGL 1.1 tessellator is used by Open Inventor to decompose non-convex polygons into triangles.

  • Multitexture and Texture Combine Environment Mode: These recent OpenGL additions are used with several multi-pass rendering features, such as sorted layers blend transparency, shadow casting (FXViz), bump mapping (FXViz)…

  • Texture Edge/Border Clamp, Depth Textures and Shadows: Used by Open Inventor and for shadow casting (FXViz).

  • Compressed Textures: All texture nodes support this OpenGL feature which optimizes the amount of texture transfer but also saves the graphics board memory which is limited.

  • Cube Map Textures, Texture Dot3 Environment Mode and BGRA Pixel Format: Used by Open Inventor and for bump mapping (FXViz).

  • Low-level vertex/fragment programming and high-level vertex/geometry/fragment programming (GLSL): Used with shader nodes and for volume rendering (VolumeViz).

  • Multi-samples: Open Inventor uses this feature to activate full scene antialiasing (FSAA).

  • Auto generate mipmaps: Support for mipmap generation in the graphics hardware (if supported by OpenGL on the graphics card)

  • Non-power-of-two textures: All texture nodes support this OpenGL feature which optimizes loading time since Open Inventor does not resize the image to fit a power-of-two value.

  • Render to texture: Open Inventor uses this feature to create textures from Pbuffer rendering.

  • Floating point textures: Allows rendering of higher precision color images.

  • Framebuffer object: Fast offscreen rendering feature used for the "depth peeling" transparency (SORTED_LAYERS_BLEND) and used for the render to floating point buffer.

  • Open Inventor (and its extension modules, Mesh Viz, VolumeViz, etc.) uses OpenGL extensions (and sometimes OpenGL vendor extensions) to improve performance and rendering quality, and reduce memory consumption. The following are some of the many OpenGL extensions are used by Open Inventor and its extensions:

    • EXT_blend_minmax

    • EXT_paletted_texture

    • NV_register_combiners

    • WGL_ARB_buffer_region

    • WGL_ARB_pbuffer





    • SGIS_generate_mipmap

    • ARB_texture_non_power_of_two

    • ATI_texture_float

    • ARB_render_texture

    • EXT_texture_compression_rgtc

    • EXT_texture_compression_latc

    • EXT_framebuffer_object

    • EXT_geometry_shader4

    • ARB_shader_objects

    • ARB_vertex_shader

    • ARB_fragment_shader

    • ARB_vertex_program

    • ARB_fragment_program