Click or drag to resize
SoVolumeRenderingQuality Class

Volume rendering quality property mode.

Inheritance Hierarchy

Namespace: OIV.VolumeViz.Nodes
Assembly: OIV.VolumeViz (in OIV.VolumeViz.dll) Version: 2023.1.3.0 (2023.1.3)
Syntax
public class SoVolumeRenderingQuality : SoVolumeShader

The SoVolumeRenderingQuality type exposes the following members.

Constructors
  NameDescription
Public methodSoVolumeRenderingQuality

Constructor.

Top
Methods
  NameDescription
Public methodAddShaderParameterImage

Convenience method to create an OIV.Inventor.Nodes.SoShaderParameterImage with the specified name and value and add it to this shader program.

(Inherited from SoShaderProgram.)
Public methodAffectsState

Returns true if a node has an effect on the state during traversal.

(Inherited from SoNode.)
Public methodCallback
(Inherited from SoNode.)
Public methodCopy
Calls Copy(false).
(Inherited from SoNode.)
Public methodCopy(Boolean)

Creates and returns an exact copy of the node.

(Inherited from SoNode.)
Public methodCopyFieldValues(SoFieldContainer)
Calls CopyFieldValues(fc, false).
(Inherited from SoFieldContainer.)
Public methodCopyFieldValues(SoFieldContainer, Boolean)

Copies the contents of fc's fields into this object's fields.

(Inherited from SoFieldContainer.)
Public methodDispose
Releases all resources used by SoDisposable.
(Inherited from SoDisposable.)
Public methodDistribute
(Inherited from SoNode.)
Public methodDoAction
(Inherited from SoShaderProgram.)
Public methodEnableNotify

Notification at this Field Container is enabled (if flag == true) or disabled (if flag == false).

(Inherited from SoFieldContainer.)
Public methodEquals
Determines whether the specified Object is equal to the current Object.
(Inherited from Object.)
Public methodFieldsAreEqual

Returns true if this object's fields are exactly equal to fc's fields.

(Inherited from SoFieldContainer.)
Public methodGet

Returns the values of the fields of this object in the Open Inventor ASCII file format in the given string.

(Inherited from SoFieldContainer.)
Public methodGetAllFields

Returns a list of fields, including the eventIn's and eventOut's.

(Inherited from SoFieldContainer.)
Public methodGetAlternateRep

This method is called by actions to allow the node to provide an "alternate representation" when appropriate (typically depending on the action type).

(Inherited from SoNode.)
Public methodGetBoundingBox
(Inherited from SoShaderProgram.)
Public methodGetEventIn

Returns a the eventIn with the given name.

(Inherited from SoFieldContainer.)
Public methodGetEventOut

Returns the eventOut with the given name.

(Inherited from SoFieldContainer.)
Public methodGetField

Returns a the field of this object whose name is fieldName.

(Inherited from SoFieldContainer.)
Public methodGetFieldName

Returns the name of the given field in the fieldName argument.

(Inherited from SoFieldContainer.)
Public methodGetFields

Appends references to all of this object's fields to resultList, and returns the number of fields appended.

(Inherited from SoFieldContainer.)
Public methodGetFragmentShader

Returns the fragment shader at the specified position.

(Inherited from SoShaderProgram.)
Public methodGetGeometryShader

Returns the geometry shader at the specified position.

(Inherited from SoShaderProgram.)
Public methodGetHashCode
Overrides GetHashCode().
(Inherited from SoNetBase.)
Public methodGetMatrix
(Inherited from SoNode.)
Public methodGetName

Returns the name of an instance.

(Inherited from SoBase.)
Public methodGetPrimitiveCount
(Inherited from SoNode.)
Public methodGetRenderEngineMode

Returns the supported Render engine mode.

(Inherited from SoNode.)
Public methodGetRenderUnitID
(Inherited from SoNode.)
Public methodGetStringName (Inherited from SoBase.)
Public methodGetTessellationControlShader

