Open Inventor Release 2024.2.0
 
Loading...
Searching...
No Matches
VolumeViz Features

This section is a quick tour of all the features in VolumeViz. It can also be used as a “quick reference” that links the various features to the related nodes, fields and methods.

Volume Data

Use the SoVolumeData node to access volume data. The data volume can be given by:

  • A file name (VolumeViz supports DICOM, SEGY, LDM and other formats directly)
  • A volume reader (application provided plugin to handle a specific file format)
  • A block of memory
  • Conversion to LDM format See Data for more information.

Volume Properties

  • Size: number of voxels on each axis
  • Extent: geometric extent of the volume in 3D space
  • Voxel size/spacing: may be uniform, different for each axis or even vary along each axis
  • Data type: integer or floating point scalar values, RGBA values, boolean values (mask)
  • Number of significant bits: for example 12 bit values in 16 bit words
  • Data range: actual range of values to map into the color table
  • Many other volume properties can be specified using fields of SoDataSet and SoVolumeData, for example, the amount of CPU memory and GPU memory that each volume can use. Application specific properties of a volume, for example seismic survey properties, can be stored in the LDM header file as custom XML tags. See Data for more information.

Volume Visualization

  • The volume data is specified by an SoVolumeData node. Multiple volumes can also be specified.
  • The region of voxels to be rendered (the "region of interest") can be specified using an SoROI node.
  • The range of data values to be mapped into the transfer function can be specified using an SoDataRange node.
  • The color and opacity associated with each data value can be specified using an SoTransferFunction node.
  • The base material properties of voxels, e.g. emissive and specular color, can be specified using an SoMaterial node.
  • VolumeViz provides many different ways of visualizing volume data, including:
+ **SoOrthoSlice** : Renders a single axis aligned slice.
+ **SoObliqueSlice** : Renders a single arbitrarily aligned slice.
+ **SoFenceSlice** : Renders a "strip" of connected oblique slices.
+ **SoVolumeSkin** : Renders the faces of the current Region of Interest (see SoROI).
+ **SoVolumeIndexedFaceSet** (etc): Renders a "slice" made up of arbitrary geometry.
+ **SoVolumeIsosurface** : Renders the isosurface defined by the specified data value.
+ **SoVolumeRender** : Renders the volume using direct volume rendering.

@anchor SoOrthoSlice,_SoObliqueSlice,_SoFenceSlice
SoOrthoSlice, SoObliqueSlice, SoFenceSlice

Advanced volume visualization

  • Custom shaders

Custom transfer functions, custom rendering effects and custom blending are just a few of the many possibilities that can be implemented using an SoVolumeShader node and GLSL shader functions. (GLSL is the standard OpenGL shader language.) Shader functions can be loaded from disk or precompiled in the application. VolumeViz provides a framework of prebuilt shader functions for commonly used calculations and effects. This allows applications to extend or replace stages in the rendering pipeline while still taking advantage of other VolumeViz features. VolumeViz also provides an advanced “virtual texture” mechanism on the GPU that allows shader programs to access any data in the volume without worrying about tile boundaries.

See Shaders for more information.

Custom shader for co-blending multiple volumes

Volume visualizations can be clipped in multiple ways:

+ By clipping planes using an **SoClipPlane** node, like any Open Inventor geometry.
+ By a box in voxel coordinates using an SoROI node. An optional exclusion box allows cut-away views like the “chair cut” in seismic visualization.
+ By any closed shape defined by polygonal geometry using an **SoVolumeClippingGroup** node.
+ By a "height field" surface (for example a seismic horizon) using an **SoUniformGridClipping** node.
+ By an arbitrary voxel region using an **SoVolumeMask** node.
+ Multiple clipping techniques may be combined to “sculpt” volume regions. See  @ref Inventor_Mentor_Extensions__VolumeViz__Clipping__Clipping for more information.

Volume clipped around a well bore

VolumeViz allows the creation of highly interactive volume rendering applications:

+ Picking works for VolumeViz objects like for any Open Inventor geometry. Including the application can get detailed information, like the voxel value, from a pick (see for example **SoOrthoSliceDetail**).
+ VolumeViz provides specialized draggers and manipulators to allow users to directly interact with volume rendering scenes. For example **SoOrthoSliceDragger** allows dragging a slice through the volume.
+ Modifying VolumeViz property nodes (like any Open Inventor node) automatically causes the scene graph to be re-rendered. For example changing the color map by modifying the fields of **SoTransferFunction**.
+ The volume itself can be modified interactively using the “volume edit” methods (startEditing, finishEditing, etc) in **SoVolumeData**. Volume editing supports undo and redo.
+ For very large volumes VolumeViz provides multiple options for temporarily reducing the rendering complexity while interacting with the scene. See for example the **SoInteractiveComplexity** node.
  • Transforming data

