Volume Slicing, Contouring, and Coloring
time.vff volume data file used here.
If you pay the $25 shareware fee, MacCubeView allows you to do all the
volume exterior rendering and slicing done here.
It will allow some volume interior thresholding density summation, and
isosurface genration, but does not allow the flexibility in opacities
that SunVision has.
cd /quake/s1/ftp/vis/scalar3d sunvision &On the SunVision tool bar, click on ``Sun Voxel''. Wait for the application to load, then select View->Lightbox (Lightbox under the View menu in the main SunVoxel window). Then select File->Load, find the data file
time.vff, and
double click on it.

You will see a display of slices like that above. Each of the three images
is a view of the outside of the data volume from a different direction.
A default smooth gray color pallet maps the 0 to 255 integer values of
each pixel on the surface to a gray intensity in the image.

You can make a coutoured view of the images by selecting Props->Colormap...
from the main viewing window.
A pallet control tool pops up.
From the File button menu of the pallet control tool, select Load.
In the file load popup notice the files ending in
.cmap.
These are different pallets available.
Double-click on
contour.cmap.
Note that while this defines the geometric variations within each plane
well, it does not tell you which areas have low values and which have
high values.

Selecting the
graystep.cmap
pallet from the pallet control tool's
File->Load popup gives you filled gray contours that define both geometry
and level.

The colorstep.cmap
pallet makes better use of the display
capabilities of the color screen to allow you to perceive levels instantly.

The color.cmap
pallet is a continuous scale that removes the
contouring and allows you to see that the scalar values in this volume
vary only smoothly within it. This smooth variation is the reason any
contouring presentation will make sense.

In the Lightbox control panel you can change the locations of the orthogonal
planes within the volume, probe the scalar values, and animate images of
slices moving through the volume.
This example is slicing at z=40, x=80, and y=80.
To view our data set in 3-d, go to the main display window and select View->Cube. When the cube control window comes up, select the Rendering Options ``Outline'' and ``Wireframe''. Set the Rendering Mode to ``Texture mapped''. Note that you can drag with the left mouse button on either the image or the little orientation window to rotate the volume. Imagine that the volume is inside a trackball that you are dragging the top of. You can enlarge or reduce the image with the Scale slider; note how much faster rendering is at small sizes.

If you select Props-> Colormap from the image window, and File->Load from
the Colormap window, and load
colorstep.cmap,
you will see
a view like this above. Note how contours on different sides connect at the
edges. You may be able to imagine surfaces cutting through the volume,
connecting these contour lines on different sides. Such a suface is
an isosurface. Just as a contour line connects pixels of equal
value in a 2-d image, an isosurface connects voxels of equal value
within a 3-d volume.

Using the Orthogonal Clip sliders in the cube control window, you can try
to trace where the contours, or isosurfaces, would go in the interior of
the volume. The image above moves the ``L'' slider to the right, to push
in the left side. You could inspect the entire volume quickly in this way.
(MacCubeView is also good at this operation.)

Push the orthogonal clips all back out and try an oblique slice by setting
the Oblique Slice Orientation to -30 degrees and its Distance into the
cube to 40. The ability to make oblique slices is a powerful feature of
SunVision and a few other expensive visualization packages such as
Wavefront's Data Visualizer. One formerly time-consuming operation
that is simple with a volume package is the common-midpoint sorting
operation in seismic reflection data processing.
Another thing you can do with an oblique slice is to select a slice that
shows, for instance, only 2-d instead of 3-d variations in the data.
You may be able to understand and model the 2-d variations much more
easily than 3-d variations.
If you are using a large scale factor, and the image looks blocky, that is due to the intrinsic voxel spacing and size in the data volume. To smooth the view of the rays cast from each pixel, select Interpolated from the Rendering Options. Naturally rendering will take longer.


Select File->Load from the main view window, and double-click on
color.subs.
This is a substance description file.
Then select Props->Classification and Props->Shading. Hit the Apply
button in both the Classification and Shading popups that appear.
The substance description file classifies
the 0 to 255 scalar value each voxel may have into one of eight ranges,
corresponding to one of eight ``substances''. Each of the eight substances
may have a different color and opacity. In
color.subs the
low scalar values are substances assigned cool colors, and the higher values
are in substances with warmer colors. Here all eight substances are fully
opaque.
Note that the colors are assigned so that the contours one each face of the brick are still obvious.

Now we can view an isosurface directly by making some substances transparent
instead of opaque. In the Shading popup give substances 5 through 8 zero
opacity, and select Apply for the view above.
The cast rays now penetrate the high-value pixels with no effect.
The surface revealed is the isosurface separating values at the low end
of substance 5 from the values at the high end of substance 4.
Note that this surface connects the contour lines on the faces of the
volume, and has additional features not seen on the faces.
The ripples and bends in the isosurface in the interior of the volume can
tell us a lot about the data.

Above we try to isolate the single isosurface by making the opacities of
substances 1 through 3 zero in addition. Since the only opaque substance left,
number 4, has a range of scalar values, it is still ``thick''. Note that
the rendering takes much longer than a totally opaque volume, since each
screen ray has to pass through and account for many transparent voxels.

Above we reduce the range of the scalar values included in substance 4 by
decreasing the minimum scalar value for substance 5 to be near the minimum
vlaue for substance 4, and selecting Apply.
Apparently some adjacent voxels across the isosurface do not include
values included in substance 4, so this thinner surface has holes.

We can fill in some of the holes by selecting the ``Interpolate'' rendering
option, at the price of speed.

We fill more holes by making the isosurface a little thicker, with the
opaque substance having a range of 4 out of 256.
We can also rotate and scale the view to inspect different areas.

You can render additional isosurfaces separating four ranges of scalar values
by reading the
isosurf.subs
file in by selecting File->Open
in the main window, and then pressing the Apply buttons in the Classification
and Shading popups. Note that the Shading popup specifies now that the
substances alternate between opaque and transparent, for increasing scalar
value.
Experiment with using slightly opaque (~0.01) values instead of zero, and slightly transparent (~0.3) instead of one. Note how the opacity value has highly non-linear effects.