Mesh Compression using Wavelets on a Discrete Grid

So the basic idea in this project is the following question: Why don't people look at meshes like they look at images when trying to compress them? Can't you just discretely sample the mesh on a grid using some sort of scheme and use a three dimensional Wavelet Transform on the result?

Of course, there's some problems that need looking into for this to work.

In this project, I looked at these problems, and came up with some ideas to see how feasible this method would be. Here is my proposal for this project in Postscript format.

Below are some images relating to this...

Mesh Reconstruction

So, my first step was to come up with a simple sampling scheme and a reconstruction scheme, as those were the most important step to see the results for later sections. Thus far, my sampling schemes assume a closed surface with a definite inside & outside. However, this is easily changed I believe. My first scheme was very simple, a simple T/F for if the sample point was inside the mesh or not. My second scheme stored a distance to the surface from the point.

NOTE: I didn't finish my code for the triangle reconstructions before taking these images. That means there are some holes in the meshes (but the "chewed" ear is an effect of grid spacing).


The original mesh (a simplified Stanford Bunny, 10000 faces)

128x128x128 samples
A cube around each inside point

128x128x128 samples
Connect the outer surface of inside points

128x128x128 samples
Connect the surface using distance info

64x64x64 samples
A cube around each inside point

64x64x64 samples
Connect the outer surface of inside points

64x64x64 samples
Connect the surface using distance info

32x32x32 samples
A cube around each inside point

32x32x32 samples
Connect the outer surface of inside points

32x32x32 samples
Connect the surface using distance info

16x16x16 samples
A cube around each inside point

16x16x16 samples
Connect the outer surface of inside points

16x16x16 samples
Connect the surface using distance info

Below are some results from compressing the above bunnies. Below, I used the 2nd triangle reconstruction method (on the right above), and I used the distance from the surface sampling method, which gives data sizes of 16,777,312 bytes for the 128x128x128 sampled grid, 2,097,245 bytes for the 64x64x64 sampled grid, and 262,237 bytes for the 32x32x32 sampled grid. Once again, there are some holes in the mesh relating to the fact that I didn't finish coding the trianglulation method for all cases.

Each row has the same compression parameter, just for different sized meshes. And the size below each image is the compressed grid's file size.

32x32x32 samples

64x64x64 samples

128x128x128 samples


323 bytes

666 bytes

1,466 bytes

895 bytes

2,083 bytes

4,674 bytes

1,399 bytes

3,192 bytes

9,169 bytes

2,942 bytes

5,692 bytes

15,945 bytes

4,963 bytes

12,031 bytes

26,833 bytes

6,507 bytes

16,797 bytes

44,677 bytes

7,594 bytes

20,768 bytes

58,008 bytes

8,463 bytes

24,006 bytes

68,138 bytes

10,072 bytes

29,966 bytes

89,589 bytes

11,308 bytes

34,479 bytes

105,997 bytes

19,355 bytes

63,194 bytes

209,754 bytes

25,651 bytes

81,766 bytes

258,983 bytes

Here's another, more complex object and the results for my method.


The original object
(1+ million triangles,
roughly 50 MB)

Sampled on a 256x256x256 grid
(134 MB), used to compress
for results below

~1.5 kilobytes

~9 kilobytes

~14 kilobytes

~22 kilobytes

~50 kilobytes

~143 kilobytes

~180 kilobytes

~500 kilobytes

The dragon has fewer triangles, but has lots of interesting detail that can be easily lost.


The original object
( ~875,000 triangles, 33 MB )

Sampled on a 128x128x128 grid
(16 MB), used to compress for
results below

Sampled on a 128x128x128 grid
with 3 values per point (50 MB)

~1 kilobytes

~7 kilobytes

~13 kilobytes

~29 kilobytes

~52 kilobytes

~80 kilobytes


Last Modified: Sunday, April 22, 2001

Chris Wyman (wyman@cs.utah.edu)