Three new modules are available to
give improved performance when handling large unstructured data sets.
Two modules are direct replacements for the existing IsosurfacePyr and
SlicePyr modules; the third is a utility module which creates shared
data objects for use with both these modules.
The acceleration is achieved by updating the algorithms used from a brute
force approach, where every Pyramid element has to be inspected, to
using a search tree to select only those Pyramid elements which are
required. Each Pyramid structure requires its own search tree which obviously
must be calculated before use.
Having computed the search tree, however, it can then be used repeatedly in
the generation of many isosurfaces , or many slices. Hence the overall
cost is quite low.
The two visualization techniques require different tree structures for
acceleration. The isosurface algorithm uses a tree constructed around the
values of one of its data variables and hence is called a "Value Tree".
The slicing algorithm requires a tree constructed around the spatial
arrangement of the Pyramid elements in relation to the orientation of the
slice plane. This tree is called a "Volume Tree".
The sections below give more details of the individual modules.
|
This module offers significant performance improvements over the original
for large data sets. Diagram 1 shows a graph of time comparisons between the
original module and this new module as the number of pyramid cells increases.
The graph shows the time taken to generate 10 isosurfaces of the same variable: line 1 is the original IsosurfacePyr module available in the current release
of IRIS Explorer; line 2 shows the time taken for the new module without
using the search tree, the
|
Diagram 1
Click to enlarge
|
|
performance gains come from basic improvements of the original code;
line 3 shows the performance of the new module using the search tree, and
includes the time taken to compute the tree.
This IsosurfacePyr module also offers new features over the original.
If the pyramid contains more than one data variable at a node, it allows the
user to select which data variable to use to construct the surface. If a
colormap is attached, it allows the surface to be constructed from one
data variable and coloured by another. The min/max range of the threshold
widget is automatically set to the min and max values of the data. If the
data set is very large, then the module allows the output of partially
completed surfaces as they are created, rather than having to wait for the
whole surface to be complete.
|
|
The SlicePyr module gives improved performance over the original,
even more so when used in the correct fashion. Since the Volume Tree is
related to
the orientation of the slicing plane, if that orientation is altered then the
tree must be re-computed. However, many slices may be quickly calculated using
the same tree if they are parallel to the plane used to construct the tree.
The mechanism for generating slices in IRIS
Explorer is to rotate a plane around a point using the TransformGen module so
altering its orientation.
This is clearly at odds with the aim of improved performance using this
technique since new slices will always require a re-computation of the tree,
Also, generating slices around a point is
not the best way of investigating data using slicing planes. It is more
productive to first set the orientation of the plane, and then generate
successive slices parallel to this plane.
To allow data to be investigated in this fashion, this new slicing
module attempts to promote an alternative style of working with slices in
IRIS Explorer.
The user sets the distance of the slice from the origin (along a direction orthogonal to the slice plane), by adjusting a distance slider.
The min/max distances
available are computed and set as the min and max values of the slider.
Additionally, the orientation of the plane can be set in different ways.
Firstly, the module offers the choice of the basic axially aligned planes,
computing the correct transformation matrix without
the need for a TransformGen module. Using one of these three planes, the user
just uses the distance slider to move the slice quickly without the need to
re-compute the tree. Secondly, an arbitrary plane
can be set by taking the input from a TransformGen module and a suitable
tree calculated along with the min/max distances along the normal
to that plane that remain within the bounds of the data set.
The user can then quickly generate slices by moving the distance slider.
Additional functionality is also offered by this module. As with the
IsosurfacePyr module, if there is more than 1 data value at each node, then the
user can select which data value to use for colouring the slice. Also, if
the data set is very large then partially completed slices can be output to
the Render module while it works its way through the data so the user does
not have to wait until the complete surface has been calculated. As mentioned
above, certain planes can be produced without the need for a TransformGen
module.
|
|
The new BuildPyrTree module is designed to aid efficiency when using large
data sets. If a number of isosurfaces of the same surface
variable are required, then rather than each module building and storing
its own Value Tree, shared resources can be made. Diagram 2
illustrates how using this module with shared memory allows just a single
instance of
|
Diagram 2
Click to enlarge
|
|
the Value Tree to be used to create multiple isosurfaces.
Similarly, in conjunction with multiple SlicePyr modules, a single Volume Tree
can be used to accelerate the creation of multiple parallel slices through
the data.
|
|
|