Skip to content

VolumeProperty ​

Introduction ​

vtkVolumeProperty is used to represent common properties associated with volume rendering. This includes properties for determining the type of interpolation to use when sampling a volume, the color of a volume, the scalar opacity of a volume, the gradient opacity of a volume, and the shading parameters of a volume.

When the scalar opacity or the gradient opacity of a volume is not set, then the function is defined to be a constant value of 1.0. When a scalar and gradient opacity are both set simultaneously, then the opacity is defined to be the product of the scalar opacity and gradient opacity transfer functions.

Most properties can be set per "component" for volume mappers that support multiple independent components. If you are using 2 component data as LV or 4 component data as RGBV (as specified in the mapper) only the first scalar opacity and gradient opacity transfer functions will be used (and all color functions will be ignored). Omitting the index parameter on the Set/Get methods will access index = 0.

When independent components is turned on, a separate feature (useful for volume rendering labelmaps) is available. By default all components have an "opacityMode" of FRACTIONAL, which results in the usual addition of that components scalar opacity function value to the final opacity of the fragment. By setting one or more components to have a PROPORTIONAL "opacityMode" instead, the scalar opacity lookup value for those components will not be used to adjust the fragment opacity, but rather used to multiply the color of that fragment. This kind of rendering makes sense for labelmap components because the gradient of those fields is meaningless and should not be used in opacity computation. At the same time, multiplying the color value by the piecewise scalar opacity function value provides an opportunity to design piecewise constant opacity functions (step functions) that can highlight any subset of label values.

vtkColorTransferFunction is a color mapping in RGB or HSV space that uses piecewise hermite functions to allow interpolation that can be piecewise constant, piecewise linear, or somewhere in-between (a modified piecewise hermite function that squishes the function according to a sharpness parameter). The function also allows for the specification of the midpoint (the place where the function reaches the average of the two bounding nodes) as a normalize distance between nodes.

See the description of class vtkPiecewiseFunction for an explanation of midpoint and sharpness.

Usage ​

js
// create color and opacity transfer functions
const ctfun = vtkColorTransferFunction.newInstance();
ctfun.addRGBPoint(200.0, 1.0, 1.0, 1.0);
ctfun.addRGBPoint(2000.0, 0.0, 0.0, 0.0);
const ofun = vtkPiecewiseFunction.newInstance();
ofun.addPoint(200.0, 0.0);
ofun.addPoint(1200.0, 0.2);
ofun.addPoint(4000.0, 0.4);

// set them on the property
volume.getProperty().setRGBTransferFunction(0, ctfun);
volume.getProperty().setScalarOpacity(0, ofun);
volume.getProperty().setScalarOpacityUnitDistance(0, 4.5);
volume.getProperty().setInterpolationTypeToLinear();

Methods ​

extend ​

Method use to decorate a given object (publicAPI+model) with vtkVolumeProperty characteristics.

ArgumentTypeRequiredDescription
publicAPIYesobject on which methods will be bounds (public)
modelYesobject on which data structure will be bounds (protected)
initialValuesIVolumePropertyInitialValuesNo(default: {})

getAmbient ​

Get the ambient lighting coefficient.

getAnisotropy ​

Get anisotropy of volume shadow scatter

getAverageIPScalarRange ​

getAverageIPScalarRangeByReference ​

getColorChannels ​

ArgumentTypeRequiredDescription
indexNumberYes

getColorMixPreset ​

getComponentWeight ​

Get the scalar component weights.

ArgumentTypeRequiredDescription
indexNumberYes

getDiffuse ​

Get the diffuse lighting coefficient.

getForceNearestInterpolation ​

ArgumentTypeRequiredDescription
indexNumberYes

getGlobalIlluminationReach ​

Get the global illumination reach of volume shadow

getGradientOpacityMaximumOpacity ​

ArgumentTypeRequiredDescription
indexNumberYes

getGradientOpacityMaximumValue ​

ArgumentTypeRequiredDescription
indexNumberYes

getGradientOpacityMinimumOpacity ​

ArgumentTypeRequiredDescription
indexNumberYes

getGradientOpacityMinimumValue ​

ArgumentTypeRequiredDescription
indexNumberYes

getGrayTransferFunction ​

Get the currently set gray transfer function. Create one if none set.

ArgumentTypeRequiredDescription
indexNumberYes

getIndependentComponents ​

getInterpolationType ​

Get the interpolation type for sampling a volume.

getInterpolationTypeAsString ​

Get the interpolation type for sampling a volume as a string.

getLAOKernelRadius ​

Get kernel radius for local ambient occlusion

getLAOKernelSize ​

Get kernel size for local ambient occlusion

getLabelOutlineThickness ​

gets the label outline thickness

getLocalAmbientOcclusion ​

