Briefly, the algorithm decomposes a volume into an octree, where subdivision is terminated when the color and transparency for a region of the volume is determined to lie within some error metric using the actual samples within that region. Empty space and uniform areas of the volume can be represented by relatively large primitives, while detailed areas of the volume are represented by smaller primitives. The error tolerance is adjustable, to allow a tradeoff between rendering time and quality.
The primitive for a leaf node of the octree is a splat, a screen oriented planar shape that approximates the view of a spherical reconstruction function. More detailed splats improve the reconstruction at the cost of rendering time. Splats are rendered back to front to handle transparency properly.
The inputs to the module are a scalar 3D lattice and a Colormap. The data value from the lattice will be used to look up a color and transparency. The error tolerance and splat configuration are adjustable from the module control panel.
The error metric used in this module is a single parameter that controls how much the unweighted transparency of a splat may differ from the transparency of any of the samples it represents. Lower error values will force more octree subdivision.
The splat types available in this module are Point (variable sized point primitives), Constant (rectangles with constant transparency), Linear (pentagons with transparency falloff linear with radius), and Gaussian (heptagons with an approximate Gaussian transparency falloff linear with radius). The Splat Size is the size of the splat in samples, except for points, in which case it is in pixels.
Port: Input
Type: Lattice
Constraints: 3-D.
This is the input volume from which the octree will be constructed.
Port: Colormap
Type: Lattice
Constraints: 1-D.
4-vector.
float.
This is the colormap for mapping volume samples into color and transparency.
Port: Error
Type: Dial
This is the maximum deviation from enclosed samples. For each leaf node in
the octree, the samples enclosed by that leaf will not differ in transparency
for the leaf by more than /Error.
Port: Splat Type
Type: Option Menu
Menu Item: Point
Menu Item: Constant
Menu Item: Linear
Menu Item: Gaussian
Menu Item: Texture
This selects the type of geometry used to draw the splat:
Point | variable-sized (in screen space) points |
Constant | constant-alpha rectangles |
Linear | pentagon with linear alpha falloff |
Gaussian | heptagon with piecewise-linear approximation to a Gaussian falloff |
Port: Splat Size
Type: Dial
This is the diameter of the splat. It is measured in samples, except for
Point splats in which case it is measured in pixels. It should be at
least 2 for linear and Gaussian reconstruction.
Port: Output
Type: Geometry
This is the octree geometry of the volume.
Because the splat size may be larger than the sample spacing, back to front rendering by octree traversal will fail in areas where the splats overlap. This results in some popping, in addition to the popping that occurs because of the planar representation of a spherical object.
Reconstruction functions are assumed to be spherical, which is not always a good assumption. If the aspect of voxels is not close to spherical, gaps or overblurring will result.
If all the alpha values in the colormap are unity, the module does not pass any displayable geometry to the renderer. It should display a single large opaque splat.