Significant optimizations have been added since the initial 2.0 release in order to speed up computation and rendering.
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)
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( C++ | Java | .NET )): This node is similar to SoTexture2( C++ | Java | .NET ) 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( C++ | Java | .NET ), and SoSFImage3( C++ | Java | .NET ): 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( C++ | Java | .NET ) and SoSFImage3( C++ | Java | .NET ) (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( C++ | Java | .NET ). 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( C++ | Java | .NET ) 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.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
Texture Edge/Border Clamp, Depth Textures and Shadows: Used by Open Inventor.
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.
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
NV_OCCLUSION_QUERY
HP_OCCLUSION_TEST
NV_TEXTURE_RECTANGLE
NV_MULTISAMPLE_FILTER_HINT
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