Returns the tessellation control shader at the specified position.

(Inherited from SoShaderProgram.)
Public methodGetTessellationEvaluationShader

Returns the tessellation evaluation shader at the specified position.

(Inherited from SoShaderProgram.)
Public methodGetType
Gets the Type of the current instance.
(Inherited from Object.)
Public methodGetVertexShader

Returns the vertex shader at the specified position.

(Inherited from SoShaderProgram.)
Public methodGLRender
(Inherited from SoShaderProgram.)
Public methodGLRenderBelowPath
(Inherited from SoNode.)
Public methodGLRenderInPath
(Inherited from SoNode.)
Public methodGLRenderOffPath
(Inherited from SoNode.)
Public methodGrabEventsCleanup
(Inherited from SoNode.)
Public methodGrabEventsSetup
(Inherited from SoNode.)
Public methodHandleEvent
(Inherited from SoNode.)
Public methodHasDefaultValues

Returns true if all of the object's fields have their default values.

(Inherited from SoFieldContainer.)
Public methodIsBoundingBoxIgnoring

This method is used by getBoundingBox action traversal to know if the current node must be traversed or not, ie the bounding should be ignored.

(Inherited from SoNode.)
Public methodIsNotifyEnabled

Notification is the process of telling interested objects that this object has changed.

(Inherited from SoFieldContainer.)
Public methodIsOverride

Returns the state of the override flag.

(Inherited from SoNode.)
Public methodIsSynchronizable

Gets the ScaleViz synchronizable state of this object.

(Inherited from SoBase.)
Public methodPick
(Inherited from SoShaderProgram.)
Public methodRayPick
(Inherited from SoNode.)
Public methodSearch
(Inherited from SoNode.)
Public methodSet

Sets one or more fields in this object to the values specified in the given string, which should be a string in the Open Inventor file format.

(Inherited from SoFieldContainer.)
Public methodSetComputeShader(Int32, String)
Calls SetComputeShader(pos, filenameOrSource, OIV.Inventor.Nodes.SoShaderObject.SourceTypes( .SoShaderObject.FILENAME )).
(Inherited from SoShaderProgram.)
Public methodSetComputeShader(Int32, String, SoShaderObjectSourceTypes)

Convenience method to create a compute shader with the specified filename and add it at the specified position.

(Inherited from SoShaderProgram.)
Public methodSetFragmentShader(Int32, String)
Calls SetFragmentShader(pos, filenameOrSource, OIV.Inventor.Nodes.SoShaderObject.SourceTypes( .SoShaderObject.FILENAME )).
(Inherited from SoVolumeShader.)
Public methodSetFragmentShader(Int32, String, SoShaderObjectSourceTypes)

Creates a fragment shader with the given filename and add it at the given pos.

(Inherited from SoVolumeShader.)
Public methodSetGeometryShader(Int32, String)
Calls SetGeometryShader(pos, filenameOrSource, OIV.Inventor.Nodes.SoShaderObject.SourceTypes( .SoShaderObject.FILENAME )).
(Inherited from SoShaderProgram.)
Public methodSetGeometryShader(Int32, String, SoShaderObjectSourceTypes)

Convenience method to create a geometry shader with the specified filename and add it at the specified position.

(Inherited from SoShaderProgram.)
Public methodSetName (Inherited from SoBase.)
Public methodSetOverride

Turns the override flag on or off.

(Inherited from SoNode.)
Public methodSetSynchronizable

Sets this to be a ScaleViz synchronizable object.

(Inherited from SoBase.)
Public methodSetTessellationControlShader(Int32, String)
Calls SetTessellationControlShader(pos, filenameOrSource, OIV.Inventor.Nodes.SoShaderObject.SourceTypes( .SoShaderObject.FILENAME )).
(Inherited from SoShaderProgram.)
Public methodSetTessellationControlShader(Int32, String, SoShaderObjectSourceTypes)

