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.
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 |
|
Name | Type | Description | |
|
|||
in_field | Field | Data that should be displayed, structured or unstructured, containing at least one scalar component. | |
|
Name | Type | Description | |
|
|||
obj | GDobject | Directly renderable object output (group). Colormap editor may be connected to this port to change isonest color assignments. | |
|
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.
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.
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.
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.
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.
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.
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.
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:
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.
Ian Curington, AVS Inc.
Ma YingLiang, Manchester Visualization Centre
International AVS Centre Manchester Visualization Centre Manchester Computing University of Manchester Oxford Road Manchester United Kingdom M13 9PL