Release Notes

 

Open Inventor® 9.6.3 (December 2016) 

Older release notes

The following document contains the release notes for the latest minor release 9.6 (December 2015).

The current service release is 9.6.3. See the bugs fixed section for a complete list of issues resolved for each version. Make sure to read the Compatibility Notes as well. They contain information about important changes in this release.

Finally, check the Life cycle topic for important information about Open Inventor platform support changes in upcoming release.

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

 


New file transfer system

We are no longer using our ftp server to receive test cases and data files from you or to share files (other than product installers) with you. The ftp “incoming” directory has been replaced by the FEI Data Exchange Platform. We believe this tool is simpler and more reliable than ftp. You do not need any client software. It works within your web browser.

Note: When you need to upload a file to FEI, you must obtain an upload link from customer support (vsghotline_europe@fei.com) or your FEI technical contact. Entering this link in your web browser will display a page that allows you to drag-and-drop files and folders or to click and select files to send.

When you receive links to download product installers, those files will still be downloaded from our ftp server using ftp protocol.


Open Inventor

Windows 10 support

Starting with Open Inventor 9.6, Windows 10 platform is now officially supported. This support includes 32 and 64 bits version of Open Inventor for all the supported Visual Studio.

 

MultipleInstance predefined parameters setup simplified

Introduced in Open Inventor 9.5, the SoMultipleInstance provides an efficient way to render many instances of the same geometry in a scene graph. In order to ease the setup of the predefined parameters, Open Inventor 9.6 now provides a new APIs inside the SoInstanceParameter class (setColor, setRotation, setVisibility, setScale, setTranslation). It's now easier than ever to create predefined parameters and set them to be applied in SoMultipleInstance node. The example using SoBufferedShape ($OIVHOME/$OIVARCH/demos/MultiInstancingBufferedShape) is now using this new API to show how to use the SoBufferedShape node with SoMultipleInstance and set instance predefined parameters easily. 

Multiple instances of a complex SoBufferedShape easily colorized
( click on image to get full resolution)

 

Add Support of Texture Array for SoTexture3 

In Open Inventor 9.6 the SoTexture3 node has been enhanced so it can now provide an implementation of a volume or an array of 2D textures (ie. a set of individual 2D textures sharing the same properties). To manage this new property a field has been added (SoTexture3::layout), to indicate whether this node layout is that of a volumetric texture (SoTexture3::Layout::VOLUME) or an array of bi-dimensional textures (SoTexture3::Layout::ARRAY). Note that the two layouts presents some differencies: texture 2D array maximum size is 16384 x 16384 x 2048 where volume is limited to 2048 x 2048 x 2048 and there is no interpolation in z when using the 2D texture array layout.

 

SoTexture3 usable by SoRenderToTarget

SoRenderToTarget can now render into a SoTexture3, and not only in a SoTexture2. From the application point of view it means that for rendering into N 2D targets SoRenderToTarget will just need to instanciate a single SoTexture3 node with, at least, N layers instead of creating N SoTexture2 nodes, allowing great simplifications of the scene graph. Then a layer must be specified to define the slice, in the Z dimension, in which the SoRenderToTarget should write. 

The demo MultipleRenderToTexture3D that can be found in $OIVHOME/Demos/Inventor illustrates how to render multiple targets using a single SoTexture3.

 

Algebraic shapes now support new clipping mode

ClipPlanes now correctly affects any Algebraic shape as it's supposed to be. The support has even been extended with two clipping mode which can be defined throught the new clippingPolicy field added to SoAlgebraicShape node. Two behaviors have been implemented

  • STANDARD : Standard behaviour, the clipping is continuous and the shape can be partially clipped (this is the default value)
  • FULL_SHAPE : On/Off behaviour, meaning the entire shape is clipped as soon as its center is on the clipped side of the clip plane.

Following picture shows how this new clipping works. On the left the SoAlgebraicCylinder instance is set to FULL_SHAPE clipping (explaining why some SoAlgebraicCylinder are fully clipped) while the right picture shows the same scene with the SoAlgebraicCylinder instance set to STANDARD clipping property. On both pictures SoAlgebraicSphere is set to STANDARD clipping.

 

clippingPolicy FULL_SHAPE on SoAlgebraicCylinder clippingPolicy STANDARD on SoAlgebraicCylinder

 

New auditors management

