Geol 702H - Smooth Scalar Fields and Isosurfaces

J. Louie, April 5, 1995

Volume Visualization Methods

Volume Slicing, Contouring, and Coloring

Volume Exterior Rendering and Slicing

Volume Interior Rendering, Opacity, and Isosurfaces

Setting up the SunVision Voxel tool

This exercise was derived from Sun's SunVision application, which only runs on Sun SPARC machines with color displays under Solaris 1.1x. Without such a machine, you can execute many parts of this exercise on a Macintosh running Daniel Rickey's MacCubeView1.5 application (click to download). You will also want to download the 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.

Volume Slicing, Contouring, and Coloring

To run SunVision, log in directly to a Seismology color Sun machine, then execute the following commands:
	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.


Volume Exterior Rendering and Slicing

It is easier to see the geometry of the data volume by presenting it in three dimensions, rendered onto the 2-d screen. This process is very similar to that used in 3-d surface and object rendering programs, in that a ray is cast from each pixel on the screen, and takes the color value it hits on the outside of the volume. The volume may be rotated or sliced in 3-d.

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.


Volume Interior Rendering, Opacity, and Isosurfaces


Selecting the Rendering Mode ``Transparent Surfaces'', and the Rendering Options ``Outline'' and ``Shaded'' yields this view. Unlike texture mapping, this rendering is not simply picking out 2-d slides, applying a pallet to the image, and projecting the slices from 3-d to the 2-d screen. This is a true volume rendering, where every voxel is considered to have an independent color and opacity. In the view above all voxels are perfectly white and totally opaque, so all we see is the shaded brick. Rays cast from the screen will ``look through'' all non-opaque voxels they encounter and accumulate a total color and brightness, which also depends on the location of a light source. Very few applications will do true data volume rendering.


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.


Return To UNRSL Homepage