Convenience method to create a tessellation control shader with the specified filename and add it at the specified position.

(Inherited from SoShaderProgram.)
Public methodSetTessellationEvaluationShader(Int32, String)
Calls SetTessellationEvaluationShader(pos, filenameOrSource, OIV.Inventor.Nodes.SoShaderObject.SourceTypes( .SoShaderObject.FILENAME )).
(Inherited from SoShaderProgram.)
Public methodSetTessellationEvaluationShader(Int32, String, SoShaderObjectSourceTypes)

Convenience method to create a tessellation evaluation shader with the specified filename and add it at the specified position.

(Inherited from SoShaderProgram.)
Public methodSetToDefaults

Sets all fields in this object to their default values.

(Inherited from SoFieldContainer.)
Public methodSetVertexShader(Int32, String)
Calls SetVertexShader(pos, filenameOrSource, OIV.Inventor.Nodes.SoShaderObject.SourceTypes( .SoShaderObject.FILENAME )).
(Inherited from SoVolumeShader.)
Public methodSetVertexShader(Int32, String, SoShaderObjectSourceTypes)

Creates a vertex shader with the given filename and adds it at the given pos.

(Inherited from SoVolumeShader.)
Public methodToString
Converts this SoBase structure to a human readable string.
(Inherited from SoBase.)
Public methodTouch

Marks an instance as modified, simulating a change to it.

(Inherited from SoNode.)
Public methodWrite
(Inherited from SoNode.)
Top
Properties
  NameDescription
Public propertyambientOcclusion

If true, apply an ambient occlusion effect (default is false).

Public propertyboundaryOpacity

Enable boundary opacity.

Public propertyboundaryOpacityIntensity
Public propertyboundaryOpacityThreshold
Public propertybufferObjects

Specifies a list of OIV.Inventor.Nodes.SoShaderParameterBufferObject to use with this shader.

(Inherited from SoShaderProgram.)
Public propertycolorInterpolation

Controls interpolation of data values used for color lookup.

Public propertycubicInterpolation Obsolete.

Enable cubic interpolation of data values.

Public propertydeferredLighting

Enable screen space lighting (computed on the GPU).

Public propertyedgeColor
Public propertyedgeColoring

Enable edge coloring.

Public propertyedgeDetect2D

Enable 2D edge detection.

Public propertyedgeDetect2DInnerThreshold

Increase this value to decrease noise on silhouette edges.

Public propertyedgeDetect2DMethod

Method used for 2D edge detection.

Public propertyedgeDetect2DOuterThreshold

Increase this value to decrease noise on edges in the volume.

Public propertyedgeThreshold

If this value is low, more edges will be detected.

Public propertyforVolumeOnly

Set to true if the shader should be called for volume rendering (OIV.VolumeViz.Nodes.SoVolumeRender).

(Inherited from SoVolumeShader.)
Public propertygenerateTransparency

If set to true, then shapes affected by this shader will be considered transparent.

(Inherited from SoShaderProgram.)
Public propertygeometryInputType

Specifies the input primitive type of the current geometry shader if any (not used otherwise).

(Inherited from SoShaderProgram.)
Public propertygeometryOutputType

Specifies the output primitive type of the current geometry shader if any (not used otherwise).

(Inherited from SoShaderProgram.)
Public propertygradientQuality

Specifies the algorithm used to compute gradients, for example, normals for lighting.

Public propertygradientThreshold

Ignore all gradients with a magnitude less than the specified threshold.

Public propertyimages

Specifies a list of OIV.Inventor.Nodes.SoShaderParameterImage nodes to use with this shader.

(Inherited from SoShaderProgram.)
Public propertyinterpolateOnMove

When set to false, interpolation between LDM tiles (across the tile boundary) is not done when rendering in interactive mode.

(Inherited from SoVolumeShader.)
Public propertyIsDisposable
ISafeDisposable interface implementation.
(Inherited from SoDisposable.)
Public propertyjittering

Enable jittering.

