The role of the transfer function in volume rendering is to map the
voxel information to renderable properties of opacity and color.
Since generating a volume rendering which clearly visualizes the
features of interest is only possible with a good transfer function,
transfer function specification is a crucial task.
Unfortunately, it is difficult to accomplish. We have identified
three reasons for this. First, the transfer function has an enormous
number of degrees of freedom in which the user can get lost. Even
using simple linear ramps, every control point adds two degrees of
freedom. Second, the usual interfaces for setting transfer functions
(based on moving control points defining a set of linear ramps) are
not constrained or guided by the dataset in question.^{1} The lack of guidance is what forces the user into a
trial-and-error mode of interaction, in which the transfer function
domain is explored only by observing changes in the volume rendering
as a result of incremental adjustments. Third, transfer functions are
inherently non-spatial, in the sense that their assignment of color
and opacity does not includes spatial position as a variable in their
domain. This can be frustrating if the user is interested in
isolating one feature of the volume which is *spatially*
localized, but not distinguishable, in terms of data value, from the
other regions.

Multi-dimensional transfer functions are interesting because they address the third problem, while greatly compounding the first and second problems. Transfer functions can better discriminate between various structures in the volume data when they have more variables--a larger vocabulary--with which to express the differences between them. These variables are the axes of the multi-dimensional transfer function. However, adding dimensions to the transfer function greatly exacerbates the already troublesome problems of unbounded degrees of freedom and lack of user guidance; these challenges are addressed in the next section. Below, we explain our choice of axes for multi-dimensional transfer functions by describing how they enhance the ability to visualize an important class of volume datasets: those in which the features of interest are the boundaries between regions of homogeneous value. Of course, other application areas and visualization goals may imply a different set of relevant data variables for the transfer function axes.

For scalar volume datasets, the gradient is a first derivative. As a vector, it gives the direction of fastest change [21], which motivates its use as the ``surface normal'' in shaded volume rendering. The gradient magnitude is another fundamental local property of a scalar field, since it characterizes how fast values are changing. Our belief is this: any volume rendering application (medical, industrial, meteorological, etc.) which benefits from using gradient direction for shading can benefit from using gradient magnitude in the transfer function. This does not assume any particular mathematical model of how physical quantities are measured or represented in the volume data; it assumes only that regions of change tend to be regions of interest. Using gradient magnitude as the second dimension in our transfer functions allows structure to be differentiated with varying opacity or color, according to the magnitude of change. For example, the GE Turbine Blade is a canonical volume dataset which has a simple two-material composition (air and metal), easily rendered with an isosurface or 1D transfer function. A subtly in the dataset is how air cavities within the blade have slightly higher values than air outside (perhaps because of tomography artifacts), leading to lesser edge strength for the internal air-metal boundaries. Thus, as seen in Figure 1, this dataset benefits from 2D transfer functions, which can selectively render the internal structures by avoiding opacity assignment at regions of high gradient magnitude.

Our choice for the third axis of the transfer function is more directly based on principles of edge detection, and is best suited for application areas concerned with the boundaries or interfaces between relatively homogeneous materials. Some edge detection algorithms (such as Marr-Hildreth [20]) locate the middle of an edge by detecting a zero-crossing in a second derivative measure, such as the Laplacian. In practice, we compute a more accurate but computationally expensive measure, the second directional derivative along the gradient direction, which involves the Hessian, a matrix of second partial derivatives. Details on these measurements can be found in previous work on semi-automatic transfer function generation [12,13]. The usefulness of having a second derivative measure in the transfer function is that it enables more precise disambiguation of complex boundary configurations, such as in the human tooth CT scan, shown in Figure 2. The different material boundaries within the tooth overlap in data value such that the boundaries intersect when projected to any two of the dimensions in the transfer function domain. Thus, 2D transfer functions are unable to accurately and selectively render the different material boundaries present. However, 3D transfer functions can easily accomplish this.

(a) 1D Transfer Function | (b) 2D Transfer Function |

(a) 2D Transfer Function | (b) 3D Transfer Function |

- ... question.
^{1} - The Contour Spectrum is an exception in that it provides information about scalar value and derivative to assist in setting 1D transfer functions.