Get local ambient occlusion flag

getMTime ​

Return the Modified Time which is a monotonic increasing integer global for all vtkObjects.

This allow to solve a question such as:

  • Is that object created/modified after another one?
  • Do I need to re-execute this filter, or not? ...

getOpacityMode ​

getRGBTransferFunction ​

Get the currently set RGB transfer function. Create one if none set.

ArgumentTypeRequiredDescription
indexNumberYes

getScalarOpacity ​

Get the scalar opacity transfer function. Create one if none set.

ArgumentTypeRequiredDescription
indexNumberYes

getScalarOpacityUnitDistance ​

Get the unit distance on which the scalar opacity transfer function is defined.

ArgumentTypeRequiredDescription
indexNumberYes

getShade ​

Get the shading of a volume.

getSpecular ​

getSpecularPower ​

Get the specular power.

getUpdatedExtents ​

Retrieves the updated extents.

This array is cleared after every successful render.

getUseGradientOpacity ​

ArgumentTypeRequiredDescription
indexNumberYes

getUseIndependentComponents ​

Get whether components should be treated independently for the given data.

ArgumentTypeRequiredDescription
numberOfComponentsNumberYesThe number of components in the data.

getUseLabelOutline ​

getVolumetricScatteringBlending ​

Get the blending coefficient that interpolates between surface and volume rendering

newInstance ​

Method use to create a new instance of vtkVolumeProperty

setAmbient ​

Set the ambient lighting coefficient.

ArgumentTypeRequiredDescription
ambientNumberYesThe ambient lighting coefficient.

setAnisotropy ​

Set anisotropy of volume shadow scatter. This function is only effective when volumeScatterBlendCoef is greater than 0. Default value of 0.0 means light scatters uniformly in all directions. Value of -1.0 means light scatters backward, value of 1.0 means light scatters forward.

ArgumentTypeRequiredDescription
anisotropyYes

setAverageIPScalarRange ​

ArgumentTypeRequiredDescription
xYes
yYes

setAverageIPScalarRangeFrom ​

ArgumentTypeRequiredDescription
averageIPScalarRangeRangeYes

setColorMixPreset ​

Set the color mix code to a preset value Defaults to ColorMixPreset.DEFAULT See the test testColorMix for an example on how to use this preset.

If set to CUSTOM, a tag //VTK::CustomColorMix is made available to the user who can user shader replacements to put its own code. The given code will be used to mix the colors from each component. Each component is available as a rgba vec4: comp0, comp1... There are other useful functions or variable available. To find them, see //VTK::CustomColorMix tag in vtkVolumeFS.glsl.

setComponentWeight ​

Set the scalar component weights.

ArgumentTypeRequiredDescription
indexNumberYes
valueNumberYes

setComputeNormalFromOpacity ​

Set the normal computation to be dependent on the transfer function. By default, the mapper relies on the scalar gradient for computing normals at sample locations for lighting calculations. This is an approximation and can lead to inaccurate results. When enabled, this property makes the mapper compute normals based on the accumulated opacity at sample locations. This can generate a more accurate representation of edge structures in the data but adds an overhead and drops frame rate.

ArgumentTypeRequiredDescription
computeNormalFromOpacityYes

setDiffuse ​

Set the diffuse lighting coefficient.

ArgumentTypeRequiredDescription
diffuseNumberYesThe diffuse lighting coefficient.

setForceNearestInterpolation ​

Force the nearest neighbor interpolation of one or more of the components The interpolation for the rest of the volume is set using setInterpolationType

ArgumentTypeRequiredDescription
indexNumberYes
valueBooleanYes

setGlobalIlluminationReach ​

Set the global illumination reach of volume shadow. This function is only effective when volumeScatterBlendCoef is greater than 0. Default value of 0.0 means only the neighboring voxel is considered when creating global shadow. Value of 1.0 means the shadow ray traverses through the entire volume.

ArgumentTypeRequiredDescription
globalIlluminationReachYes

setGradientOpacityMaximumOpacity ​

ArgumentTypeRequiredDescription
indexNumberYes
valueNumberYes

setGradientOpacityMaximumValue ​

ArgumentTypeRequiredDescription
indexNumberYes
valueNumberYes

setGradientOpacityMinimumOpacity ​

ArgumentTypeRequiredDescription
indexNumberYes
valueNumberYes

setGradientOpacityMinimumValue ​

ArgumentTypeRequiredDescription
indexNumberYes
valueNumberYes

setGrayTransferFunction ​

Set the color of a volume to a gray transfer function

ArgumentTypeRequiredDescription
indexNumberYes
funcvtkPiecewiseFunctionYes

setIndependentComponents ​

Does the data have independent components, or do some define color only? If IndependentComponents is On (the default) then each component will be independently passed through a lookup table to determine RGBA, shaded.

