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)

User Interface: Main Window

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...)

User Interface: Viewer

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.

Key

Function

C

Changes the currently active vertex (in Edit Mode)

E

Toggles between Edit Mode and Normal Mode

H

Turns specular light on/off (on by default)

L

Toggle drawing of triangle edges (off by default)

P

Enter pick mode.  Clicking on a triangle will select it and return you to Normal Mode

S

Toggles between smoothing modes.  There are 3 levels of smoothing normals. (0 by default)

T

Turns texture mapping on/off

0

Screen capture

Applications: Multiresolution Editing

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