Public propertylighting

Enable gradient based lighting (computed on the GPU).

Public propertylightingModel Obsolete.

Sets the lighting model.

Public propertymaxGeometryOutputVertices

Set the maximum number of vertices the geometry shader will emit in one invocation.

(Inherited from SoShaderProgram.)
Public propertypatchLength

Set the length of the fixed-size collection of vertices used by tessellation shaders.

(Inherited from SoShaderProgram.)
Public propertypreIntegrated

Enable pre-integrated volume rendering.

Public propertysegmentedInterpolation

Allow correct interpolation when rendering segmented data.

Public propertysegmentedInterpolationThreshold

Defines the iso distance used when OIV.VolumeViz.Nodes.SoVolumeRenderingQuality.segmentedInterpolation is true.

Public propertyshaderObject

Specifies the list of shader objects (i.e., vertex shaders, geometry and fragment shaders) which form the shader program.

(Inherited from SoShaderProgram.)
Public propertyshadowShader

Only used when an OIV.Inventor.Nodes.SoShadowGroup is active.

(Inherited from SoShaderProgram.)
Public propertysurfaceScalarExponent

If this field is greater than or equal to 1, a surface with a small gradient will be less lighted than a surface with a high gradient.

Public propertyunnormalizedGradientExponent

When unnormalizedGradientExponent is not 0, surfaces with high gradients will be more lighted than surfaces with small gradients.

Public propertyUserData
Gets or sets the user data to be contained by the field container.
(Inherited from SoFieldContainer.)
Public propertyvertexProgramTwoSide

If set to true, vertex shaders will operate in two-sided color mode.

(Inherited from SoShaderProgram.)
Public propertyvoxelizedRendering

If true, OIV.VolumeViz.Nodes.SoVolumeRender displays voxels as individual cubes.

Public propertyvoxelOutline

If true, draw the outline of voxels (default is false).

Public propertyvoxelOutlineColor

When OIV.VolumeViz.Nodes.SoVolumeRenderingQuality.voxelOutline is true, this value specifies the voxel outline color.

Public propertyvoxelOutlineThreshold

When OIV.VolumeViz.Nodes.SoVolumeRenderingQuality.voxelOutline is true, this threshold specifies the minimum size of a voxel, in screen pixels, for the voxel outline to be visible.

Public propertyvoxelOutlineWidth

When OIV.VolumeViz.Nodes.SoVolumeRenderingQuality.voxelOutline is true, this value specifies the voxel outline width in pixels.

Top
Remarks

This property node causes subsequent OIV.VolumeViz.Nodes.SoVolumeRender nodes to be drawn with different rendering effects and/or levels of quality.

NOTE:

  • Only one (or none) of the following nodes can be active at a time: OIV.VolumeViz.Nodes.SoVolumeShader or OIV.VolumeViz.Nodes.SoVolumeRenderingQuality. However since Open Inventor 7.1, both OIV.VolumeViz.Nodes.SoVolumeRenderingQuality and OIV.VolumeViz.Nodes.SoVolumeIsosurface may applied to the same OIV.VolumeViz.Nodes.SoVolumeRender node.

  • If the application simply needs to replace one or more of the VolumeViz shader rendering functions with a customized shader, you can use either OIV.VolumeViz.Nodes.SoVolumeShader or OIV.VolumeViz.Nodes.SoVolumeRenderingQuality. However if the application needs the advanced rendering features of OIV.VolumeViz.Nodes.SoVolumeRenderingQuality, e.g. lighting, in addition to the customized behavior, then you should use this node (which is derived from OIV.VolumeViz.Nodes.SoVolumeShader). Using the shader rendering framework is explained on the OIV.VolumeViz.Nodes.SoVolumeShader page.

  • The OIV.VolumeViz.Nodes.SoVolumeRenderingQuality node must be before the OIV.VolumeViz.Nodes.SoVolumeRender and after the OIV.LDM.Nodes.SoTransferFunction.

  • This is a shader node! The effect will usually be undesirable if it is applied to standard geometry (polygons, lines, etc). Therefore applications should generally keep the volume visualization nodes and standard geometry nodes separate in the scene graph (i.e. under different OIV.Inventor.Nodes.SoSeparator nodes).

  • Please read the comments for each field. Some options only apply to gradient lighting and have no effect on deferred lighting.

    Pre-integrated and lighted rendering

    Various enhanced rendering modes for volume rendering are available:

    • Pre-integrated volume rendering

    • Lighted volume rendering

