You are on page 1of 38

Computational Methods

in Physics
PHYS 3437
Dr Rob Thacker
Dept of Astronomy & Physics (MM-301C)
thacker@ap.smu.ca
Today’s Lecture
 Visualization
 More on Opendx
 3d visualization methods
 Isosurfaces
 Volume rendering
 Making movies
 makempeg script & the Berkeley mpeg encoder
 References:
 Some overheads borrowed from a presentations by Tamara
Munzner, Gordon Kindlmann
Getting started with Opendx
 Using Import Data is
perhaps the simplest way to
get started with Opendx
 Selecting it will take you to
the Data Prompter
Data Prompter
 The data prompter will
create a .general file
which the import
module can read
 We’ll look at importing
gridded data
 Will take many different
types
 Let’s look at the simplest
– a regular grid
Using an engineering example in this case

Datafile description

Once the data is described, use “save as” in the


File menu to save the general description used by dx
Simplest tool

 Default viz option will allow


you to see the data immediately
 Ensure everything loaded in OK
Note on Windows version
 The windows version has problems with spaces in file names
 Don’t save files with names such as
 C:\Programs and something\myfiles\and so on\
 Helpful to set up an Opendx directory right at the top of the
directory tree
 e.g. C:\Opendx
 Also, the default viewer in the data prompter did not work for
me
 But could just be my laptop running out of memory
 One of the drawbacks of Opendx is that it rapidly consumes memory
 A workstation dedicated to visualization usually needs ~2 GB or more of
memory
 Will exploit multiple processors though – good news!
 Everything else seems fine though, the VPE works without a problem
Checking data
 You can test that your loaded data is correct in
a couple of ways
 Try the test import button
Will give information about range and so forth

 Examine the data directly with the browse data


button
 Lastly, go directly to the visualization system
described on the previous page
 Unfortunately, if something is wrong it won’t tell you
much quantitative information about the problem
Creating a program
 The default visualization system
is useful, but most of the time
we’ll want to create our own
programs
 When we used the data
prompter we saved a description
of the file called fan.64_ascii
in fan.general
 We can load this into our own
program
 The next few overheads walk
through a simple 3d
visualization
Creating the visualization program
Open the program editor and expand the ALL listing
of modules, place fileselector, import, isosurface, image

Link by left clicking


on tab and then
drawing a line to
the other box

Now double
click on fileselector
Fileselector
 This will bring up a control panel into which you can type the
name of the .general file saved when using the data prompter
Executing the program

Select Execute Once


from the execute menu
Image output
 Running the
program will
produce an
isosurface
output
Interacting with the image
 Under
options
select the
view
control:

Select rotate under mode


Rotate the image
 Click and drag
on the image
with the mouse
to rotate
 It isn’t that
fast though
 Note the globe
is turned on by
selecting it in
the options
menu
Algorithms for 3d visualization
 A bit of background to the algorithms used in
3d visualization will explain why it is such a
computationally expensive process
 Look briefly at
 Isosurface rendering
 Playing with it in Opendx using the isosurface module
 Volume rendering methods
 Volume rendering is part of the Image module
Voxel data
 The analogy of a pixel in 2d is the voxel in 3d

 Field values are described at the vertices rather than


in the center
 Field values along the edges and internally can be
derived by a number of interpolation functions
Isosurface Extraction
 Which choose a fixed iso- 0 1 1 3 2
value
 Then need to extract out 1 3 6 6 3
the contour (surface in 3d)
corresponding to this 3 7 9 7 3
value
 The marching cubes 2 7 8 6 2
algorithm is the most
common method 1 2 3 4 3
 Patent has recently expired
on this algorithm Iso-value = 5
First step of Marching cubes
 Classify the voxel by the values at the vertices
 Each vertex is either
- outside the surface (> isovalue)
- inside the surface (<= isovalue)
10 10
Iso=9
5 5

10
8
Iso=7
8 8
=inside
=outside
Marching Cubes: Triangle Example

a c

b
Example Triangle configurations

 These 15 base examples can be used to derive the 2 8=256 total


configurations
Surface vs volume rendering
compared
Surface Rendering Volume Rendering
 2d surfaces are rendered within a  Entire volume can be rendered
3d space & object appears providing interior information
“solid”  data is not explicitly hidden
 Data must be converted into  Spatial data is mapped to a
geometrical primitives such as volume of RGBA values using a
triangles for rendering transfer function
 This process may lead to  This volume is rendered directly
information being lost or using a variety of techniques
disguised  Makes sense for objects with
 Makes sense for objects with a complex interior structure and no
solid surface solid boundaries
Improving on the earlier visual program

Add these new


modules

Set the opacity of


