GK's Master's Thesis (re-)re-implementation
Having written nrrd as the basis for
future work involving N-D raster data, re-implementing my Master's
thesis code in 2000 turned out to be quite easy, and the result is
bane. In 2002, I re-re-implemented it, using gage as the underlying measure of values
and derivatives. It is my hope that future research by others on the
topic of transfer function generation can benefit from comparisons
with my technique, as represented by my own implementation.
I would like to mention that despite this software coming from Utah,
and despite my Utah affiliation at the time the VolVis '98 paper was
published (and when the MS thesis was finished in 1999), the great
majority of this research was completed while I was a student in the
Program of Computer
Graphics (at Cornell
University) under Don
Greenberg. That I didn't finish while at Cornell indicates
nothing more than that I bit off more than I could chew in two years.
The basic ideas in this research were the following:
- Direct volume rendering relies on a complicated multi-dimensional
parameter called the transfer function, which assigns optical
properties such as opacity, color, emissivity, etc., based on the data
values in the volume.
- The most important variable in a transfer function is opacity.
No other variable plays as essential a role in determining how
intelligible and informative the final rendering will be. If the
opacity assignment is botched, the important structures are either
invisible or hopelessly occluded. Thus, this research only seeks to
generate opacity functions: functions which assign opacity to the
volume data based on data value or some other locally measurable
quantity.
- I'm interested in rendering datasets where the important
structure is the boundary between relatively homogenous regions. One
could also call these features the material interfaces. This means
that our task is tantamount to edge detection. Edge detection can be
done using the first and second directional derivative along the
gradient direction, in three dimensions as well as two.
- The very nature of opacity functions is that their assingment is
performed everywhere in the volume equally-- there is no spatial
dimension or axis to the transfer function.
- Thus, we need to do edge detection, but with the spatial
component "projected out". We want to localize boundaries not
in the spatial domain, but in the transfer function domain.
- The role of histograms is to record variation and patterns of
some properties of data, while projecting away the quantities which
don't matter. In our case, position doesn't matter.
- By creating and analyzing 3-D histogram volumes of data value and
its first and second directional derivatives, we can extract a
description of what boundaries are present in the given volume data.
- If the user specifies a high-level description of how boundaries
are supposed to look, this can be combined with the histogram volume
analysis to create an opacity function which shows only the boundaries.
- The information from the histogram volume analysis can be used
additionally as a record of the dataset characteristics, independent
of the specific task of opacity function specification.
The interesting parts of the research are the identification of which
quantities should go into the histogram volume, figuring out how to
measure them and store them, analyzing the histogram volume, and
creating a new/improved interface to setting the transfer function.
The bane software implements all the basic operations
described in my MS thesis and in VolVis '98 paper. Also, it is this
software which generated all the results used in the Vis 2000 Transfer
Function Bake-Off.
While bane is a C library (libbane.a, libbane.so, etc) which
contains all the functions you need to create opacity functions, it is
probably easier to just use the single command-line executable, called
gkms, which is built as part of installing bane.
gkms does everything needed to go from a dataset to an
opacity function (either one or two dimensional), and it offers access
to all the bane functionality which has anything to do with
semi-automatic transfer function generation.
Long ago I wrote An Introduction to bane, Using
gkms, but the Bane in recent versions of Teem does not work,
and it may be some time before it is working again.