Release Notes


Open Inventor 9.3.1 (January 2014) 

Older release notes

The following document contains the release notes for the latest minor release (9.3 October 2013).

The current service release is 9.3.1. See the bugs fixed section for a complete list of issues resolved for each version.



See below the complete list of enhancements and new features included in Open Inventor 9.3.

Make sure to read the Compatibility Notes as well. They contain information about important changes in this release.
Finally, check the System Requirements topic for important information about Open Inventor platform support changes in this release.

Visual Studio 2012 update 3 support

Open Inventor for Visual Studio 2012 is now built using update 3 of Visual Studio 2012. 

Open Inventor

Marker set increased performance

OpenGL 3.3 capable GPUs benefit from a new implementation of the SoMarkerSet and SoIndexedMarkerSet nodes. The new implementation allows near real-time interaction with millions of markers, and adds two new fields, makerGlobalScale and  markerScale, which specify an optional scale factor to be applied to every marker in the set.  The performance improvement is automatic. No application changes are needed.

Tessellation shaders support

New SoTessellationControlShader and SoTessellationEvaluationShader nodes expose the programmable tessellation stages introduced in OpenGL 4. An example of use is available in $OIVHOME/src/Inventor/examples/features/Shaders/TessellationShader.


  • Tessellation shaders are currently only supported by SoBufferedShapeSoPointSet and SoindexedPointSet.
  • Transparency and fast editing are compatible with shader modified geometry, but most actions use the vertices of the basic shape (the vertices stored in the scene graph). This includes, for example, SoGetBoundingBoxActionSoGetPrimitiveCountAction and SoRayPickAction

Render caching works for rendering modes with a delayed pass

Rendering modes with a "delayed" pass now automatically use render caching for the delayed shapes, resulting in a significant performance improvement in many scenarios. Previously delayed shapes were rendered without caching. The most common case is delayed transparency modes, e.g. DELAYED_BLEND and DELAYED_SORTED_LAYERS_BLEND, where non-opaque shapes are delayed. A number of new cache management optimizations have also been implemented in the main traversal. The performance improvement is automatic. No application changes are needed.


New opacityThreshold field in SoVolumeRender

The new field opacityThreshold specifies a threshold opacity (alpha) value that defines which voxels are considered to be "solid" (non-transparent).

Many volume data sets are composed of objects of interest floating in an approximately transparent "fog", depending on the opacity values specified in the transfer function. Several effects like BOUNDARY_ALIGNED sampling, ambient occlusion and deferred lighting need to locate the boundary between solid objects and ambient fog. Voxels are considered solid if their alpha value is greater than opacityThreshold.  The default value is 0, giving the same behavior as previous releases - voxels are considered solid if their alpha value is greater than zero.

New SMOOTH_BOUNDARY_ALIGNED sampling alignment mode

The samplingAlignment field of SoVolumeRender accepts a new value, SMOOTH_BOUNDARY_ALIGNED. The SMOOTH_BOUNDARY_ALIGNED mode is similar to BOUNDARY_ALIGNED mode except that the boundary is computed using tri-cubic interpolation for better precision and higher quality rendering, particularly when using deferred lighting (see SoVolumeRenderingQuality) by reducing slicing artifacts.


Note: Not supported for isosurfaces or render modes using 3D gradients (lighting, for example). In these cases BOUNDARY_ALIGNED will be used instead.

New volume geometry node: SoVolumeBufferedShape

This node defines a shape that is the intersection of the volume data defined by an SoVolumeData node and the 3D shape defined by an SoBufferedShape node. The shape defined by this intersection is colored using the data values from the current SoVolumeData node and the color map from the current SoTransferFunction node. This node can be used to create custom "slices" through the volume, for example a cylinder slice.

SoVolumeGroup improvements

The SoVolumeGroup node allows multiple volumes that overlap in spatial extent to be volume rendered (SoVolumeRender) correctly in the same scene. (This is different from blending coincident volumes using shaders and works for volumes with different dimensions and extents.)
  • SoVolumeGroup now supports offscreen rendering.
  • SoVolumeGroup now supports the edge detect effect (see edgeDetect2D in SoVolumeRenderingQuality) and no longer suffers from alpha composition precision issues. It now uses a 32-bit floating point frame buffer internally. This enables the use of high precision alpha composition and application of image space effects (like edgeDetect2D) without incurring a performance penalty. 
  • SoVolumeGroup now supports low resolution mode (see lowResMode in SoVolumeRender).

Deferred lighting supports up to 8 light sources

Deferred lighting (see deferredLighting in SoVolumeRenderingQuality) has been improved and now is able to support up to 8 light sources.  Gradient based lighting still only supports a single light source.

Note: The light sources must be directional lights (SoDirectionalLight).

Enhancement to tricubic interpolation

  • The VVizGetData() function (part of the VolumeViz GLSL API for custom shaders) now takes into account the cubic interpolation setting.
  • Cubic interpolation can now be enabled and disabled with an SoInteractiveComplexity node to improve performance during interactivity.

Note that cubic interpolation is now controlled by the shape node's interpolation field (see Compatibility Notes).

MeshViz XLM (C++ API only)

Slab visualization

The new class MoMeshSlab is provided to visualize a "slab" of cells on structured meshes or reservoir meshes. A slab of an IJK mesh is an unstructured surface mesh made of all the visible faces from cells in the range [index to index + thickness] along a given dimension I, J or K. This is much more efficient than selecting cell using a cell filter.  Cell filter can still be used and is applied to the cells in the slab. Slab rendering is related to slice rendering, but MoMeshLogicalSlice extracts a surface along one face of each cell with the same index and so has no "thickness" along the slice axis.

New cell ranges

The new fields minCellRanges and maxCellRanges of MoMeshSkin allow visualization of a sub-range of cells in a mesh. Effectively these fields specify a "region of interest" within the mesh. This is much more efficient than selecting cells using a cell filter.  Cell filter can still be used and is applied to the cells in the specified range.

Performance enhancement for MoMeshIsosurface, MoMeshPlaneSlice and MoMeshInterpolatedLogicalSlice

The mesh extraction on MiVolumeMeshHexahedronIjk, MiVolumeMeshCurvilinear, MiVolumeMeshRectilienar and MiVolumeMeshRegular is significantly faster using multi-threaded code.

Optimization of MoMeshPlaneSlice

The extraction of a plane slice has been optimized when the plane is translated but not rotated.

Optimization of MiVolumeMeshVertexHexahedronIjk

Display of a non-indexed reservoir mesh is significantly faster thanks to new multi-threaded code.


Linear axis graduation improvements

It is now possible for a linear axis to display a numeric range independent of the position of the axis.  Previously the range of values displayed on the axis was solely determined by the axis position.

See new fields gradStart and gradEnd in the class PoLinearAxis

API Specific

.NET API Specific

Custom SoDetail and SoElement classes

You can now write your own class in C# that inherits from SoDetail or SoElement.

Java API Specific

Custom SoNode classes

You can now write your own class in Java that inherits directly from SoNode

Note: Currently only direct inheritance from SoNode is possible. For example, the new class can inherit from SoNode but not from SoSeparator.

Custom SoDetail and SoElement classes

You can now write your own class in Java that inherits from SoDetail or SoElement.