Open Inventor 9.6 introduces a brand new generic mechanism to manage event in OIV. It implies a new class, SbEventHandler, that encapsulates a list of callback (or delegate) that will be called when an given event occurs. ImageViz uses this new event handler to provides three new events:

  • onBegin: Raised when process begin
  • onEnd: Raised when process ends and result is available
  • onProgress: Regularly called during processing. Can be used to implement a progress bar for example.

all this is illustrated in the example ImageViz\DisplayAndInteraction\InteractiveFiltering demonstrating the asynchronous processing and usage of events.

 

CAD Readers import benefits from pre-tessalation

Open Inventor 9.6 introduces a new import option allowing to greatly improve time and memory consumption when importing some CAD formats. Because these CAD formats store faceted data beside B-REP it's possible to load only these faceted-data to speed-up the import process and limit the memory usage. This new import option, called forceTesselation, is available throught the SoCADInputReaderParameters::ImportOption structure.

 

Render Area : Seek to point

Since the introduction of new flexible render area in Open Inventor 9.5, a lot of features have been added to enhance the behavior of these components. Open Inventor 9.6.2 brings also a new update with the availability of the Seek to point feature for all three APIs.

  • C++: new classes Animator, AnimatorListener and SeekAnimator in $OIVHOME/src/Inventor/gui/ViewerComponents
  • Java: new classes Animator, AnimatorListener and SeekAnimator in $OIVJHOME/examples/sources/inventor/gui/viewercomponents
  • .Net: new classes Animator and SeekAnimator $OIVNETHOME/src/demos/Inventor/Gui/ViewerComponents

Each gui integration demo (QtGuiRenderAreaIntegration, WpfGuiRenderAreaIntegration etc) has been updated to integrate this new feature.


VolumeViz

New predefined colormaps

Two new colormaps have been added into node SoColorMap : AIRWAY and AIRWAY_SURFACES are now available as new values of predefined colormap and will match very well with medical datas.

New colormap SoColorMap::AIRWAY New colormap SoColorMap::AIRWAY_SURFACES

Voxels Outline on ortho slices, oblique slices and volume skin.

Previously available only on SoVolumeRender nodes, the option to draw voxel outlines with fading is now available for SoOrthoSlice, SoObliqueSlice and SoVolumeSkin. For SoOrthoSlice and SoVolumeSkin outline represents the outlines of pixels. For SoObliqueSlice the outline is defined as outline of intersection between slice plane and a 3D voxel. The feature is activated through the voxelOutline property of SoVolumeRenderingQuality node placed before the node in the scene graph. Fading can be adjusted using the voxelOutlineThreshold property of SoVolumeRenderingQuality. Its value represents the size of the voxel, in screen pixels, from which the fading is applied on the given voxels.

Voxels Outline Color

The outline color can also be managed using the voxelOutlineColor property of SoVolumeRenderingQuality node, allowing to adjust contrast for a better rendering regardless of current color map.  Below are some pictures of outline activated on SoOrthoSlice and SoObliqueSlice paired with a SoVolumeData showing the continuity of voxels outline between shapes. Each picture can be clicked to see full resolution

Outline Activated on SoOrthoSlice (in red) Outline Activated on SoObliqueSlice (in yellow)

 

Volume Data Range interactive edition

In order to offer a smooth interactivity experience, Open Inventor 9.6 provides a brand new algorithm to compute the data range dynamically. This new algorithm takes advantage of contstantly growing GPU performances to relieve the CPU from this task and to provide better performances. If the data format is supported, the data range is automatically computed by the GPU, with no need for the application to perform any detection. Following is a chart of performances comparison with the CPU version of the algorithm and a brief video showing the level of interactivity reached with former computation.

Short clip showing the level of interactivity reached while changing, in real time, the minimum value of the SoDataRange node

Detecting some bad configuration in scenegraph

In order to avoid weird behavior, VolumeViz will display a message if a mistake is detected. One of this common mistakes is to put a SoVolumeTransform node between a SoVolumeData node and SoVolumeShape. In such case, VolumeViz will display, in debug configuration, a warning to avoid confusion regarding the rendering that may display unexpected results. The message displayed is

An SoTranform is present between SoVolumeData and SoVolumeShape. This may leads to unexpected results. Any transformation should be placed before SoVolumeData.

 


MeshVizXLM