The pre-integrated mode (OIV.VolumeViz.Nodes.SoVolumeRenderingQuality.preIntegrated field) generally provides higher image quality for the same number of slices. Most applications should enable this field. However, note that pre-integration integrates between color map values. For typical scalar data containing sampled values, this provides a beneficial smoothing. It is especially useful when the color changes sharply between adjacent color map entries. However, when the color changes sharply between adjacent voxels, it can can cause values that are not actually in the original data to be displayed. This is undesireable for some data, for example "label" volumes resulting from segmentation. Pre-integration is not recommended for such data. Also note:

When lighting is enabled for volume rendering, VolumeViz applies the same lighting equation used for polygonal geometry, including (optionally) specular highlights. The base voxel color comes from the OIV.LDM.Nodes.SoTransferFunction node or (optionally) from a custom shader function provided by the application. This color is modified using the current material (OIV.Inventor.Nodes.SoMaterial), a vector simulating a "normal vector" and one or more directional light nodes (OIV.Inventor.Nodes.SoDirectionalLight) found in the scene graph. Voxels can also cast and receive shadows (see OIV.Inventor.Nodes.SoShadowGroup).

Limitation: Pre-integrated and lighted rendering are not supported if using custom fragment shaders and redefining FRAGMENT_COMPUTE_COLOR slot.

VolumeViz supports two lighting modes using either the OIV.VolumeViz.Nodes.SoVolumeRenderingQuality.lighting field or the OIV.VolumeViz.Nodes.SoVolumeRenderingQuality.deferredLighting field. In both cases lighting is computed on the GPU as part of the rendering process. (Do NOT use the lighting field in the OIV.VolumeViz.Nodes.SoVolumeRendering node. This field enables a CPU lighting computation that is slow.)

Unlike other primitives (including other VolumeViz primitives), volume lighting is not affected by an OIV.Inventor.Nodes.SoLightModel node. Also unlike other primitives, if lighting is enabled and there are no light nodes in the scene graph, the voxel color is taken from the transfer function or custom shader function "as is" (other primitives would be black in this case).

Each light node's direction and intensity fields are used, but the color field is not currently used. The current OIV.Inventor.Nodes.SoMaterial specifies the ambient, specular, diffuse, and emissive color values for the lighting equation. Note that the default diffuse color is "light gray" (0.8), not full white. This allows specular lighting to push the color toward full white (as expected). If specular lighting is not desired, then changing this to full white (1.0) is recommended in order to see the true colors specified in the transfer function.

The following figures show the same volume data:

Default volume rendering Pre-integrated volume rendering Lighted pre-integrated volume rendering

Quality enhancement parameters

Jittering: When OIV.VolumeViz.Nodes.SoVolumeRenderingQuality.jittering is set to true, a random offset is added to texture coordinates in order to decrease "ring" artifacts without the cost of drawing a higher number of slices. Note that this creates a "noisy" image. Instead we recommend setting the OIV.VolumeViz.Nodes.SoVolumeRender.samplingAlignment field to BOUNDARY_ALIGNED.

No Jittering With Jittering

Gradient quality: When gradient lighting (OIV.VolumeViz.Nodes.SoVolumeRenderingQuality.lighting field) is enabled, the OIV.VolumeViz.Nodes.SoVolumeRenderingQuality.gradientQuality field allows you to choose between various gradient computation techniques. The computational cost increases with the quality. Has no effect on deferred lighting.

