Isonest - isosurface_nesting

Synopsis

A mapper module to control a set of N isosurfaces at unique levels, with each nested "onion-skins" having 2-pass transparency for high quality rendering.

IsonestParams

Name Type Description UI Control

num_component int The list of available data components in the input field RadioBox
num_levels int Number of isosurfaces Slider
min float The minimum value used for the first isosurface Slider
max float The maximum data value used for the last isosurface Slider
transparency float The overall group transparency level Slider
trans_ramp int The trigger of transparency - all the same or ramped CheckBox
ramp_delta float Width of range to vary transparency Slider

Input Ports

Name Type Description

in_field Field Data that should be displayed, structured or unstructured, containing at least one scalar component.

Output Ports

Name Type Description

obj GDobject Directly renderable object output (group). Colormap editor may be connected to this port to change isonest color assignments.

Description

The Isonest project implements one main new visualization macro module - "isosurface_nesting". The module is very similar to the standard isosurface module. The isosurface_nesting module creates N isosurfaces at once on the same data set rather than just one at a single threshold value. The range of threshold values for the isosurfaces is automatically spaced evenly between min and max values. All isosurfaces are assigned a unique color and transparency value. Secondary data values are not mapped onto the isosurfaces, only a solid color per isosurface is allowed for maximum visual differentiation. Transparency is applied with special care and methods to achieve high visual quality. First, transparency can be ramped from a low to a high value through the range of isosurfaces. This yields thin transparent shells on the outside with progressively more opaque shells on the interior. Second, a special variation of 2-pass transparency is used to reduce depth-order visual artifacts.

It is assumed that data contains some concentrated high values out of a broader field of low values. In this case, a set of isosurfaces will "nest" like onion-skins around the high value area. The onion is then sliced in half parallel to the viewer (using culling modes), into front and back halves. The back half is rendered first, in outside to inside order (accending isosurface levels). Then the front half is rendered in reverse order, from inside out. In this way all transparent skins of the onion are rendered in depth order. This method may not work on every data set. If you have a data set with small clusters of low values within a general field of high values, try reversing the data before hand using "data_math".

Because this module generates N-isosurfaces plus secondary GDobject references to them, it can easily generate a huge amount of geomety for the viewer. Please be patient and carefully select the parameters on smaller data sets first.

The color of each isosurface shell may be uniquely colored. By default, it uses a single range linear colormap to make color assigments. The values may be altered by connecting the "colormap_editor" and adding additional break points. Only the top group object at the output port may be used to edit colors.

The transparency of the whole system of isosurfaces is controlled using a module slider parameter rather than the Object editor. The same value may be applied to all isosurfaces, or they can be ramped. If ramp mode is on, then the range delta slider is active and controls the variation from the base transparency value as applied across the group.

User Macros

One main user macro is provided with this project:

isosurface_nesting

Performs the complete multiple-isosurface nesting operations with full user-interface control and simple to use macro packaging.

Input Ports

in_field

Field data to be used as input the isonest process. The input data can be any standard field data, matching "Mesh+Node_Data", where the node data contains at least one scalar component.

Output Ports

obj

Directly renderable output object that can be displayed in a 3D viewer.  This output is a link to a GroupObject that contains a Dynamically created set of subobjects. This top group object may also be used to edit the colormap.

Parameters

num_component

Radio list to select from the list of available data components in the input field to use in application of the isosurface functions.

num_levels

Sets the number of isosurfaces to generate in the nested structure. Default is 3, default slider max is 8.

min

Sets the minimum value used for the first isosurface using a slider.

max

Sets the maximum data value used for the last isosurface in the sequence using a slider.

transparency

Sets the overall group transparency level. If Transparency Progessive Ramp mode is off, this value is applied directly to all isosurfaces using the slider.

trans_ramp

This toggle mode if off, allows a single transparency value to be used on all surfaces. If on, it can provide better visual clarity by having lower isosurface value shells (those most likely to be on the outside of the nest) to lower values, while those at the heart of the onion have higher values (more opaque).

ramp_delta

This slider is active in Progressive Ramp mode. The value of this slider is used to control the range of transparency values across the nested structure, controlling the overall range of variation. The main transparency control above is used as the center point, with the range split +/- above and below this value. A range value of zero is identical to ramp mode off. The default is 0.3.

Utility Macros

The low-level modules used during the implementation of Isonest may also be of interest. The "Group Swap" module takes an array of GDobjects and generates a new list referencing the first but in reverse order. This module can also be wrapped with any group[] data structure for other array-based applications.

The "dmap2col" module takes a list of values, a DataMap as input, and produces an array of RGB float values representing the color assignments.

The "IsonestFunc" is a fully functional lower-level macro that performs all calculations but has no user interface.

The macro "fld2dmap" takes a field as input and creates a simple linear-range datamap referencing the input data range.

Files

iac_proj/isonest/isonmacs.v contains the V definitions of the isonest_local_UI and isonest  macros, as well as utility modules mentioned above.

iac_proj/isonest/isonmods.v contains the V definitions of the group swap and dmap2color  utility modules mentioned above.

iac_proj/isonest/isonapps.v contains the example applications.

Example

Four example applications are provided with this project. The first (IsonestTestNoUI) shows how to use the lower-level macro directly without any user interface. In this case parameters can be set directly in the parameter block using the network editor. The next application (IsonestEx1) shows 5 isosurfaces nested to show the structure of hydrogen atom electron density field (hydrogen.dat). The next application (IsonestEx2) shows the meteorological dataset (water.fld) of water vapour content. The last example (IsonestEx3) shows the application of Isonest to FEA (Finite Element Analysis) results with the X-axis stress in a tuning-fork shown as a series of transparent nested isosurfaces on unstructured 3D elements.

Example images from the above application networks are available:

Other Notes

This project contains two procedural code methods and hence does  require compiling before use. By default these are compiled into the express process for performance, but may be changed to the user process by editing the V files.

Author

Ian Curington, AVS Inc.

Modifications

Ma YingLiang,
Manchester Visualization Centre

Contact

International AVS Centre
Manchester Visualization Centre
Manchester Computing
University of Manchester
Oxford Road
Manchester
United Kingdom
M13 9PL