SoGVRVolumeRenderer¶
-
InventorModule
¶ genre VolRend
author MeVis Medical Solutions AG
package MeVisLab/Standard
dll SoGVR
definition soGVR.def see also View3D
,SoGVRTagVolume
,SoGVRGradientVolume
,SoGVRTagObjectStyle
,SoGVRIlluminationSettings
,SoGVRSubVolumeSettings
,SoGVRQualitySettings
,SoGVRIncrementalUpdater
keywords rendering
,maximum
,minimum
,intensity
,projection
,3D
Purpose¶
The SoGVRVolumeRenderer
is an octree-based renderer that enables high-quality volume rendering of 3D/4D images.
The SoGVRVolumeRenderer
is the main rendering module and is complemented by a set of extension modules that allow for customizing the rendering. All extensions start with the SoGVR* prefix and are listed on the Giga Voxel Renderer
page. The acronym GVR is used in the following text as a substitute for Giga Voxel Render.
For general details about the GVR and its extensions, refer to Giga Voxel Renderer
.
Usage¶
The SoGVRVolumeRenderer
module is placed into an Open Inventor scene and accepts either an ML image or an octree (GVRVolume) as the main volume dataset.
Tips¶
The same SoGVRVolumeRenderer
can render its connected volume dataset with different render modes and shading.
This is achieved by reusing the same volume renderer in different Open Inventor scenes and customizing the rendering using GVR extensions, such as the SoGVRIlluminationSettings
. This allows for sharing the same textures and data structures while applying different camera settings, shaders, clipping, etc., to the rendering. A single renderer can thus drive multiple views of the same dataset, including mixed slab and 3D rendering. It is important to add a SoGVRIncrementalUpdater
module to each separate scene to prevent the incremental update feature of the GVR from triggering repaints in all scenes.
Windows¶
Default Panel¶