Low quality Medium quality High quality

Surface scalar: When gradient lighting (OIV.VolumeViz.Nodes.SoVolumeRenderingQuality.lighting field) is enabled or OIV.VolumeViz.Nodes.SoVolumeRenderingQuality.edgeDetect2DMethod is GRADIENT, the OIV.VolumeViz.Nodes.SoVolumeRenderingQuality.surfaceScalarExponent field disables lighting (or edge detection) on uniform surfaces in order to avoid noise in these area. This field should not be mixed with OIV.VolumeViz.Nodes.SoVolumeRenderingQuality.unnormalizedGradientExponent. The default value is zero, but a small value, for example 2.0, is recommended. Has no effect on deferred lighting.

Surface Scalar disabled Surface Scalar enabled

Unnormalized gradient : When gradient lighting (OIV.VolumeViz.Nodes.SoVolumeRenderingQuality.lighting field) is enabled, if OIV.VolumeViz.Nodes.SoVolumeRenderingQuality.unnormalizedGradientExponent is not 0, voxels with small gradients will get more contribution from the ambient light than voxels with high gradients. It is similar to OIV.VolumeViz.Nodes.SoVolumeRenderingQuality.surfaceScalarExponent but uses the ambient light instead of the transfer function color for uniform surfaces. Has no effect on deferred lighting.

Gradient threshold: When gradient lighting is enabled, gradients with a length less than OIV.VolumeViz.Nodes.SoVolumeRenderingQuality.gradientThreshold are ignored during the lighting computation. This avoids doing lighting on noise while still lighting important data. In the following screenshots, setting a threshold of 0.1 removed lighting on the noise surrounding the spheres. Has no effect on deferred lighting.

With OIV.VolumeViz.Nodes.SoVolumeRenderingQuality.gradientThreshold set to 0 With OIV.VolumeViz.Nodes.SoVolumeRenderingQuality.gradientThreshold set to 0.1

Image enhancement parameters

Various image enhancement techniques are available in this node and in OIV.LDM.Nodes.SoTransferFunction.

The following table shows the available edge detection techniques (explanation of faux shading is in OIV.LDM.Nodes.SoTransferFunction):
No Edges Boundary Opacity Edge 2D
Edge Coloring Faux Shading (see OIV.LDM.Nodes.SoTransferFunction)

Because this node is derived from OIV.VolumeViz.Nodes.SoVolumeShader, IVVR_FIRST_RESERVED_TEXTURE_UNIT applies to it. See OIV.VolumeViz.Nodes.SoVolumeShader for more information.

Volume projection

Volume projection (OIV.Inventor.Nodes.SoProjection or derived classes) is incompatible with some options enabled by this node. Do not enable the preIntegrated, jittering or edgeDetect2D fields when using projection.

FILE FORMAT/DEFAULT

VolumeRenderingQuality {
lighting false
preIntegrated true
jittering false
gradientThreshold 0.0001
edgeColoring false
edgeColor (0, 0, 0)
edgeThreshold 0.2
boundaryOpacity false
boundaryOpacityIntensity 1.5
boundaryOpacityThreshold 1.5
edgeDetect2D false
edgeDetect2DInnerThreshold 0.1
edgeDetect2DOuterThreshold 0.1
edgeDetect2DMethod LUMINANCE
gradientQuality MEDIUM
colorInterpolation true
unnormalizedGradientExponent 0
surfaceScalarExponent 5
segmentedInterpolation false
segmentedInterpolationThreshold 0.5
voxelizedRendering false
voxelOutline false
voxelOutlineThreshold 2.
voxelOutlineWidth 2.
voxelOutlineColor (0, 0, 0)
ambientOcclusion false
deferredLighting true
interpolateOnMove true
}

ACTION BEHAVIOR

OIV.Inventor.Actions.SoGLRenderAction Sets volume rendering quality parameters in the traversal state.

See Also