C++ API Specific

Fence Slice now available

MeshVizXLM C++ 9.6 introduces new node MoMeshFenceSlice to visualize fence slice on any type of volume mesh. The application just needs to define following fields to allow fence slice rendering:

A new tutorial named FenceSlice has been added to show how to use the new MoMeshFenceSlice slice node. It can be found in the directory $OIVHOME/$OIVARCH/Demos/MeshVizDataMapping. Note also in the same director that now the EclipseMeshViz demo allows to render and modify a Fence Slice playing only with the mouse.

Click on image to see the fence slice from tutorial in full resolution

Fence Slice manipulation in Eclipse MeshViz demo

Skin extraction optimization

MeshVizXLM C++ 9.6.2 comes with some new optimizations for the non-parallel skin extractions on HexahedronIJK and VertexHexahedronIJK meshes. Following charts illustrate how compute time have been drastically reduced when extracting a skin on these kind of meshes. Note that event if the first extraction is considered to be a special case (it builds a cache to allow all other extractions to be even faster) it still benefit from the optimization just like all the other extractions.

Extraction time bench result for HexahedronIjk mesh (50 millions cells) Extraction time bench result for VertexHexahedronIjk mesh (50 millions cells)

Java / .NET Specific API

Skin extraction on VertexHexahedronIJK optimizations

MeshVizXLM 9.6 Java comes with some great performances for skin extraction on VertexHexahedronIJK mesh. Following charts illustrate how compute time have been drastically reduced when extracting a skin on this kind of mesh.

First skin extraction time with a mesh of 100m cells Second skin extraction time with a cell filter hidding 50% of the cells

Extractions from Hexahedron IJK mesh also benefit from these optimization and show better performances compared to former version.

 

New extractors for non-indexed mesh (VertexHexahedronIJK)

Extended support for non-indexed meshes: Isosurface, slice (plane, cylinder, sphere) representations have been added.

Click on image to see the Isosurface in full resolution

Click on image to see the plane slice in full resolution

New isosurface extractor instance is available in MiIsosurfExtractIjk when calling getNewInstance() with an MiVolumeMeshVertexHexahedronIjk implementation. MoMeshIsosurface node now supports MiVolumeMeshVertexHexahedronIjk for isosurface display.

New slice extractor instance is available in MiPlaneSliceExtractIjk, MiSphereSliceExtractIjkMiCylinderSliceExtractIjk  when calling getNewInstance() with an MiVolumeMeshVertexHexahedronIjk implementation. MoMeshPlaneSlice, MoMeshCylinderSlice and MoMeshSphereSlice nodes now support MiVolumeMeshVertexHexahedronIjk for slice display.

 

MoMeshSlab can handle slabs with a null thickness

This is similar to MoMeshLogicalSlice in MeshVizXLM C++. It has been integrated to MoMeshSlab node and is displayed as soon as the thickness field is set to 0.

Click on image to see the null thickness slab in full resolution

The support of thin slab allows great time saving for extraction from the mesh compare to thick slab as ilustrated by the chart below.

Extraction time (in seconds) comparison between thin and thick slabs

 

MeshVizXLM 9.6 Java various features

Among all these new functionnalities, MeshVizXLM 9.6 Java also brings:

  • Edge and point fading on surfaces
  • Cell picking is now available on non indexed reservoir grid mesh
  • New MoCellRanges node with fields

    The node, used to restrict displayed cells of mesh representations, is only available for MoMeshSkin and MoMeshSlab for now.

  • MoMesh is now able to handle MiSurfaceMeshUnstructured and MiSurfaceMeshCurvilinear. By then a new MoMeshSurface node has been added to display an unstructured or a curvilinear surface mesh (Cell ranges are applied to this surface mesh). A new tutorial, SurfaceCellFilter, has been added to $OIVJHOME/demos/meshviz/meshvizdatamapping directory.

RemoteViz

Bandwidth usage decreased up to 75% 

Compared to RemoteViz 9.5, the new RemoteViz version reduces the bandwidth usage between clients and the service by 35% for the same level of image quality and FPS.
Also, to further reduce the bandwidth usage, the default value of the interactive compression quality parameter has been lowered from 0.5 to 0.3.
This quality reduction just has little noticeable loss of detail or visible artifacts. The default value of the still compression quality parameter has been kept to provide you the best image quality. By adding the previous bandwidth improvements, the bandwidth usage, in default configuration, of RemoteViz 9.6 has been reduced by up to 75% compared to RemoteViz 9.5.

