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¶
For general details about the GVR and its extensions, have a look at Giga Voxel Renderer
.
The SoGVRVolumeRenderer
is an octree-based render that allows high-quality Volume Rendering of 3D/4D images. The SoGVRVolumeRenderer
is the main rendering module and is complemented with a set of extension modules that allow to customize 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 substitute for Giga Voxel Render.
Usage¶
The SoGVRVolumeRenderer
module is placed into an Open Inventor scene and accepts either an ML image or an octree (GVRVolume) as main volume dataset.
Tips¶
The same SoGVRVolumeRenderer
can render its connected volume dataset with different render modes/shading. This is done by reusing the same volume renderer in different Open Inventor scenes and by customizing the rendering using the GVR extensions, e.g., the SoGVRIlluminationSettings
. This allows to share the same textures/data structures and just apply 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 avoid that the incremental update feature of the GVR triggers repaints on all scenes.
Windows¶
Default Panel¶
Data Loading¶
- Load Volume - loads the given volume (if auto load is turned off)
- Auto load - set 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 whole texture memory will be used, smaller values will result in faster renderings on big volumes.
- Interactive/Static Sampling Rate allows to set 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 archieve higher quality images, especially for low-res input images. Sampling rates lower than 1 lead to heavy artefacts but can be used to speed up rendering. You can also consider using a SoFrameBufferRender 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 when the GVR renders slabs on a SoView2DScene, since it will render exactly the slices that the SoView2D 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 feeling
NOTE: Be careful when 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 Inventor scenes.
LUT¶
The SoGVRVolumeRenderer
has an internal lookup table that is typically overwriten 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 grey 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 to interactively design a LUT.
Illumination¶
The Illumination settings are use when 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 strenght are calculated by a Sobel3D gradient estimator. Alternatively the gradients are calulated on-the-fly using central difference (when 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 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. When 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 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 gives the voxel coordinate of the hit voxel in sub-voxel precision (in voxel coordinates, from (0,0,0) to (volumeSizeX, Y,Z))
- World Position gives the voxel coordinate of the hit voxel in sub-voxel precision (in world coordinates)
For advanced picking, have a look at the SoGVRPickResult
, which 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 - switch between nearest neighbor (disabled) and trilinear volume filtering (enabled, strongly recommended)
- Filter LUT - switch between nearest neighbor (disabled) and trilinear LUT filtering (enabled, recommended)
- Use world coordinates - the renderer draws the volume at the correct postion given by the world matrix of the original image. If turned off, it will draw 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¶
Auto Load¶
-
name:
autoLoad
, type:
Bool
, default:
TRUE
¶ Defines if 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
¶ Defines the quality the renderer uses for interactive rendering.
Quality (staticQuality)¶
-
name:
staticQuality
, type:
Float
, default:
1
, minimum:
0.01
, maximum:
1
¶ Defines the quality the renderer uses for static rendering.
Sampling Rate (interactiveSamplingRate)¶
-
name:
interactiveSamplingRate
, type:
Float
, default:
1
, minimum:
0.01
, maximum:
10
¶ Defines the sampling rate for interactive rendering. A sampling rate of 1.0 means 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
¶ Defines the sampling rate for static rendering. A sampling rate of 1.0 means an internal sampling rate of 2.0 to fulfill the Nyquist theorem.
Blend Mode¶
-
name:
blendMode
, type:
Enum
, default:
Blend
, deprecated name:
gvrBlendMode
¶ Selects the blend mode that is used.
Values:
Title | Name | Description |
---|---|---|
Blend | Blend | Blending (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 you will need a white background 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
¶ Defines the rank of the
Downsampling Method
.
Temporal position¶
-
name:
currentTimePoint
, type:
Integer
, default:
0
, minimum:
0
, maximum:
:field:`maxTimePoint`
¶ Defines the temporal position that is rendered.
User index¶
-
name:
currentUserIndex
, type:
Integer
, default:
0
, minimum:
0
, maximum:
:field:`maxUserIndex`
¶ Defines the user index that is rendered.
Force 8 bit¶
-
name:
force8bit
, type:
Bool
, default:
FALSE
¶ Forces the renderer 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. (It is an expensive render mode, since it requires 16 texture fetches per voxel). | |
Cubic | FilterCubic | Use cubic filtering for smoother volume rendering. Although the smoothing is done in the shader, this is an expensive filter mode. | |
Linear Pre Class Premultiplied Alpha | FilterLinearPreClassPremultipliedAlpha |
Filter Lut¶
-
name:
filterLut
, type:
Bool
, default:
TRUE
¶ Enables linear filtering of the LUT texture.
X (subVolumeStartX)¶
-
name:
subVolumeStartX
, type:
Integer
, default:
0
, minimum:
0
, maximum:
:field:`sizeOutputX`
, deprecated name:
subVolOriginX
¶ Subvolume definition.
Y (subVolumeStartY)¶
-
name:
subVolumeStartY
, type:
Integer
, default:
0
, minimum:
0
, maximum:
:field:`sizeOutputY`
, deprecated name:
subVolOriginY
¶ Subvolume definition.
Z (subVolumeStartZ)¶
-
name:
subVolumeStartZ
, type:
Integer
, default:
0
, minimum:
0
, maximum:
:field:`sizeOutputZ`
, deprecated name:
subVolOriginZ
¶ Subvolume definition.
X (subVolumeEndX)¶
-
name:
subVolumeEndX
, type:
Integer
, default:
0
, minimum:
0
, maximum:
:field:`sizeOutputX`
¶ Subvolume definition.
Y (subVolumeEndY)¶
-
name:
subVolumeEndY
, type:
Integer
, default:
0
, minimum:
0
, maximum:
:field:`sizeOutputY`
¶ Subvolume definition.
Z (subVolumeEndZ)¶
-
name:
subVolumeEndZ
, type:
Integer
, default:
0
, minimum:
0
, maximum:
:field:`sizeOutputZ`
¶ Subvolume definition.
Permit Clipping¶
-
name:
permitClipping
, type:
Bool
, default:
TRUE
¶ Enables clipping with the OpenGL clip planes.
Incremental Update¶
-
name:
incrementalUpdate
, type:
Bool
, default:
TRUE
¶ Enables incremental updating of the renderer by triggering a repaint via a timer. Make sure to add a
SoGVRIncrementalUpdater
to each viewer that shares the same renderer.
Adapt Quality To Window Size¶
-
name:
adaptQualityToWindowSize
, type:
Bool
, default:
TRUE
¶ If enabled, the renderer chooses an octree resolution that matches the projected screen size.
Render Mode¶
-
name:
renderMode
, type:
Enum
, default:
Direct
, deprecated name:
gvrRenderMode
¶ Sets the used 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
¶ Center of gray LUT.
Width (greyWidth)¶
-
name:
greyWidth
, type:
Float
, default:
0.5
, minimum:
0
, maximum:
1
¶ Defines the gray ramp width (internal LUT).
Invert (greyInvert)¶
-
name:
greyInvert
, type:
Bool
, default:
FALSE
¶ Inverts the gray ramp of the built-in LUT.
Center (alphaCenter)¶
-
name:
alphaCenter
, type:
Float
, default:
0.5
, minimum:
0
, maximum:
1
¶ Center of alpha LUT.
Width (alphaWidth)¶
-
name:
alphaWidth
, type:
Float
, default:
0.5
, minimum:
0
, maximum:
1
¶ Defines the alpha ramp width (internal LUT).
Invert (alphaInvert)¶
-
name:
alphaInvert
, type:
Bool
, default:
FALSE
¶ Inverts the alpha ramp of the built-in LUT.
Color (colorFactor)¶
-
name:
colorFactor
, type:
Color
, default:
1 1 1
¶ Factor that is applied to the color of the internal LUT.
Alpha¶
-
name:
alphaFactor
, type:
Float
, default:
1
, minimum:
0
, maximum:
1
¶ Defines the alpha factor of the built-in LUT.
Add Original Alpha¶
-
name:
enhancementAlphaMix
, type:
Float
, default:
0.25
, minimum:
0
, maximum:
1
¶ Defines how much of the original alpha is mixed to the enhancement.
Enabled (boundaryEnhancement)¶
-
name:
boundaryEnhancement
, type:
Bool
, default:
FALSE
¶ Enables boundary enhancement.
Weight (boundaryEnhancementFactor)¶
-
name:
boundaryEnhancementFactor
, type:
Float
, default:
1
, minimum:
0
, maximum:
50
¶ Defines the weight for the boundary enhancement.
Exponent (boundaryEnhancementExponent)¶
-
name:
boundaryEnhancementExponent
, type:
Float
, default:
1
, minimum:
0.1
, maximum:
50
¶ Defines the boundary enhancement exponent.
Bias¶
-
name:
boundaryEnhancementGradientBias
, type:
Float
, default:
0
, minimum:
-1
, maximum:
1
¶ Defines the bias for boundary enhancement.
Enabled (silhouetteEnhancement)¶
-
name:
silhouetteEnhancement
, type:
Bool
, default:
FALSE
¶ Enables silhouette enhancement.
Exponent (silhouetteEnhancementExponent)¶
-
name:
silhouetteEnhancementExponent
, type:
Float
, default:
1
, minimum:
0.1
, maximum:
50
¶ Defines the silhouette enhancement exponent.
Weight (silhouetteEnhancementFactor)¶
-
name:
silhouetteEnhancementFactor
, type:
Float
, default:
1
, minimum:
0
, maximum:
20
¶ Defines the weight for the silhouette enhancement.
Warm Color¶
-
name:
toneShadingWarmColor
, type:
Color
, default:
0.674509823322296 0.533333361148834 0.141176477074623
¶ Defines the warm color of the tone shading.
Cold Color¶
-
name:
toneShadingColdColor
, type:
Color
, default:
0 0 0.400000005960464
¶ Cold color of tone shading.
Warm Diffuse¶
-
name:
toneShadingWarmDiffuse
, type:
Float
, default:
0.60000002
, minimum:
0
, maximum:
1
¶ Defines the warm diffuse factor of the tone shading.
Cold Diffuse¶
-
name:
toneShadingColdDiffuse
, type:
Float
, default:
0.2
, minimum:
0
, maximum:
1
¶ Diffuse light of cold color.
Angle¶
-
name:
toneShadingAngle
, type:
Float
, default:
45
, minimum:
-180
, maximum:
180
¶ Defines the angle of the tone shading.
Ambient¶
-
name:
materialAmbient
, type:
Float
, default:
0.60000002
, minimum:
0
, maximum:
1
¶ Defines the ambient light.
Diffuse¶
-
name:
materialDiffuse
, type:
Float
, default:
1
, minimum:
0
, maximum:
1
¶ Overall diffuse factor for all lights.
Specular¶
-
name:
materialSpecular
, type:
Float
, default:
1
, minimum:
0
, maximum:
1
¶ Defines the overall specular intensity for all lights.
Specularity¶
-
name:
materialSpecularity
, type:
Float
, default:
32
, minimum:
1
, maximum:
128
¶ Defines the specularity exponent of the lights.
Reduce Lighting On Low Gradient Magnitude¶
-
name:
reduceLightingOnLowGradientMagnitude
, type:
Bool
, default:
FALSE
¶ Reduces the lighting on low gradient magnitudes.
Diffuse Intensity (light1DiffuseIntensity)¶
-
name:
light1DiffuseIntensity
, type:
Float
, default:
1
, minimum:
0
, maximum:
1
¶ Diffuse intensity of light1.
Specular Intensity (light1SpecularIntensity)¶
-
name:
light1SpecularIntensity
, type:
Float
, default:
1
, minimum:
0
, maximum:
1
¶ Defines the specular intensity for light1.
Azimuth (light1PolarPhi)¶
-
name:
light1PolarPhi
, type:
Float
, default:
0
, minimum:
-180
, maximum:
180
¶ Defines the light angle.
Altitude (light1PolarRho)¶
-
name:
light1PolarRho
, type:
Float
, default:
0
, minimum:
-180
, maximum:
180
¶ Defines the light angle.
Diffuse Intensity (light2DiffuseIntensity)¶
-
name:
light2DiffuseIntensity
, type:
Float
, default:
1
, minimum:
0
, maximum:
1
¶ Diffuse intensity of light2.
Specular Intensity (light2SpecularIntensity)¶
-
name:
light2SpecularIntensity
, type:
Float
, default:
1
, minimum:
0
, maximum:
1
¶ Defines the specular intensity for light2.
Azimuth (light2PolarPhi)¶
-
name:
light2PolarPhi
, type:
Float
, default:
45
, minimum:
-180
, maximum:
180
¶ Defines the light angle.
Altitude (light2PolarRho)¶
-
name:
light2PolarRho
, type:
Float
, default:
45
, minimum:
-180
, maximum:
180
¶ Defines the light angle.
Diffuse Intensity (light3DiffuseIntensity)¶
-
name:
light3DiffuseIntensity
, type:
Float
, default:
1
, minimum:
0
, maximum:
1
¶ Diffuse intensity of light3.
Specular Intensity (light3SpecularIntensity)¶
-
name:
light3SpecularIntensity
, type:
Float
, default:
1
, minimum:
0
, maximum:
1
¶ Defines the specular intensity for light3.
Azimuth (light3PolarPhi)¶
-
name:
light3PolarPhi
, type:
Float
, default:
-45
, minimum:
-180
, maximum:
180
¶ Defines the light angle.
Altitude (light3PolarRho)¶
-
name:
light3PolarRho
, type:
Float
, default:
0
, minimum:
-180
, maximum:
180
¶ Defines the light angle.
Gradient Quality¶
-
name:
gradientQuality
, type:
Enum
, default:
GradientQualityAutomatic
¶ Defines the gradient quality.
Values:
Title | Name | Description |
---|---|---|
Automatic | GradientQualityAutomatic | Automatic gradient quality chooses 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
¶ Defines the alpha value for picking (if blending is used).
Voxel Position¶
-
name:
selectedPoint1
, type:
Vector3
, persistent:
no
¶ Gives the picked point in voxel coordinates.