Volume data can transformed "on the fly" at several stages in the pipeline:

+ The **SoLDMDataTransform** class (see the *dataTransform* field of **SoDataSet**) applies a computation to each LDM data tile requested from the volume reader before the tile is stored in system memory. This can be used to apply “static” filters to the data, for example to scale and offset data values.
+ The **SoVolumeTransform** node applies a computation to the LDM data tiles just before they are sent to the GPU. This can also be used to apply dynamic filters to the data, for example computing seismic attribute values.
+ Both transform mechanisms can be used to create multiple data sets from a single data set.
+ Custom shaders (**SoVolumeShader**) can also be used to do computation during rendering. See  @ref Inventor_Mentor_Extensions__VolumeViz__Transforming_Combining_Volumes__TransformingandCombiningVolumes for more information.
  • Multiple data sets
+ Multiple **SoVolumeData** nodes can be inserted in the same scene graph.
+ If the volumes are independent and rendered separately, use an **SoVolumeGroup** node to manage and correctly render intersecting regions.
+ Multiple volumes can be combined into a single data set or single rendering using data compositing or render compositing. Use an **SoMultiDataSeparator** as the parent of the nodes that will be composited.
+ Data compositing combines multiple volumes (see **SoDataCompositor**) on the CPU at data loading time. Data compositing can be used, for example, to visualize the difference between two data sets.
+ Render compositing combines multiple volumes on the GPU at render time using a fragment shader (see **SoVolumeShader**). Render compositing can be used, for example, to implement “co-blending” of multiple volumes or to implement multi-channel color combining. See  @ref Inventor_Mentor_Extensions__VolumeViz__Transforming_Combining_Volumes__TransformingandCombiningVolumes for more information.
  • Data Access

LDM is a powerful data manager for large volume data and VolumeViz provides a Data Access API that allows applications to take advantage of this for applying algorithms to their volume data.

+ **SoLDMTopoOctree** allows the application to query the structure of the tile hierarchy.
+ **SoLDMDataAccess** provides the methods to extract data from a volume. The data is accessible whether the **SoVolumeData** is part of a scene graph or not.
+ Data access methods can be invoked synchronously or asynchronously to allow simultaneous loading and computation.
+ The application can request data at any resolution level, independent of the resolution level currently being used for rendering
+ VolumeViz supports a variety of data requests including:


    - Subvolume: The set of voxels inside a specified subvolume.
    - Plane: The set of voxels intersecting an arbitrary plane.
    - Line: The set of voxels intersecting an arbitrary line.
    - Trace: A column of axis aligned voxels (e.g. a seismic trace).
    - Polyline: The set of voxels intersecting an arbitrary polyline.
    - Tile: Direct access to the tile containing a specified voxel.
+ Extracted, modified or synthesized data can be written to an LDM format file by subvolume or tile using the **SoLDMWriter** class. See  @ref Inventor_Mentor_Extensions__VolumeViz__Data_Access_Computing__DataAccessandComputing for more information.
  • Computation

Volume computations can take advantage of the Open Inventor computing framework to manage data, devices and algorithms on the CPU and GPU (using CUDA or OpenCL).

+ The SoDevice class abstracts computing and rendering devices. Device
 specific classes, for example **SoCpuDevice**, allow
 querying the number of available devices, available memory, etc.
+ The **SoBufferObject** class abstracts data
 management. Device specific data objects, for example
 **SoCpuBufferObject** allows the application to
 control where memory is actually allocated. It also allows algorithms to
 be implemented on CPU or GPU (or both) using
 **SoBufferObject** without knowing where the
 memory is allocated (Open Inventor will transfer when necessary).
+ The algorithm classes provide optimized versions of some useful
 computations for each class of computing device (CPU, GPU). See
 **SoArithmetic**,
 **SoConvolution**,
 **SoSeismic**, etc.
+ The computing framework classes are integrated with the data transform, compositing and data access classes mentioned previously. See  @ref Inventor_Mentor_Extensions__VolumeViz__Transforming_Combining_Volumes__TransformingandCombiningVolumes for more information.