The following graph shows the bandwidth usage comparison between RemoteViz 9.5, RemoteViz 9.6 and H264:

 

Note: H264 tests have been made with the baseline profile (BP) because it is the most suitable given the available performance in a real-time encoder/decoder. The profile also enables low latency that is important requirement of streaming video and also particularly important in enabling real-time, pan/tilt/zoom control.

Use RemoteViz with source other than Open Inventor

The new independent service mode is used to run a RemoteViz application based on your own render engine. A new method (RenderArea::pushFrame) has been added to be able to send a frame to all clients of a renderArea. To enable the independent service mode, you have to call the method open() with the RunMode: INDEPENDENT_SERVICE.

A example (IndependentEngine) has been added to show how to use your own render engine using the RemoteViz API.

 

 

Keep a constant ratio between client

When many users are connected to the same RenderArea by using various aspect ratios, the image on the clients is distorted. To provide a solution, a display mode setting has been added in the HTML5 client API. This setting allows you to specify how to map the renderArea image (server-side) into the container (client-side). The advantage to the first two modes is that the image into the container is not distorted.

  • FIT: This mode resizes the image to fit the container by keeping the same aspect ratio as the renderArea. If the container aspect ratio does not match with the renderArea aspect ratio, bars appear on the sides. This is the default value.
  • CROP: In crop mode, the image is cropped more or less (depending on the container size and the renderArea size) to keep the same scale as the renderArea.
  • STRETCH: This mode stretches the image to fill the container. The renderArea aspect ratio is not kept. This was the previous default mode.

 

The following figures show the different types of display mode.

 

RenderArea (server-side)

 

FIT mode (client-side) CROP mode (client-side) STRETCH mode (client-side)

 

IIS web server Support

RemoteViz now supports IIS proxy. Documentation has been added to explain how to configure a IIS server to handle normal page requests and websocket traffic over the same port and domain (see SetupServers/IIS).

 

[Preview Feature] Use RemoteViz in a native Open Inventor client

Proposed in preview, the node SoRemoteVizClient is a RemoteViz client enabling software developers to easily integrate remote 3D interaction and visualization into their Open Inventor applications. It enables to establish a connection to a RemoteViz service so that display frames into an Open Inventor viewer.

This node is available on Windows and Linux only.


ImageViz

32 bits Windows platforms support

ImageViz 9.6 C++ and ImageViz 9.6 .NET now fully support Windows 32 bits platforms and can be used with following 32 bits compilers

  • Visual Studio 2010
  • Visual Studio 2012
  • Visual Studio 2013

Asyncronous processing

ImageViz 9.6 enriches the SoImageVizEngine class providing new functions and attributes for computing a connected set of ImageViz engines in a separate thread and controlling the process. These new features improve the user experience on GUI software allowing him to:

  • launch an image processing chain while keeping control on the data visualization,
  • get a progress information about the engine computation, for instance to display a progress bar in the UI,
  • interrupt properly the computation of an engine before its end.

Besides the common engine evaluation which launches the computation when the result is required, SoImageVizEngine API is now extended with methods startEvaluate and waitEvaluate, granting the computation on user request, abortEvaluate for cancelling a computation (event if it is in progress) and isEvaluating indicating the status of the engine.

The dedicated SbEventHandler are added to be notified about important state changes : onBegin, onEnd and onProgress allow intercepting a specifc state of the processing applied by the engine.

The InteractiveFiltering demo presents an example of implementation for these new features.

 

New Engine SoImageFormulaProcessing

The new engine SoImageFormulaProcessing enhances significantly the toolkit, providing a way to define a custom processing. The recipe to apply is transmitted to a formula parser which interprets logical and arithmetic operators, conditional expressions, mathematical functions and neighborhood operations. For example, the following snippet creates an engine computing the Euclidean norm from three vector images coming from an SoGradientOperatorProcessing3d engine :

SoRef magnitudeProcess = new SoImageFormulaProcessing(); 
magnitudeProcess->inImage.connectFrom(&gradientProcess->outGradientXImage);
magnitudeProcess->inImage2.connectFrom(&gradientProcess->outGradientYImage);
magnitudeProcess->inImage3.connectFrom(&gradientProcess->outGradientZImage);
magnitudeProcess->inFormula = "Sqrt(I1*I1+I2*I2+I3*I3)";


