The SoVolumeSkin SoVolumeSkin SoVolumeSkin node renders the outer surfaces of the current region of interest. The default region of interest is the entire volume, but region of interest can be restricted to a sub-volume using an SoROI SoROI SoROI node. This is explained in Section 1.7, “Clipping”. A volume skin is approximately the same as a set of SoOrthoSlice SoOrthoSlice SoOrthoSlice nodes positioned at the “faces” of the region of interest. This is a useful analogy, but it’s not exactly the same image. One reason is that SoOrthoSlice SoOrthoSlice SoOrthoSlice is rendered at the center of the specified voxel and volume skin is rendered at the outer extent of the voxel. In other words an SoOrthoSlice SoOrthoSlice SoOrthoSlice at a “face” of the volume will be rendered one-half voxel width in from the geometric extent of the volume. While an SoVolumeSkin SoVolumeSkin SoVolumeSkin will be rendered exactly at the geometric extent of the volume. A very useful difference is that SoVolumeSkin SoVolumeSkin SoVolumeSkin displays all the faces of the region of interest even when the region of interest has a complex shape. For example when using the exclusion box feature to “cut away” part of the ROI box (what seismic applications sometimes call a “chair cut”).
It’s even more useful to consider that an SoVolumeSkin SoVolumeSkin SoVolumeSkin node generates approximately the same image as an SoVolumeRender SoVolumeRender SoVolumeRender (direct volume rendering) node would, if rendered using an opaque color map. However the SoVolumeSkin SoVolumeSkin SoVolumeSkin node will render much faster and load much less data than the equivalent volume rendering node. This makes the SoVolumeSkin SoVolumeSkin SoVolumeSkin node valuable for exploring a volume by moving an opaque subvolume through it. This is technique is common in seismic visualization applications and is often called a “volume probe”. A related useful technique is to put both an SoVolumeSkin SoVolumeSkin SoVolumeSkin node and an SoVolumeRender SoVolumeRender SoVolumeRender node under an SoSwitch SoSwitch SoSwitch node. The application can then allow the user to switch between opaque probe rendering and volume rendering for the same region of interest.
SoVolumeSkin SoVolumeSkin SoVolumeSkin is intended to be used with an opaque color map or with the alphaUse field set to ALPHA_OPAQUE. Using a non-opaque color map with volume skin will generate the “correct” result, but it may not be what the user of the application expects. Setting alphaUse to ALPHA_OPAQUE allows the same color map to be used for both the volume skin and the volume rendering, even when the volume rendering color map contains (as it usually does) transparency.
As hinted earlier, when using SoVolumeSkin SoVolumeSkin SoVolumeSkin , VolumeViz only loads the tiles of data required to render the outer faces of the region of interest. In fact the only data tiles required (by default) are the tiles intersected by the “front faces” of the volume skin (the faces whose normal vectors point toward the camera). You can use the faceMode field to specify that the back faces of the skin are displayed instead.
SoVolumeSkin* pVolSkin = new SoVolumeSkin; pVolSkin->alphaUse = SoVolumeSkin::ALPHA_OPAQUE;
SoVolumeSkin volSkin = new SoVolumeSkin(); volSkin.alphaUse.Value = SoVolumeSkin.AlphaUses.ALPHA_OPAQUE;
SoVolumeSkin volSkin = new SoVolumeSkin(); volSkin.alphaUse.setValue( SoVolumeSkin.AlphaUses.ALPHA_OPAQUE );
See the volume skin example program in:
$OIVHOME/src/VolumeViz/examples/volumeSkin
See the volume skin example program in:
$OIVHOME/demos/volumeviz/sample/volumeSkin