Programming Assignment #7: Surface Optimization

After having gained some hands-on exposure to splines and subdivision curves and surfaces,
in this final programming assignment, you will be exposed to the process of surface optimization.
We will use Brakke's Surface Evolver for this purpose.

First, down-load Brakke's Surface Evolver and play with some of the supplied examples,
so that you get a feel how all this works.

In this assignment, we will minimize the squared mean curvature,
so you will have to turn off the default surface tension energy.
Here are two examples done by Seth Cooper for a torus and a genus-3 surface.
Remember, that unlike SLIDE, the facets in these files are defined by their surrounding edges;
when you see a minus sign, it means that that facet uses the edge in the opposite way from which is has been defined.
"s" will turn on graphics, "q" will quit graphics mode; and "gogo" will execute the predefined script.
Watch those two polyhedra converge to the expected shapes presented in the paper by Hsu et al.

Next, convert your genus-4object into the xxx.fe format.
One way to do that is to save your coarse SLIDE object in the YOURFILE.sif format.
This is a hierarchically flattened triangle mesh that preserves connectivity information.
Stripping a way the header lines before the list of vertices,
as well as eliminating some unnecessary parentheses, should give you a simple file
that can easily be enhanced into a xxx.fe file with a text editor or a with a little script.

Through the generosity of  Seth Cooper  this process has been made easy.
He has provided a good conversion utility in the folder:
http://www.cs.berkeley.edu/~sequin/CS284/CODE/tofe/
In YOURFILE.sif, strip out all the extraneous information,
except the naked vertex specifications and the face listings.
These lists should be separated and terminated with a "==="
as in the examples provided:  cube.txt and genus3.txt
Now run the program:  "tofe.exe YOURFILE.txt"
and this will generate a usable  "YOURFILE.fe"
Seth also provided his source code if you have needs for a somewhat different utility.

Now run your converted object through the curvature minimization process
and watch it evolve!
Play with optimization (gN), refinement (r), equi-angulation (u), vertex averaging (V),
until it behaves properly and you obtain smooth shapes and stable behavior.
You may have to vary your SLIDE parameter settings to get good behavior,
i.e., make "arms" shorter and fatter to prevent pinch-off.
You should avoid sharp protruding corners (pointier than a cube corner),
as they may never want to smooth out.
You may even try to run one level of subdivision in SLIDE, before you convert
your file to the Evolver format, and smooth out some extreme corners in this way.

For more Evolver commands see manual -- But there is quite a lot of documentation,
so you might find these two links about the commands to be useful:
http://www.susqu.edu/facstaff/b/brakke/evolver/html/single.htm
http://www.susqu.edu/facstaff/b/brakke/evolver/html/graphics.htm#graphics%20commands

Now run the evolver untill you observe to a smooth and more or less stable shape.
Save your ITWORKS.fe file with your successful script included as a "gogo" command.
Make sure your good results are reproduced if you just start this file an type "gogo".
Write a brief report of what you did and what you observed.
E-mail me your ITWORKS.fe file and your report.

Start this project soon -- so you can ask for help if there are difficulties!

DUE  Friday, Nov. 21, 2003, Midnight.

OPTIONAL:
This process will probably conserve any original symmetry contained in your file.
If you feel ambitious, deliberately disturb this symmetry (fairly substsantially)
and watch the evolver possibly slide into a new and deeper energy minimum.
What is the absolut energy minimum that you can achieve. ?

SOME EXAMPLES OF USING THE EVOLVER


PS.
If you rather optimize a different object of similar complexity -- come talk to me.
 
PS.
You can also produce SLIDE output from the evolver:

  1. Place the file slide.cmd into your working directory
  2. Include the following line in your evolver file:
    read "slide.cmd"
  3. Then at the appropriate moment, type the command:
    slide >> "outputfile"

-- This will generate a complete mesh specifications in slide format which can then be read into a slide file that includes offsetting etc ...