the 1st color module
to 0.3, for the second
0.7
New image is a combination of a
surface and a volume rendering
 Surface has
a reduced
opacity so
we can see
through it
 Interior
volume is
shown
using
different
colours for
different
field values
Volume render alone
Volume Rendering Pipeline
 Data volumes are used as input to the transfer
function, which produces a sample volume of colors
and opacities as output
 Sample volume is rendered to produce a final image

FRGBA(data)

data transfer sample rendering final


volume(s) function volume image
Transfer Functions (TF’s)
 RGB  Map data value to color and
opacity

f
RGB(f) (f)

Shading,
Compositing…
Human Tooth CT Gordon Kindlmann
Choosing transfer functions
 This is one of the black arts of visualization
 Need to know fundamental scales of variation in your
problem (linear? Logarithmic?)
 Opacity can’t be too high otherwise we can’t see
through
 If it’s too low we don’t perceive enough information
 Colours should be chosen in sympathy with the data
 Volume rendering generally doesn’t cope well with
too much high frequency data
Examples
Cutting out high values
Linear increase places too much has no effect
weight on mid range 

f
f
Sharply peaked to high opacity Moving to a lower value of
effectively gives a surface render f doesn’t help
 

f f
Gordon Kindlmann
Ray casting: one rendering
technique
 The sample volume must now be rendered
 Vast body of literature on different techniques
 Simplest idea is ray casting
(1) Send ensemble of rays through the system corresponding
to image pixels
(2) Interpolate values along each ray from grid
(3) Local gradient is calculated to estimate amount of light
reflected back to image
(4) Values are composited together from back to front

Image source: Wikipedia


Trilinear Interpolation
 What is the effect of interpolation on the volume rendered image? Could
choose nearest neighbour value, or linear interpolation
 Below is a comparison of nearest neighbour to trilinear
 The additional expense of the interpolation removes a significant amount
of noise in the final image
Michael Knapp

Nearest Neighbor Trilinear Interpolation


Multiple layers in volume rendering
 Example using a
tool called
“vfleet”
 Rendering of gas
density in one of
my simulations
 Transfer function
has been chosen
to pick out three
surfaces
 “See through”
isosurfaces
 Exactly the same
as having multiple
opaque
isosurfaces
Making movies
 Some toolkits (e.g. AVS) will make movies from a bunch of
frames (images) for you
 Opendx unfortunately doesn’t
 First step in making a movie manually is to create a series of
frames with a fixed naming convention
 e.g. frame.00001.gif, frame.00002.gif, frame.00003.gif
 From this series of frames a number of freely available tools
will compile them into a movie for you
 Most tools rely on some kind of UNIX script to do this
 I’ll give explicit details for the “makempeg” script
 This makes MPEG-1 standard movies which are lossless
 Fairly low compression ratio, but no bad rectangular artifacts
 Ideal for scientific viz.
Makempeg
 I will put this Unix driver script on the class website (if
you are interested)
 Rather dated now, but it works effectively
 You need two other packages
 Berkeley MPEG encoder (will also put on website)
 This is the program that creates (encodes) the movie from your images
 Compile this code, will create the “mpeg” executable
 netpbm image manipulation tools (can be installed in Linux)
 Need by the makempeg script to convert images into the format used by
the MPEG encoder
 Place the makempeg script and mpeg executable in the
same directory as your frames of name xxxx.yyyyy.ext
Running makempeg
 Example command:
 makempeg –fs 1 –fe 10 –fi 1 –base test –ext gif
 Will make a movie
 Starting at frame 1 (-fs)
 Ending at frame 10 (-fe)
 Increments between frames is 1 (-fi)
 Name of files is test.????.gif
 -base = base name
 -ext = filename extension (could be jpg, tiff…)
 Script expects 4 digit number for each frame
 i.e. test.0001.gif test.0002.gif test.0003.gif
 Script will convert to the “YUV” format and then launch the encoder
 Quite quick – may be up to 2 minutes for a larger movie, much faster for
smaller
Example movie made with
makempeg
Summary
 Use the data prompter to create the description file
for Opendx data
 Construct visual programs quickly and easily by
linking modules together in the visual program editor
 Isosurface and volume rendering techniques are both
supported by Opendx
 Selecting suitable transfer functions is non-trivial and takes
time
 Lastly, movies can be made quickly and easily from a
series of frames using a large number of freely
available tools
 I’ve provided codes for one method on the website
Student presentations
 No lectures March 24th, 26th, 31st
April 2nd April 7th
Mike Hiland Michael Palmer
Ashley Campbell Nick Presse
Glen Hodge Cristina Collicott
Masaki Uchida

You might also like