Some volume Mappers can handle 1 to 4 component unsigned char or unsigned short data (see each mapper header file to determine functionality). If IndependentComponents is Off, then you must have either 2 or 4 component data. For 2 component data, the first is passed through the first color transfer function and the second component is passed through the first scalar opacity (and gradient opacity) transfer function. Normals will be generated off of the second component. When using gradient based opacity modulation, the gradients are computed off of the second component. For 4 component data, the first three will directly represent RGB (no lookup table). The fourth component will be passed through the first scalar opacity transfer function for opacity and first gradient opacity transfer function for gradient based opacity modulation. Normals will be generated from the fourth component. When using gradient based opacity modulation, the gradients are computed off of the fourth component.

ArgumentTypeRequiredDescription
independentComponentsBooleanYes

setInterpolationType ​

Set the interpolation type for sampling a volume.

ArgumentTypeRequiredDescription
interpolationTypeInterpolationTypeYes

setInterpolationTypeToFastLinear ​

Set interpolation type to FAST_LINEAR

setInterpolationTypeToLinear ​

Set interpolation type to LINEAR

setInterpolationTypeToNearest ​

Set interpolation type to NEAREST

setLAOKernelRadius ​

Set kernel radius for local ambient occlusion. It specifies the number of samples that are considered on each random ray. Value must be greater than or equal to 1.

ArgumentTypeRequiredDescription
LAOKernelRadiusYes

setLAOKernelSize ​

Set kernel size for local ambient occlusion. It specifies the number of rays that are randomly sampled in the hemisphere. Value is clipped between 1 and 32.

ArgumentTypeRequiredDescription
LAOKernelSizeYes

setLabelOutlineThickness ​

It will set the label outline thickness for the labelmaps. It can accept a single number or an array of numbers. If a single number is provided, it will be used for all the segments. If an array is provided, it indicates the thickness for each segment index. For instance if you have a labelmap with 3 segments (0: background 1: liver 2: tumor), you can set the thickness to [2,4] to have a thicker outline for the tumor (thickness 4). It should be noted that the thickness is in pixel and also the first array value will control the default thickness for all labels when 0 or not specified.

ArgumentTypeRequiredDescription
labelOutlineThicknessNumber or Array[Number]Yes

setLocalAmbientOcclusion ​

Set whether to turn on local ambient occlusion (LAO). LAO is only effective if shading is on and volumeScatterBlendCoef is set to 0. LAO effect is added to ambient lighting, so the ambient component of the actor needs to be great than 0.

ArgumentTypeRequiredDescription
localAmbientOcclusionYes

setOpacityMode ​

ArgumentTypeRequiredDescription
indexNumberYes
valueNumberYes

setRGBTransferFunction ​

Set the color of a volume to an RGB transfer function

ArgumentTypeRequiredDescription
indexNumberYes
funcvtkColorTransferFunctionYes

setScalarOpacity ​

Set the scalar opacity of a volume to a transfer function

ArgumentTypeRequiredDescription
indexNumberYes
funcvtkPiecewiseFunctionYes

setScalarOpacityUnitDistance ​

Set the unit distance on which the scalar opacity transfer function is defined.

ArgumentTypeRequiredDescription
indexNumberYes
valueNumberYes

setShade ​

Set the shading of a volume.

If shading is turned off, then the mapper for the volume will not perform shading calculations. If shading is turned on, the mapper may perform shading calculations - in some cases shading does not apply (for example, in a maximum intensity projection) and therefore shading will not be performed even if this flag is on. For a compositing type of mapper, turning shading off is generally the same as setting ambient=1, diffuse=0, specular=0. Shading can be independently turned on/off per component.

ArgumentTypeRequiredDescription
shadeBooleanYes

setSpecular ​

ArgumentTypeRequiredDescription
specularNumberYes

setSpecularPower ​

Set the specular power.

ArgumentTypeRequiredDescription
specularPowerNumberYes

setUpdatedExtents ​

Informs the mapper to only update the specified extents at the next render.

If there are zero extents, the mapper updates the entire volume texture. Otherwise, the mapper will only update the texture by the specified extents during the next render call.

This array is cleared after a successful render.

ArgumentTypeRequiredDescription
extentsYes

setUseGradientOpacity ​

ArgumentTypeRequiredDescription
indexNumberYes
valueBooleanYes

setUseLabelOutline ​

ArgumentTypeRequiredDescription
useLabelOutlineBooleanYes

setVolumetricScatteringBlending ​

Set the blending coefficient that determines the interpolation between surface and volume rendering. Default value of 0.0 means shadow effect is computed with phong model. Value of 1.0 means shadow is created by volume occlusion.

ArgumentTypeRequiredDescription
volumeScatterBlendCoefYes