What Is Open Inventor?
The Inventor Mentor introduces graphics programmers and application developers to Open Inventor, an object-oriented 3D toolkit. Open Inventor is a library of objects and methods used to create interactive 3D graphics applications. Although it is written in C++, Inventor also includes C bindings.
Release notes Open Inventor 2023.2
Minor version published in September 2023.
Enhancements and new features included in this version:
Open Inventor 2023.2 includes all fixes available in Open Inventor 2023.1
VolumeViz
Arbitrary tile size
A volume data is represented as a set of tiles for out-of-core and multiresolution rendering. In previous releases, each tile had to have the same dimensions in x and y, and had to be a power of 2, e.g., (128,128,128) or (512,512,8). As of 2023.2 the tile dimensions can be 3 different arbitrary values in x, y, and z.
The main benefit of this new feature is the ability to specify tile dimensions equal to the volume dimensions. In that case, the rendering is performed using only a single resolution, i.e., the resolution of the volume without multiresolution. However, this option needs that the volume data fits entirely in the available CPU and GPU memories (see the fields maxMainMemory and maxTexMemory in the class SoLDMResourceParameters). Otherwise, VolumeViz falls back in the classic behavior and creates tiles to support out-of-core rendering.
The tile dimensions are specified by the field SoLDMResourceParameters::tileDimension. If the API is not new in 2023.2 it makes it independent from the tile dimensions specified by the SoVolumeReader::getTileSize() method. This enables to load a tiled dataset (such as LDM file format) with different tile dimensions than the original format to improve the loading time. The SoLDMResourceParameters::tileDimension must be set once the filename is set. That parameter can be push up to the volume dimensions.
Progress bar on slices
On previous versions, the loading progression of the data was only tracked when doing volume rendering. As of 2023.2 version, it is also possible to track data loading progression with slices (see SoOrthoSlice or SoObliqueSlice) or volume skin (see SoVolumeSkin).
See SoVolumeShape::setRenderProgress for detail. Note: the render progress is only taken into account by the classes SoOrthoSlice, SoObliqueSlice and SoVolumeSkin even if their base class SoVolumeShape contains other sub classes.
The example named VolRend has been updated and a progress bar is attached to the loading progression of the volume rendering, the volume skin, and all ortho and oblique slices.
New platforms
List of supported platforms
Until 2022, the system requirements and supported platforms were only specified in the developper zone and were only updated for the latest version of Open Inventor. As of Open Inventor 2023.2, the list of supported/deprecated/dropped platforms and their requirements are now part of the reference manual here.
Furthermore, the system requirements document now includes the requirements of previous versions of Open Inventor.
Open Inventor on .NET6
Open Inventor is available on .NET6 as a preview built in addition to .NET framework 4.7/4.8.
Limitations:
- As the .NET api of Open Inventor is mostly written in C++ and C++/CLI, some related limitations exist and described here. Thus, any application using some Open Inventor .NET6 assemblies must embed the ijwhost.dll that is delivered in the folder $OIVNETHOME/assemblies/arch-xxx.
- the native dlls of Open Inventor must be manually copied in the destination folder of your application. As alternative, you can also add to your PATH environment variable $OIVNETHOME/assemblies/arch-xxx.
- the examples using RemoteViz assembly do not yet work with this version.
Visual Studio 2022 support
A new package of Open Inventor C++ built with Visual Studio 2022 is available in the download pages as of 2023.2 version.
RemoteViz
Front-end & back-end synchronization
Thanks to some javascript libraries for 2D vector drawing, it can be useful and convenient to mix javascript rendering on the front-end with an Open Inventor rendering on the back-end. However, it can be necessary to send information from back-end to front-end in order to synchronize both rendering. For instance, when a javascript circle's center must track a vertex of the 3D scene rendered by Open Inventor. Thus, it is necessary to synchronize front-end and back-end when a simple zoom or pan of the 3D scene leads to a new position of the 3D vertex in the pixel space of the rendering area.
Such type of synchronization can be done by using the following new methods available as of 2023.2 version:
- RemoteViz::Rendering::RenderArea::setFrameMessage()
- RemoteViz::Rendering::EncodedFrame::getMessage()
A new example highlights how to synchronize a javascript cirle with the top of a cone.
- C++: $OIVHOME/examples/source/RemoteViz/FrontBackSync
- .NET: $OIVNETHOME/examples/source/RemoteViz/FrontBackSync
- Java: $OIVJHOME/examples/remoteviz/frontbacksync
MeshVizXLM
Color mapping improved in MeshViz XLM
When rendering a structured mesh having PER_NODE data binding, the default interpolations performed by the GPU can lead to display some pixels whose color does not belong to the chosen color map. This new version removes this artifact and all pixels used to render the mesh have only colors that belong to the color map. This new correct behavior may generate significant change in the rendering compared to previous version. That can be noticed when a large number of pixels are used by the render area to represent a cell, for instance when zooming on a single cell that have a large data gradient on its nodes.
The following images show the rendering of a 3D structured mesh where all mesh nodes in its left part have value 0, and all the mesh nodes in its right part have value 100. The color map used is a blue-white-red from 0 to 100. All hexahedron cells in the middle of the mesh have 4 nodes with value 0, and 4 nodes with value 100. Those cells are rendered with unexpected purple pixels before this new version.
Core
Minor API changes
- In C# API:
- The method SoAction.EnableElements() is obsolete : Use the EnabledElements property instead.
- Some methods of the SoVolumeReader class are now deprecated:
- The method GetBorderFlag() is now obsolete in the class SoVolumeReader. It is only kept in the class SoVRLdmFileBorderReader that is used to read old file format that contains borderFlag.
- The method GetMinMax(Int32,Int32) is now obsolete and GetMinMax(Int64,Int64) must be used instead.
- The method SetUserData(Object) is now obsolete and the property UserData must be used instead.
- The method GetHistogram(Queue) is now obsolete and GetHistogram(IList<long>) must be used instead.
- In C++ API and Java API:
Reference manual update
The C++ reference manual provided in $OIVHOME/doc/ReferenceManual in the Windows package has change and has a new look and user interface thanks to the latest Doxygen version. The CHM file provided in previous versions has been replaced by a folder containing a list of HTML files. Open the file $OIVHOME/doc/ReferenceManual.html in any browser to see the main page of the reference manual. The following changes can be noticed in the new manual:
- a new search engine.
- a different look and style.
- the document of each class provides a new "list of all members" including all inherited members.
- a new list of the fields and methods per parent class.
Compatibility notes
The following notes mention the API changes made in this version compared to Open Inventor 2023.1.
C++ API
SoVolumeReader::getSubSlice(const SbBox2i32&, int, void*)
this method has now a default implementation that prints an error message when called.
C# API
The method SoVRLdmFileBorderReader.IsThreadSafe() is removed and replaced by the IsThreadSafe property inherited from SoVolumeReader.
Java API
class com.openinventor.inventor.SbViewVolume
the method getProjectedBbox(com.openinventor.inventor.SbMatrix, com.openinventor.inventor.SbBox3f) is now static
Life cycle events
Dropped platforms
As of Open Inventor 2023.2 the following platforms or devices are no longer supported:
- AMD GPUs
- Ubuntu18.04
ImageViz becomes deprecated
ImageViz extension is deprecated as of Open Inventor 2023.2 . ImageViz is still supported and there is no impact when running an application using ImageViz. However warnings are raised when compiling source code that uses a class or a function of ImageViz. The examples using ImageViz have been removed but can be retreived from previous versions.
ImageViz is replaced by the new ImageDev toolkit which provides the same features with the added benefit of a simpler API. More details are available here: developer.imageviz.com and imagedev-software-development-toolkit
Misc API and feature deprecation
The support of the following file format becomes deprecated.
- VolumeViz JP3D compression
- PNM (Portable Any Map)
- PGX (JPEG 2000 Verification Model)
- RAS (Raster Graphic by SunOS)