Data Loading¶
- Load Volume - Loads the given volume (if auto load is turned off)
- Auto load - Sets if the module should load the given input volume whenever it changes
- Force 8 Bit - If this flag is enabled, the input data is scaled to fit into 8 bit data (only of the image is given by the input image, not when given by the
inVolume
field)
View mode¶
Render Mode
- Sets the render mode that the renderer uses.- Direct: Direct volume rendering (with optional mask volume and tag volume support)
- Illuminated: Illuminated volume rendering (with 3 directional light sources, tone shading, boundary and silhouette enhancement, optional mask volume and tag volume support and per tag shaders)
Blend Mode
Quality¶
- Interactive/Static Quality sets the interactive and the static quality of the rendering. The quality value defines the percentage of the texture memory as given in GVRCacheManager that the GVR may use for the rendering. A value of 1 means that the entire texture memory will be used, smaller values will result in faster renderings on big volumes.
- Interactive/Static Sampling Rate
allows for setting the sampling rate of the rendering (only in High Quality mode).
A value of 1 means that the complete volume is sampled with an internal sampling rate of 2 so that the Nyquist theorem is fulfilled and each voxel is sampled. Higher sampling rates can be set to archive higher quality images, especially for low-res input images. Sampling rates lower than 1 lead to heavy artifacts but can be used to speed up rendering. You can also consider using a
SoFramebufferRenderer
to reduce the sampling in the image place instead of changing the sampling rate. We discourage settings sampling rates below 1, better reduce the Interactive Quality instead. Note that the sampling rate is NOT used if the GVR renders slabs on aSoView2DScene
, since it will render exactly the slices that theSoView2D
would render for that slab. - Incremental updates - this feature allows the GVR to schedule multiple incremental updates if the initial static image is not of the desired image quality, because it still needs loading from disk. This should be turned on since it leads a very interactive user experience
NOTE: Be careful if you want to use the same SoGVRVolumeRenderer
with incremental updates in multiple viewers at the same point in time. This requires an individual SoGVRIncrementalUpdater
for each of the Open Inventor scenes.
LUT¶
The SoGVRVolumeRenderer
has an internal lookup table that is typically overwritten with a more advanced LUT module that is placed in front of the renderer module in the scene graph.
The internal LUT represents a simple gray and alpha ramp that can be multiplied by a color and an alpha factor. A typical LUT module that is placed in front of a SoGVRVolumeRenderer
is the SoLUTEditor
, which allows for interactively designing a LUT.
Illumination¶
The Illumination settings are used if the Render Mode is set to “Illuminated”. They are described in detail in the SoGVRIlluminationSettings
. The Illumination settings require that the GVR calculates gradients. The gradients and the gradient strength are calculated by a Sobel3D gradient estimator. Alternatively, the gradients are calculated on-the-fly using central difference (if gradient quality is set to Highest or in some render modes, e.g., the Ray Caster). The gradients can also be supplied by the user using a SoGVRGradientVolume
. The following settings affect the gradient quality and more importantly their memory consumption:
ROI/SubVolume¶
The subvolume that the renderer shows can be selected by three interval sliders. The rendered temporal position and the user index can be selected. When a ROI is selected, the renderer will automatically calculate the possible render resolution according to the quality settings depending on the size of the ROI. This means that even on a very large volume the renderer can render small ROIs in full resolution. If the data is stored in a cache file, the renderer can interactively load the required full resolution from disk whenever the ROI changes.
Select/Picking¶
The renderer supports selection aka picking via an Open Inventor Scene. The picking will only be active if there is a picking node in the scene, e.g., a SoSelection group.
- Selection active - enable picking
- Alpha threshold Defines the alpha threshold that should be used for picking; this means that for Direct rendering with Blending the renderer will cast a ray and report the first hit of a voxel whose opacity/alpha (according to the LUT) is above the given threshold. For the MIP rendering, the maximum hit voxel on the ray is returned.
- Voxel Position Provides the voxel coordinate of the hit voxel in subvoxel precision (in voxel coordinates, from (0, 0, 0) to (volumeSizeX, Y, Z)).
- World Position Provides the voxel coordinate of the hit voxel in subvoxel precision (in world coordinates).
For advanced picking, have a look at the SoGVRPickResult
that provides complete picking profile curves of all involved volumes, including the mask, secondary, tag and transformed volumes.
Advanced¶
The advanced section contains features that are rarely used and have good default settings (this means, don’t change them when you do not need to!):
- Filter Volume - Switches between nearest neighbor (disabled) and trilinear volume filtering (enabled, strongly recommended)
- Filter LUT - Switches between nearest neighbor (disabled) and trilinear LUT filtering (enabled, recommended)
- Use world coordinates - the renderer draws the volume at the correct position given by the world matrix of the original image. If turned off, it will render in voxel coordinates, from (0, 0, 0) to (volumeSizeX, Y, Z).
- Adapt quality to window size - The renderer calculates the footprint of the current bounding box on the rendered window and selects a low-res octree level if the projection results in heavy oversampling.
- Enable Z buffer - Leaves the z-buffer turned on; if disabled, the renderer ignores the contents in the depth buffer.
- Permit clipping - Allows the Open Inventor clipping planes to clip the volume. If turned off, the clip planes do not affect the renderer.
Octree settings¶
The octree settings are only applied to volumes that are generated by the image input of the module; for details on the settings, see the GVRVolumeSave
module. The defaults are the best settings on current hardware.
Input Fields¶
inVolume¶
-
name:
inVolume
, type:
GVRVolume(MLBase)
¶ Input volume from a GVRVolume, e.g., loaded by a
GVRVolumeLoad
or created viaGVRImageToVolume
Output Fields¶
outHistogram¶
-
name:
outHistogram
, type:
CurveData(MLBase)
¶ The histogram of the internally loaded volume to be used, e.g., in a
SoLUTEditor
orSoDiagram2D
For accessing this object via scripting see the Scripting Reference:MLCurveDataWrapper
.
self¶
-
name:
self
, type:
SoNode
¶ The renderer node that should be placed into an Open Inventor scene, e.g., into a
SoExaminerViewer
Parameter Fields¶
Field Index¶
Visible Fields¶
On¶
-
name:
on
, type:
Bool
, default:
TRUE
, deprecated name:
onOff
¶ If checked, the renderer is enabled.
Auto Load¶
-
name:
autoLoad
, type:
Bool
, default:
TRUE
¶ If checked, the renderer automatically loads its input volume when it changes.
Load Volume¶
Quality (interactiveQuality)¶
-
name:
interactiveQuality
, type:
Float
, default:
0.1
, minimum:
0.01
, maximum:
1
¶ Sets the quality that the renderer uses for interactive rendering.
Quality (staticQuality)¶
-
name:
staticQuality
, type:
Float
, default:
1
, minimum:
0.01
, maximum:
1
¶ Sets the quality the renderer uses for static rendering.
Sampling Rate (interactiveSamplingRate)¶
-
name:
interactiveSamplingRate
, type:
Float
, default:
1
, minimum:
0.01
, maximum:
10
¶ Sets the sampling rate for interactive rendering.
A sampling rate of 1.0 corresponds to an internal sampling rate of 2.0 to fulfill the Nyquist theorem.
Sampling Rate (staticSamplingRate)¶
-
name:
staticSamplingRate
, type:
Float
, default:
1
, minimum:
0.01
, maximum:
10
¶ Sets the sampling rate for static rendering.
A sampling rate of 1.0 corresponds to an internal sampling rate of 2.0 to fulfill the Nyquist theorem.
Blend Mode¶
-
name:
blendMode
, type:
Enum
, default:
Blend
, deprecated name:
gvrBlendMode
¶ Defines the blend mode.
Values:
Title | Name | Description |
---|---|---|
Blend | Blend | Blend (c = (1-alpha)*c1 + (alpha)*c2) |
Add | Add | Add (c = c1 + c2) |
Mip | MIP | MIP (maximum intensity projection) |
Min IP | MinIP | MinIP (minimum intensity projection) Keep in mind that a white background is necessary to correctly render in this blend mode! |
Reverse Subtract | ReverseSubtract | ReverseSubtract |
Subtract | Subtract | Subtract |
Octree Node Size¶
-
name:
octreeNodeSize
, type:
Enum
, default:
NODE_SIZE_32
, deprecated name:
gvrNodeSize
¶ Defines the node size of the octree.
Values:
Title | Name | Description |
---|---|---|
16 | NODE_SIZE_16 | 16 |
32 | NODE_SIZE_32 | 32 |
64 | NODE_SIZE_64 | 64 |
Downsampling Method¶
-
name:
octreeParentComputationMethod
, type:
Enum
, default:
Rank
, deprecated name:
gvrParentComputationMethod
¶ Defines which filter the renderer uses for octree generation.
Values:
Title | Name | Description |
---|---|---|
Average | Average | Averages 8 neighbor voxels. |
Rank | Rank | Ranks 8 neighbor voxels. |
Downsampling Rank¶
-
name:
octreeParentComputationRank
, type:
Integer
, default:
4
, minimum:
0
, maximum:
7
, deprecated name:
gvrParentComputationRank
¶ Sets the rank of the
Downsampling Method
.
Temporal position¶
-
name:
currentTimePoint
, type:
Integer
, default:
0
, minimum:
0
, maximum:
:field:`maxTimePoint`
¶ Sets the temporal position to be rendered.
User index¶
-
name:
currentUserIndex
, type:
Integer
, default:
0
, minimum:
0
, maximum:
:field:`maxUserIndex`
¶ Sets the user index to be rendered.
Force 8 bit¶
-
name:
force8bit
, type:
Bool
, default:
FALSE
¶ If checked, the renderer is forced to load the data as 8-bit textures.
Filter Volume Data¶
-
name:
filterVolumeData
, type:
Enum
, default:
FilterLinear
¶ Defines how the main volume is filtered.
Values:
Title | Name | Deprecated Name | Description |
---|---|---|---|
Nearest | FilterNearest | FALSE | Use nearest neighbor filtering. |
Linear | FilterLinear | TRUE | Use linear filtering. |
Linear Pre Class | FilterLinearPreClass | Use pre-classified filtering; this is useful for rendering LUTs that contain trace colors that should not be interpolated. This render mode is expensive, as it requires 16 texture fetches per voxel. | |
Cubic | FilterCubic | Use cubic filtering for smoother volume rendering. Although the smoothing occurs in the shader, this is an expensive filter mode. | |
Linear Pre Class Premultiplied Alpha | FilterLinearPreClassPremultipliedAlpha |
Filter Lut¶
-
name:
filterLut
, type:
Bool
, default:
TRUE
¶ If checked, linear filtering of the LUT texture is enabled.
Reset Subvolume¶
-
name:
resetSubVolume
, type:
Trigger
¶ When pressed, the subvolume is reset to the entire volume.
X (subVolumeStartX)¶
-
name:
subVolumeStartX
, type:
Integer
, default:
0
, minimum:
0
, maximum:
:field:`sizeOutputX`
, deprecated name:
subVolOriginX
¶ Sets the start of the subvolume in the x-direction.
Y (subVolumeStartY)¶
-
name:
subVolumeStartY
, type:
Integer
, default:
0
, minimum:
0
, maximum:
:field:`sizeOutputY`
, deprecated name:
subVolOriginY
¶ Sets the start of the subvolume in the y-direction.
Z (subVolumeStartZ)¶
-
name:
subVolumeStartZ
, type:
Integer
, default:
0
, minimum:
0
, maximum:
:field:`sizeOutputZ`
, deprecated name:
subVolOriginZ
¶ Sets the start of the subvolume in the z-direction.
X (subVolumeEndX)¶
-
name:
subVolumeEndX
, type:
Integer
, default:
0
, minimum:
0
, maximum:
:field:`sizeOutputX`
¶ Sets the end of the subvolume in the x-direction.
Y (subVolumeEndY)¶
-
name:
subVolumeEndY
, type:
Integer
, default:
0
, minimum:
0
, maximum:
:field:`sizeOutputY`
¶ Sets the end of the subvolume in the y-direction.
Z (subVolumeEndZ)¶
-
name:
subVolumeEndZ
, type:
Integer
, default:
0
, minimum:
0
, maximum:
:field:`sizeOutputZ`
¶ Sets the end of the subvolume in the z-direction.
Enable Z buffer¶
-
name:
zbuffer
, type:
Bool
, default:
TRUE
¶ If checked, the z-buffer is enabled while rendering.
Permit Clipping¶
-
name:
permitClipping
, type:
Bool
, default:
TRUE
¶ If checked, clipping with the OpenGL clip planes is enabled.
Incremental Update¶
-
name:
incrementalUpdate
, type:
Bool
, default:
TRUE
¶ If checked, incremental updating of the renderer is enabled by triggering a repaint via a timer.
Ensure that a
SoGVRIncrementalUpdater
is added to each viewer that shares the same renderer.
Adapt Quality To Window Size¶
-
name:
adaptQualityToWindowSize
, type:
Bool
, default:
TRUE
¶ If checked, the renderer selects an octree resolution that matches the projected screen size.
Render Mode¶
-
name:
renderMode
, type:
Enum
, default:
Direct
, deprecated name:
gvrRenderMode
¶ Defines the render mode.
Values:
Title | Name | Deprecated Name | Description |
---|---|---|---|
Direct | Direct | Direct Volume Rendering. | |
Illuminated | Illuminated | Surface | Illuminated/Shaded Volume Rendering (see Illumination tab). |
Center (greyCenter)¶
-
name:
greyCenter
, type:
Float
, default:
0.5
, minimum:
0
, maximum:
1
¶ Sets the center of the gray LUT.
Width (greyWidth)¶
-
name:
greyWidth
, type:
Float
, default:
0.5
, minimum:
0
, maximum:
1
¶ Sets the gray ramp width (internal LUT).
Invert (greyInvert)¶
-
name:
greyInvert
, type:
Bool
, default:
FALSE
¶ If checked, the gray ramp of the built-in LUT is inverted.
Center (alphaCenter)¶
-
name:
alphaCenter
, type:
Float
, default:
0.5
, minimum:
0
, maximum:
1
¶ Sets the center of the alpha LUT.
Width (alphaWidth)¶
-
name:
alphaWidth
, type:
Float
, default:
0.5
, minimum:
0
, maximum:
1
¶ Sets the alpha ramp width (internal LUT).
Invert (alphaInvert)¶
-
name:
alphaInvert
, type:
Bool
, default:
FALSE
¶ If checked, the alpha ramp of the built-in LUT is inverted.
Color (colorFactor)¶
-
name:
colorFactor
, type:
Color
, default:
1 1 1
¶ Sets the factor applied to the color of the internal LUT.
Alpha¶
-
name:
alphaFactor
, type:
Float
, default:
1
, minimum:
0
, maximum:
1
¶ Sets the alpha factor of the built-in LUT.
Add Original Alpha¶
-
name:
enhancementAlphaMix
, type:
Float
, default:
0.25
, minimum:
0
, maximum:
1
¶ Sets the amount of the original alpha mixed into the enhancement.
Enabled (boundaryEnhancement)¶
-
name:
boundaryEnhancement
, type:
Bool
, default:
FALSE
¶ If checked, boundary enhancement is enabled.
Weight (boundaryEnhancementFactor)¶
-
name:
boundaryEnhancementFactor
, type:
Float
, default:
1
, minimum:
0
, maximum:
50
¶ Sets the weight for the boundary enhancement.
Exponent (boundaryEnhancementExponent)¶
-
name:
boundaryEnhancementExponent
, type:
Float
, default:
1
, minimum:
0.1
, maximum:
50
¶ Sets the boundary enhancement exponent.
Bias¶
-
name:
boundaryEnhancementGradientBias
, type:
Float
, default:
0
, minimum:
-1
, maximum:
1
¶ Sets the bias for boundary enhancement.
Enabled (silhouetteEnhancement)¶
-
name:
silhouetteEnhancement
, type:
Bool
, default:
FALSE
¶ If checked, silhouette enhancement is enabled.
Exponent (silhouetteEnhancementExponent)¶
-
name:
silhouetteEnhancementExponent
, type:
Float
, default:
1
, minimum:
0.1
, maximum:
50
¶ Sets the silhouette enhancement exponent.
Weight (silhouetteEnhancementFactor)¶
-
name:
silhouetteEnhancementFactor
, type:
Float
, default:
1
, minimum:
0
, maximum:
20
¶ Sets the weight for the silhouette enhancement.
Enabled (toneShading)¶
-
name:
toneShading
, type:
Bool
, default:
FALSE
¶ If checked, tone shading is enabled.
Warm Color¶
-
name:
toneShadingWarmColor
, type:
Color
, default:
0.674509823322296 0.533333361148834 0.141176477074623
¶ Sets the warm color of the tone shading.
Cold Color¶
-
name:
toneShadingColdColor
, type:
Color
, default:
0 0 0.400000005960464
¶ Sets the cold color of tone shading.
Warm Diffuse¶
-
name:
toneShadingWarmDiffuse
, type:
Float
, default:
0.60000002
, minimum:
0
, maximum:
1
¶ Sets the warm diffuse factor of the tone shading.
Cold Diffuse¶
-
name:
toneShadingColdDiffuse
, type:
Float
, default:
0.2
, minimum:
0
, maximum:
1
¶ Sets the diffuse light of cold color.
Angle¶
-
name:
toneShadingAngle
, type:
Float
, default:
45
, minimum:
-180
, maximum:
180
¶ Sets the angle of the tone shading.
Ambient¶
-
name:
materialAmbient
, type:
Float
, default:
0.60000002
, minimum:
0
, maximum:
1
¶ Sets the ambient light.
Diffuse¶
-
name:
materialDiffuse
, type:
Float
, default:
1
, minimum:
0
, maximum:
1
¶ Sets the overall diffuse factor for all lights.
Specular¶
-
name:
materialSpecular
, type:
Float
, default:
1
, minimum:
0
, maximum:
1
¶ Sets the overall specular intensity for all lights.
Specularity¶
-
name:
materialSpecularity
, type:
Float
, default:
32
, minimum:
1
, maximum:
128
¶ Sets the specularity exponent of all lights.
Reduce Lighting On Low Gradient Magnitude¶
-
name:
reduceLightingOnLowGradientMagnitude
, type:
Bool
, default:
FALSE
¶ If checked, the lighting on low gradient magnitudes is reduced.
Enabled (light1Enabled)¶
-
name:
light1Enabled
, type:
Bool
, default:
TRUE
¶ If checked, light1 is enabled.
Diffuse Intensity (light1DiffuseIntensity)¶
-
name:
light1DiffuseIntensity
, type:
Float
, default:
1
, minimum:
0
, maximum:
1
¶ Sets the diffuse intensity of light1.
Specular Intensity (light1SpecularIntensity)¶
-
name:
light1SpecularIntensity
, type:
Float
, default:
1
, minimum:
0
, maximum:
1
¶ Sets the specular intensity for light1.
Azimuth (light1PolarPhi)¶
-
name:
light1PolarPhi
, type:
Float
, default:
0
, minimum:
-180
, maximum:
180
¶ Sets the angle of light1.
Altitude (light1PolarRho)¶
-
name:
light1PolarRho
, type:
Float
, default:
0
, minimum:
-180
, maximum:
180
¶ Sets the angle of light1.
Enabled (light2Enabled)¶
-
name:
light2Enabled
, type:
Bool
, default:
FALSE
¶ If checked, light2 is enabled.
Diffuse Intensity (light2DiffuseIntensity)¶
-
name:
light2DiffuseIntensity
, type:
Float
, default:
1
, minimum:
0
, maximum:
1
¶ Sets the diffuse intensity of light2.
Specular Intensity (light2SpecularIntensity)¶
-
name:
light2SpecularIntensity
, type:
Float
, default:
1
, minimum:
0
, maximum:
1
¶ Sets the specular intensity for light2.
Azimuth (light2PolarPhi)¶
-
name:
light2PolarPhi
, type:
Float
, default:
45
, minimum:
-180
, maximum:
180
¶ Sets the angle of light2.
Altitude (light2PolarRho)¶
-
name:
light2PolarRho
, type:
Float
, default:
45
, minimum:
-180
, maximum:
180
¶ Sets the angle of light2.
Enabled (light3Enabled)¶
-
name:
light3Enabled
, type:
Bool
, default:
FALSE
¶ If checked, light3 is enabled.
Diffuse Intensity (light3DiffuseIntensity)¶
-
name:
light3DiffuseIntensity
, type:
Float
, default:
1
, minimum:
0
, maximum:
1
¶ Sets the diffuse intensity of light3.
Specular Intensity (light3SpecularIntensity)¶
-
name:
light3SpecularIntensity
, type:
Float
, default:
1
, minimum:
0
, maximum:
1
¶ Sets the specular intensity for light3.
Azimuth (light3PolarPhi)¶
-
name:
light3PolarPhi
, type:
Float
, default:
-45
, minimum:
-180
, maximum:
180
¶ Sets the angle of light3.
Altitude (light3PolarRho)¶
-
name:
light3PolarRho
, type:
Float
, default:
0
, minimum:
-180
, maximum:
180
¶ Sets the angle of light3.
Gradient Quality¶
-
name:
gradientQuality
, type:
Enum
, default:
GradientQualityAutomatic
¶ Defines the gradient quality.
Values:
Title | Name | Description |
---|---|---|
Automatic | GradientQualityAutomatic | Automatic gradient quality selects the best trade-off between speed and memory efficiency, depending on the render mode and the graphics card. |
Lowest | GradientQualityLowest | |
Low | GradientQualityLow | |
Medium | GradientQualityMedium | |
High | GradientQualityHigh | |
Highest | GradientQualityHighest |
Alpha threshold¶
-
name:
selectionAlphaThreshold
, type:
Float
, default:
0.2
, minimum:
0
, maximum:
1
, deprecated name:
alphaThreshold
¶ Sets the alpha value for picking (if blending is used).
Voxel Position¶
-
name:
selectedPoint1
, type:
Vector3
, persistent:
no
¶ Shows the picked point in voxel coordinates.
World Position¶
-
name:
selectedWorldPoint1
, type:
Vector3
, persistent:
no
, deprecated name:
selectedWPoint1
¶ Shows the picked position in world coordinates.