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 aPROPORTIONAL
“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
// create color and opacity transfer functions |
Methods
extend
Method use to decorate a given object (publicAPI+model) with vtkVolumeProperty characteristics.
Argument | Type | Required | Description |
---|---|---|---|
publicAPI |
Yes | object on which methods will be bounds (public) | |
model |
Yes | object on which data structure will be bounds (protected) | |
initialValues |
IVolumePropertyInitialValues | No | (default: {}) |
getAmbient
Get the ambient lighting coefficient.
getAnisotropy
Get anisotropy of volume shadow scatter
getAverageIPScalarRange
getAverageIPScalarRangeByReference
getColorChannels
Argument | Type | Required | Description |
---|---|---|---|
index |
Number | Yes |
getColorMixPreset
getComponentWeight
Get the scalar component weights.
Argument | Type | Required | Description |
---|---|---|---|
index |
Number | Yes |
getDiffuse
Get the diffuse lighting coefficient.
getForceNearestInterpolation
Argument | Type | Required | Description |
---|---|---|---|
index |
Number | Yes |
getGlobalIlluminationReach
Get the global illumination reach of volume shadow
getGradientOpacityMaximumOpacity
Argument | Type | Required | Description |
---|---|---|---|
index |
Number | Yes |
getGradientOpacityMaximumValue
Argument | Type | Required | Description |
---|---|---|---|
index |
Number | Yes |
getGradientOpacityMinimumOpacity
Argument | Type | Required | Description |
---|---|---|---|
index |
Number | Yes |
getGradientOpacityMinimumValue
Argument | Type | Required | Description |
---|---|---|---|
index |
Number | Yes |
getGrayTransferFunction
Get the currently set gray transfer function. Create one if none set.
Argument | Type | Required | Description |
---|---|---|---|
index |
Number | Yes |
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.
Argument | Type | Required | Description |
---|---|---|---|
index |
Number | Yes |
getScalarOpacity
Get the scalar opacity transfer function. Create one if none set.
Argument | Type | Required | Description |
---|---|---|---|
index |
Number | Yes |
getScalarOpacityUnitDistance
Get the unit distance on which the scalar opacity transfer function is defined.
Argument | Type | Required | Description |
---|---|---|---|
index |
Number | Yes |
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
Argument | Type | Required | Description |
---|---|---|---|
index |
Number | Yes |
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.
Argument | Type | Required | Description |
---|---|---|---|
ambient |
Number | Yes | The 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.
Argument | Type | Required | Description |
---|---|---|---|
anisotropy |
Yes |
setAverageIPScalarRange
Argument | Type | Required | Description |
---|---|---|---|
x |
Yes | ||
y |
Yes |
setAverageIPScalarRangeFrom
Argument | Type | Required | Description |
---|---|---|---|
averageIPScalarRange |
Range | Yes |
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.
Argument | Type | Required | Description |
---|---|---|---|
index |
Number | Yes | |
value |
Number | Yes |
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.
Argument | Type | Required | Description |
---|---|---|---|
computeNormalFromOpacity |
Yes |
setDiffuse
Set the diffuse lighting coefficient.
Argument | Type | Required | Description |
---|---|---|---|
diffuse |
Number | Yes | The 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
Argument | Type | Required | Description |
---|---|---|---|
index |
Number | Yes | |
value |
Boolean | Yes |
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.
Argument | Type | Required | Description |
---|---|---|---|
globalIlluminationReach |
Yes |
setGradientOpacityMaximumOpacity
Argument | Type | Required | Description |
---|---|---|---|
index |
Number | Yes | |
value |
Number | Yes |
setGradientOpacityMaximumValue
Argument | Type | Required | Description |
---|---|---|---|
index |
Number | Yes | |
value |
Number | Yes |
setGradientOpacityMinimumOpacity
Argument | Type | Required | Description |
---|---|---|---|
index |
Number | Yes | |
value |
Number | Yes |
setGradientOpacityMinimumValue
Argument | Type | Required | Description |
---|---|---|---|
index |
Number | Yes | |
value |
Number | Yes |
setGrayTransferFunction
Set the color of a volume to a gray transfer function
Argument | Type | Required | Description |
---|---|---|---|
index |
Number | Yes | |
func |
vtkPiecewiseFunction | Yes |
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.
Argument | Type | Required | Description |
---|---|---|---|
independentComponents |
Boolean | Yes |
setInterpolationType
Set the interpolation type for sampling a volume.
Argument | Type | Required | Description |
---|---|---|---|
interpolationType |
InterpolationType | Yes |
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.
Argument | Type | Required | Description |
---|---|---|---|
LAOKernelRadius |
Yes |
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.
Argument | Type | Required | Description |
---|---|---|---|
LAOKernelSize |
Yes |
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.
Argument | Type | Required | Description |
---|---|---|---|
labelOutlineThickness |
Number 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.
Argument | Type | Required | Description |
---|---|---|---|
localAmbientOcclusion |
Yes |
setOpacityMode
Argument | Type | Required | Description |
---|---|---|---|
index |
Number | Yes | |
value |
Number | Yes |
setRGBTransferFunction
Set the color of a volume to an RGB transfer function
Argument | Type | Required | Description |
---|---|---|---|
index |
Number | Yes | |
func |
vtkColorTransferFunction | Yes |
setScalarOpacity
Set the scalar opacity of a volume to a transfer function
Argument | Type | Required | Description |
---|---|---|---|
index |
Number | Yes | |
func |
vtkPiecewiseFunction | Yes |
setScalarOpacityUnitDistance
Set the unit distance on which the scalar opacity transfer function is
defined.
Argument | Type | Required | Description |
---|---|---|---|
index |
Number | Yes | |
value |
Number | Yes |
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.
Argument | Type | Required | Description |
---|---|---|---|
shade |
Boolean | Yes |
setSpecular
Argument | Type | Required | Description |
---|---|---|---|
specular |
Number | Yes |
setSpecularPower
Set the specular power.
Argument | Type | Required | Description |
---|---|---|---|
specularPower |
Number | Yes |
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.
Argument | Type | Required | Description |
---|---|---|---|
extents |
Yes |
setUseGradientOpacity
Argument | Type | Required | Description |
---|---|---|---|
index |
Number | Yes | |
value |
Boolean | Yes |
setUseLabelOutline
Argument | Type | Required | Description |
---|---|---|---|
useLabelOutline |
Boolean | Yes |
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.
Argument | Type | Required | Description |
---|---|---|---|
volumeScatterBlendCoef |
Yes |
Source
export declare enum InterpolationType { |
export const InterpolationType = { |
import vtkPiecewiseFunction from '../../../Common/DataModel/PiecewiseFunction'; |
import macro from 'vtk.js/Sources/macros'; |