MeshViz

Classes PoLogAxis, PoAutoCubeAxis, PoGroup2Axis, PoGroup3Axis3, PoGroup4Axis and PoGroup6Axis3 have two new fields gradStart and gradEnd allowing to define range of graduation independently of the coordinates of the box defined by the fields start and end. When using very large range of graduations we strongly suggest to set the new fields gradStart and gradEnd and let the corner of the group of axes to [0-1]. That would prevent any floating point precision issue that can generate some unexpected rendering artifacts.

A new field maxGradNum has been added to the PoLogAxis class. It allows to control the maximum number of main log graduation displayed on a axis. Previously this number could be infinite with numerous unlegible small graduations or in the worst case with an application freeze. This picture shows an horizontal log axis in the range [-20, +20] with OIV 9.6 (lef) compared with OIV 9.5 (right) and with the maxGradNum se to 10.

Even more about axis, the rendering of any logarithmic axis with the class of MeshViz PoLogAxis, has been enhanced. When no power of 10 graduation are in the range of the axis, we display now 2 graduations at the origin point and at the end point of the axis. That allows to know the range of the axis whatever its bounds.


.NET API

.Net API 9.6 now provides a full support for custom engine. Until now, custom engine was only possible by inheriting from SoFieldContainer with an explicit call to an Evaluate() method. Now a custom engine is a derived class from SoEngine. Now the protected Evaluate() method can be overridden and is automatically called when any change occurs on any field. ImageViz module greatly benefits from this new feature as it helps a lot to easily write custom engines, which is a key feature of the module. As an example demos have been updated with real custom engine SoIterativeMorphoLutProcessing.

New preference OIVNET_USER_ASSEMBLIES When a type cannot be resolved when reading an iv file, try first to resolve the type using known assemblies of OpenInventor.Net framework. Then, try to resolve the type using user assemblies provided by the OIVNET_USER_ASSEMBLIES preference.


Medical Edition

Open Inventor is now available in Standard Edition and Medical Edition!

Standard Edition is exactly the same Open Inventor SDK you have now. The new Medical Edition was created specifically to speed development of medical and life science applications. Both editions contain exactly the same Open Inventor 9.6.2 libraries and both editions are unlocked by the same license keys. The Open Inventor Medical Edition SDK is a larger download because of additional specialized content including a medical utility library and medical example programs.

Medical Utility Library

A collection of Open Inventor nodes and classes specifically for medical applications. In addition to the pre-built library, source code is provided so applications can customize the behavior for their exact needs. Classes in the medical library include:

  • MedicalHelper : Static helper methods for optimizing volume loading, data range, view orientation and more.
  • TextBox and DicomInfo : Display annotation text boxes on screen for patient/study/series info, dynamic info and more.
  • SliceScaleBar and SliceOrientationMarkers : Display physical scale of an image and the image orientation.
  • Gnomon : Dynamically displays the orientation of a volume in 3D.
  • Magnifier and Ruler : Zoom in on an image using the magnifier and display a linear measurement tool.
  • PlaneBoxIntersection and PlaneGeometryIntersection : Display the intersection of a plane (e.g. oblique slice) with a box. Display the intersection of a plane with surface geometry and compute capping polygon.
  • VolumeMarchingCubes : Compute surface geometry for an isovalue in a volume (which can then be exported, for example as STL).

Medical Example Programs

A collection of more than 50 programs that illustrate many useful techniques. Previously available as the Medical Demo Package. New examples have been added in this release for DICOM image viewing, image filtering, image segmentation, surface extraction (isosurface) and geometry clipping. Here are just a few of the new example programs.

DICOM Image Viewer example with image filter and image wipe shader
( click on image to get full resolution)
DICOM Image Viewer example with manual segmentation using flood fill
( click on image to get full resolution)
  • DICOM Image Viewer
  • DICOM Volume Viewer

    DICOM Volume Viewer example
    ( click on image to get full resolution)

  • DICOM Four View

    DICOM Four View

    DICOM Four View example

  • PlaneGeometryIntersection
    Clip line Capping polygon
    Clip line mode Capping polygon mode

    PlaneGeometryIntersection example