The purpose of this project is to make volume rendering more interactive, intuitive, and expressive. Generating images using traditional volume rendering methods can be difficult. Even with a great deal of experience and training, the process of isolating features of interest in a dataset can be trial and error. Our hope is that this combination of hardware based volume rendering (for interactivity), direct manipulation widgets (for intuitiveness), and multi-dimensional transfer functions (for expressiveness) will solve some of these problems and allow scientists and physicians to answer important questions about their data.
If you are unfamiliar with volume rendering techniques, there are a number of excellent resources available on the web. Here is a nice introduction to direct volume rendering techniques. Here is a good book on the topic.
Many volumetric datasets have a complex combination of materials and material boundaries. Basic derivative measures combined with the primary data-value can allow us to discriminate between different material properties and boundaries, which might otherwise be undetectable. The image below illustrates the relationship between primary data value and it's spatially varying derivatives. Notice that at the center of the boundary the gradient magnitude (f') is high and the second derivative (f'') is zero.
|Please note: These mouse commands only apply to the volume rendering itself. Widgets may make use of mouse actions in different ways, they are described below.|
|m||Launch/Destroy menu. (version > 2.2.0)|
|F9||Render volume with emissive lighting only (No shading)|
|F10||Render volume with diffuse and specular shading|
|F11||Render volume with faux shading|
|'c'||Enable/Disable the Clipping plane widget|
|'l'||Enable/Disable the Lighting widget|
|'b'||Enable/Disable the constant size dual-domain Brush|
|'a'||Enable/Disable the Automatically sized dual-domain brush|
|'t'||Enable/Disable the Triangular dual-domain brush|
|'o'||Enable/Disable the constant size One-dimensional dual-domain brush|
|'O'||Enable/Disable the automatically sized One-dimensional dual-domain brush|
|spc||"Paint" the current dual-domain brush into the transfer function|
|'d'||Drop the current dual-domain brush into the transfer function as a widget|
|'n'||Clear any "Painted" regions in the transfer function, New pallet|
|'h'||Enable/Disable the Histogram in the transfer function widget|
The horizontal axis represents primary data value, the vertical represents gradient magnitude. When you are using a 3D transfer function, the third axis, second derivative in the gradient direction, is not explicitly shown. Rather, you modify opacity based on this third axis by manipulating the Boundary Emphasis Slider. At its right most position (shown above), the boundary emphasis slider sets opacity constant for all second derivative values. At its left most position, it sets opacity high for zero second derivatives and low for increasing and decreasing second derivatives.
Mouse clicks on the bars which make up its border translate it in the scene. Mouse clicks on the spheres located at the corners scale it. A right mouse click on its inner surface will insert an new classification widget. If a classification widget is currently selected, you can delete it by hitting the delete key on your keyboard.
Classification Widgets work inside the transfer function widget. They allow you to specify regions of interest in the transfer function domain. The widgets shown above are (in order) the Triangle, Elliptical, 1D, and Default classification widgets. You can insert one using a right mouse click on the inner surface of the transfer function widget. You can delete one by selecting it and hitting the delete key on your keyboard. You can change a classification widget to another type by holding the Shift or Ctrl key down and clicking on it. Color is modified by holding down a left mouse click on the classification widgets inner surface and moving the mouse horisontally to select hue, and vertically to select level. Opacity is modified by holding down a right mouse click and moving vertically.
The Triangle classification widget is based on Mark Levoy's seminal work in volume rendering. It is well suited to making boundaries between materials appear with equal thickness everywhere, regardless of gradient magnitude.
The Elliptical classification widget is well suited for specifying general regions in a two or three dimensional transfer function.
The 1D classification widget only ramps opacity based on the primary data value. You can, however, place the widget anywhere in the transfer function domain and utilize the full expressiveness of multi-dimensional transfer functions by sizing it vertically.
The Default classification widget is called this because when it is sized to take up the entire transfer function domain, all material boundaries will be visible. You can adjust which gradients are emphasized by manipulating the opacity ramp shown above.
The Data Probe Widget allows you to query the volume in the spatial domain
and view the results in the transfer function domain. The exact value, tri-linearly
interpolated, is displayed as a red dot, the corner values of the voxel that the
probe is in are represented as colored dots connected together based on their
relationship in the spatial domain, ie the cube which makes up the voxel is
reconstructed in the transfer function. If second derivative information is available,
these dots are colored based on their second derivative. Blue represents
low second derivatives, orange represents high, and white is for zero second derivatives.
A left mouse click on the top sphere will orient the probe about its tip. A left click on the main bar will translate the probe in the x-y plane relative to the screen. A right click on the main bar will translate the probe in the z-y plane, where horisontal motion moves it in depth.
Due to current hardware limitations, simian only supports orthogonal clipping planes. You can choose a clipping plane by selecting the widget and using the number keys '1-6'.
Dual-domain Interaction is the term we use to describe the process of interacting
in both the spatial domain and the transfer function domain simultaneously. This process
involves both the transfer function widget and the probe widget, or the transfer function
widget and the clipping plane widget. When dual-domain interaction is enabled, the value
queried by the data probe or the clipping plane is set in the transfer function using
a classification widget. When the queried value changes so does the transfer function.
If the resulting transfer function displays features of interest, you can "paint" the
queried value into the transfer function by hitting the space bar on your keyboard. Or, you
can create a new classification widget at the queried point by hitting the 'd' key.
You can modify the color and opacity of the "brush" classification widget with the same mouse actions for other classification widgets by clicking on the red dot that represents the queried value. You can modify the size of the "brush" using the slider on the data probe widget.
Enable dual-domain interaction using the 'b', 'a', 't', 'o', or 'O' keys, described above. Clear "painted" regions with the 'n' key.
|The Lighting Widget allows you to modify the light direction for shaded volume rendering. Hit the 'l' (lower case L) key to enable/disable this widget. Use a left mouse click to modify the light direction.|