# VolumeToGeom

## DESCRIPTION

This modules converts a 3D lattice into geometry that can be rendered using a volume rendering algorithm. The algorithm was developed by David Laur and Pat Hanrahan at Princeton University, and is described in the proceedings of SIGGRAPH 91.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), Gaussian (heptagons with an approximate Gaussian transparency falloff linear with radius), and Texture (*** still to be done ***). The Splat Size is the size of the splat in samples, except for points, in which case it is in pixels.

## INPUTS

**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

**Constraints:** 4-vector

**Constraints:** float

This is the colormap for mapping volume samples into color and transparency.

## WIDGETS

**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.
- Texture
- **** Still to be done ****

**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.

## OUTPUTS

**Port:** Output

**Type:** Geometry

This is the octree geometry of the volume.

## KNOWN PROBLEMS

If the size of the volume is not a power of two, asymmetries can result in the octree decomposition. The visual effect is that parts of the volume with the same perceptual variance will be subdivided to different levels.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.

## SEE ALSO

ReadLat, GenerateColormap, WaveFormColormap, Render.[Documentation Home]

© The Numerical Algorithms Group Ltd, Oxford UK. 2000