Giga Voxel Renderer

Introduction

The GVR ( Giga Voxel Renderer ) is an octree-based volume render that allows high-quality Volume Rendering of 3D/4D images. It is driven by the main SoGVRVolumeRenderer. It is complemented with a set of extension modules that allow to customize the rendering (See Extensions for details).

Features

  • Multi-Resolution capabilities by decomposing the images into octrees
  • Large image support, e.g. 512x512x2000 CT slices (12bit)
  • Time depend data support and cine-animation mode
  • Octree cache file support for very fast low-res previews
  • MIP, Direct Rendering (8/12/16 bit data support)
  • Interactive hardware texture lookuptable (12bit, via fragment shader)
  • Interactive RGBA LUT editor + presets
  • Shading * Blinn-Phong Lighting (3 directional colored lights) * Tone shading * Boundary enhancement * Silhouette enhancement
  • High quality gradients with Sobel3D gradient estimator
  • Tag Volume support (8 Bit tag data)
  • 2D Lookuptable (LUT per tag-id)
  • 3D Lookuptable (LUT per tag-id + gradient strength)
  • Per Tag shaders (multiple render modes in the same volume for different tags)
  • Mask Volume (Binary or 8 bit mask) with very fast update and arbitrary resolution
  • Sub/Oversampling via higher sampling rates
  • Empty space skipping via binary histograms
  • Picking (MIP, alpha threshold)
  • ROI selection
  • OpenGL ClipPlanes are supported
  • Intermixing with triangle geometry (non-transparent/transparent via SoGVRDepthPeel only)
  • Slab Rendering via SoView2D and SoView2DScene, see SoGVRSlabHint for an example network
  • Extensible GLSL shader pipeline, see SoGVRShaderFunction.
  • Cooperation with the Inventor shader framework, using e.g. SoShaderParameter3f, SoMLSampler3D, ... in the shader functions
  • Both slicing and ray casting are available, see SoGVRRayCastSettings for details on the ray caster
  • First Hit Ray Casting, see SoGVRFirstHitRayCastSettings

Hardware requirements

The GVR requires OpenGL 2.0 hardware/drivers and 3D texture support for high quality Slicer and RayCaster rendering and makes use of GLSL shaders.

On older hardware, the GVR falls back to a legacy mode that works on OpenGL 1.2 and requires only 3D texture support. This mode only supports direct volume rendering of a single intensity volume.

Extensions

After the basic features of the GVR have been described, you will ask yourself how you can access all the features from the above feature list. The key to this are the SoGVR extensions which can be placed "in-front" of a SoGVRVolumeRenderer module to add additional volumes and to modify its settings. The SoGVRVolumeRenderer collects all extensions (modules starting with SoGVR, derived from SoGVRExtension) when rendering and applies their settings to its internal state (from left-to-right). This even allows to share the same SoGVRVolumeRenderer module in multiple SoExaminerViewers with individual extension modules placed in front of it (e.g. different shader settings or ROI).

Basic settings extensions

The settings extensions allow to overwrite the settings of the SoGVRVolumeRenderer, e.g. when the same render should be used in different viewers with different modes.

Rendermode extensions

The following extensions switch to different render modes.

Tagged Volume extensions

User supplied gradients

  • SoGVRGradientVolume - sets a tag volume and allows tagged volume rendering together with a 2D Lookuptable

Mask Volume extensions

  • SoGVRMaskVolume - sets a mask volume that allows masking of regions of the original volume
  • SoGVRMaskSettings - allows to overwrite the settings of the SoGVRMaskVolume, make sure to place it behind to mask volume

Secondary Volume extensions

Transformed Volume extensions

Secondary LUT extension:

  • SoGVRSecondaryLUT - sets an additional LUT which can be used from the SoGVRSecondaryVolume/Transformed volume or in custom shaders

Misc extensions:

  • SoGVRPickResult - allows to access detailed picking results as base object and curve lists

Debugging extensions

Beware, they may change dramatically over time!

  • SoGVRDebug - a debugging module that allows to change various internal settings of the renderer, make sure you do not use that module for production code, it is only for testing purposes and might change heavily over time
  • SoGVRDiagnosis - a diagnosis module that gives various information strings on the current rendering state, only useful for debugging purposes
  • SoGVRShaderDiagnosis - a diagnosis module that shows the internal shaders and logs
  • SoGVROptimizations - a module that allows to change the optimization settings of the renderer for renderer debugging or custom shaders

Octree generation/loading

The SoGVRVolumeRenderer, SoGVRTagVolume and SoGVRGradientVolume all have the possibility to load their image data from a so called GVRVolume base object. These GVRVolume objects can be created in-memory or written to disk and loaded with the GVRVolumeLoad module.

Available modules are:

Custom GLSL shader programming

The GVR supports custom extension of its GLSL shader pipeline by adding/removing/replacing parts of the shader pipeline using the following modules:

The SoGVRShaderDiagnosis module is very useful to debug while doing the shader development. Don't forget to add the diagnosis module to the scene graph. The diagnosis module only shows up-to-date information when it is part of a scene that is viewed in a viewer.

In addition to the built-in uniforms and the pipeline state struct, you may add additional uniforms and texture samplers. This is done via the GLSL shader framework of MeVisLab:

In addition to that, there are: