Multiresolution Signal Processing
for Meshes: Applications
Ankit Patel (ankit@post.harvard.edu)
Zubin Teja (teja@fas.harvard.edu)
Mark Tonkelowitz (mtonkel@fas.harvard.edu)
Introduction
Our final project is based on the paper "Multiresolution Signal
Processing for Meshes" by Igor
Guskov. Here we present two applications for his toolbox of methods: (1)
Multiresolution editing, and (2) Texture Coordinate Generation. In addition, we
also analyse several possible edge-collapse schemes, comparing their results,
and assessing the importance/influence of such schemes to Guskov's
multiresolution mesh processing paradigm.
Obtaining the Program
Source Code: http://www.mit.edu/~ankit/cs276r/FinalProject.zip
When you unpack the executables, you
will notice that there are three different versions of the Beda program.
Each uses a different edge collapse scheme, affecting the performance of
Guskov's multi-resolution scheme in different ways. (More on this later)

When you first launch the Beda program, the above form
appears. Each of the buttons works as follows:
Open File - open a mesh
data file, initializes multiresolution, and displays the mesh at its finest
resolution. The Beda program can read Hoppe .m files and ASCII Open
inventor .iv files.
Open Texture - this button can only be used once a mesh has been
loaded. It will map a Windows Bitmap .bmp file onto the current mesh
(more on this later). Note: in order to be a valid texture, an image must
be (1) 24-bit color and (2) square with the number of pixels being a power of
2.
Exit - quits the Beda program, destroying any open mesh viewers.
Transform - each of the six
sliders represents a different frequency, with sliders on the left representing
low frequencies and sliders on the right representing high frequencies.
Adjusting a slider and pressing Update will redraw the
mesh after applying the appropriate Guskov transformation.
Reset - sets all the sliders back to their default positions and redraws the
mesh.
Coarser - performs a
number of half-edge collapses proportional to the size of the mesh and redraws
the model.
Finer - performs a number of subdivisions proportional to the size of the mesh
and redraws the model. If you are in Edit Mode, this button will also apply any
transformations you may have made (multiresolution edits, frequency
enhancements, etc...)

Although the viewer window looks quite sparse, it is quite
powerful. Much like the CS275 viewer, holding down the left mouse button
and dragging will rotate the image, while doing the same with the right mouse
button will zoom in and out. Holding down shift while left clicking
enables arcball, while holding down Ctrl while right clicking enables you to
pan in all directions.
In addition, there are numerous keyboard shortcuts, some
of which will be explained in more detail later.



The multiresolution capabilities of Guskov's signal
processing approach allow for powerful editing tools. Above are images of
the original bunny, a coarse view of the original bunny, and the results of
shifting the topmost triangle in the coarse view.
We have implemented a simple editing mechanism that we
encourage you to try out. Editing can be done at any coarseness level,
but for the most dramatic results we recommend downsampling to as coarse a
level as possible.
To perform a multiresolution edit:
1. Apply all frequency enhancements you wish to use BEFORE
attempting an edit. This is because if the Update button is pressed
after a multiresolution edit, the process used to compute the new model will
destroy your edit.
2. Press the Coarser button until you have reached a sufficiently low
detailed version of your mesh that still maintains the overall shape of the
finer image. (Depending on which edge-collapse scheme you are using, the
number of times you will have to do this can vary.)
3. After making the viewer the active window, press P to enter Pick
Mode. Click on the triangle you wish to edit. This will return you
to Normal Mode.
4. Press E to enter Edit Mode. Holding down the left mouse button
and dragging will adjust the X and Y coordinates of the currently selected
vertex of the picked face. Holding down the right mouse button and
dragging will adjust the Z coordinate. To change the currently selected
vertex, press C.
5. Upsample back to the finest resolution by pressing Finer. Note:
You MUST be in Edit mode in order for the proper transformations to take
place. Upsampling outside of Edit mode will not apply any transformations
to vertices surrounding the edited point, often leaving you with a fine mesh
with a little spike coming out of it.
Applications: Texture Coordinate Generation
Figure 1 Figure
2

Figure
3 Figure
4
Guskov mentions in his paper that one
of the key uses of subdivision is to build scalar functions defined on a
manifold. The basic idea is to assign
values to the mesh at a coarse level, when there are only a few triangles, and
then use the subdivision scheme to build smooth functions that are defined on
finer levels. One of the main
applications of this sort of scheme is texture coordinate generation. The idea is to begin with user supplied
texture coordinates at a coarse level.
Because there are not many triangles at a coarse level, this process can
be carried out manually (i.e. assigning the vertices in the mesh coordinates
from the desired texture), or it can be simulated via a simple assignment such
as a cylindrical or spherical projection.
Then, these texture coordinates can be subdivided to the finest level
using the same subdivision operator that is used for the vertices, assuming
that the texture coordinates for the vertices in the surrounding neighborhood
are from the same texture.
Above we have several screen shots
portraying our implementation of texture coordinate generation using Guskov’s
mesh subdivision algorithm. Figure 1
shows the finest level Guskov subdivision of the popular “bunny” mesh. Figure 2 shows the simplification of this
mesh to a much coarser level. Figure 3
shows the mapping of the wood texture onto the coarse mesh using a cylindrical
projection since the bunny is fairly round at this level. Figure 4 shows the result when the original
finest level bunny mesh is reconstructed using Guskov’s algorithm and the
concurrent subdivision of the texture coordinates. You can see that although the geometry has
changed drastically due to the introduction of detail and the uneven triangle
sizes, the final texture varies smoothly over the surface.
To perform texture coordinate generation:
1. Simplify the mesh to a relatively coarse level (where the
triangles are visible to the naked eye) by pressing the Coarser button.
2. Now, press the Open Texture button. This will bring up a file open dialog
box. Pick a 24-bit bitmap file. (we have
included the two textures used in the examples, wood.bmp and test.bmp in the
demo folder)
3. Now you should see the texture applied to the coarse mesh
(if not, then you have turned off texture mapping and you need to press T). Press the Finer button to reconstruct
the finest level mesh, and watch as the texture coordinates are subdivided in
the same manner as the vertices, resulting in a smooth variation.
Figures 5 and 6 are once again before and after pictures
of a coarse level bunny with the checkerboard texture (test.bmp). Figure 5 shows the texture assigned to the
bunny at a coarse level, and Figure 6 shows the reconstruction of the finer
level mesh and the smooth variation of the texture. This example is similar to Figure 12 in
Guskov’s paper.
Figure 5 Figure
6
Analysis: Different Error Metrics
To address the problem of creating multiresolution signal
processing algorithms, we need the idea of downsampling and upsampling. In
image processing, for example, downsampling is simply removing every other
row/column from the image and upsampling is the inverse operation. In mesh
processing, however, the situation is a bit more complex, although there is
much research in the field. Here, Guskov uses Hoppe’s Progressive Mesh (PM)
Approach, wherein the addition/removal of a single vertex (via a half-edge
collapse) is considered an up/downsampling step.
But what does it mean for certain edges to be “high
frequency” and others “low frequency”? In other words, when we define our
ordering on the set of all edges in a mesh, what governs whether a specific
edge is considered part of the high/low frequency detail of the image? In our
case, Guskov has chosen a edge priority criterion that is a combination of a
quadric error metric proposed by Garland and Heckbert plus a term that favors
the removal of longer edges.
The choice of a priority criterion is very important
because it assigns the fundamental meaning of frequency to a certain subset of
edges. Here we test 3 different schemes, and compare results. The schemes are
described below.
Priority Criterions/Error Metrics
1. Random: Edges are given uniformly
random priorities so that each edge is equally likely to be chosen for
removal/addition. In a sense, this scheme represents a situation where there is
no hierarchy, no “multiresolution” at all since there is no real ordering.
“High/low frequency” doesn’t mean anything. [beda – Random.exe]
2. Edge Length: Edges are given
priority based solely on their length, not considering any other geometric
properties. This scheme is probably the most intuitive approach, although it
might not be intrinsically the best. [beda – Edge Length.exe]
3. Garland-Heckbert: Probably the
closest to the “intrinsically correct” scheme, Garland-Heckbert allows us to
choose half-edges whose removal would result in the smallest total distance
from all of the faces adjacent to that edge. There is a nifty matrix
representation utilized to keep track of all the faces (planes) that touch a
vertex and that allows for fast calculation of the error metric (vertex to
planes distance). [beda – Default.exe]
4. Garland-Heckbert + Edge Length: In an attempt to favor the removal of longer edges, Guskov uses this
scheme, a simple linear additive combination of schemes 3 and 4 above, with a
weighting coefficient that gives the relative importance of the two methods. We
omit examples from this scheme because they are not noticeably different from
those of scheme 3 above. [no executable]
Here are some figures from these 3 schemes. The original
and coarse versions (20 presses of the “Coarser” button) of both the cactus and
rabbit meshes are shown below.
Original Cactus Random

Edge Length Garland-Heckert

There are clear differences between the three versions.
The Random version has very thin wedges/slivers at the top, since it probably
removed some coarser as well as finer frequencies due to its “blindness” to
level of detail. The middle segment of the Random cactus is also much thinner;
thus coarser details are not necessarily preserved. As for the Edge Length
cactus, it preserves much more coarse-level detail than the Random one, keeping
the middle and upper-right segments much thicker. The upper-left segment,
however, seems thin and wedge-like, just like in the Random cactus. The third
example, Garland-Heckbert, preserves the coarser level detail very well,
keeping all three segments of the cactus free of any wedge/sliver-like
features. This is what we like.
Since the cactus is a smaller mesh, perhaps the
differences in the three schemes aren’t as clear. Here is larger mesh, but keep
in mind that the rabbit mesh is more uniform and spherical than the cactus. It
lacks the narrow, extending segments that the cactus has and so is not as
vulnerable to wedge/sliver-like features. Nonetheless, we present it as an
example of a mesh with a large amount of faces/detail.
Original Rabbit Random

Edge Length Garland-Heckbert
The Random rabbit is clearly jagged and it is less clear
what the general shape of the rabbit is from this version. The Edge Length
version is better, but it also has many “inversions” in the sense that the
surface of the rabbit changes concavity many times, from concave to convex and
vice versa. Also, the edge lengths are much smaller than the last version,
Garland-Heckbert, which preserves the general coarser level shape with a much
smoother geometry. Most of the faces in the last version span the entire
rabbit, front to back, and the geometry is mostly convex except for 1 inversion
(lower-middle, representing the hind leg). Again, this is what we like.
Hence, we conclude that the choice of priority criterion
is very important to Guskov’s Multiresolution signal processing “toolbox” for
meshes. The Random edge-priority is clearly bad, as we could’ve easily guessed.
The more intuitive notion of representing the notion of frequency via edge
length has some merit, but still results in some unwanted artifacts, such as
wedges/slivers and concavity inversions. The more intrinsic approach,
Garland-Heckbert, seems to provide the best quality coarse level meshes,
generally free of thin wedges/slivers, and minimizing the number of concavity
changes on the surface (this is directly due to the fact that GH minimizes the
total vertex-to-face/plane distances upon half-edge collapse). Thus, when
considering multiresolution signal processing algorithms for meshes, we must be
careful as to how we assign/interpret the notion of frequency.
Last Updated: October 29, 2003