Date post: | 22-Dec-2015 |
Category: |
Documents |
View: | 218 times |
Download: | 1 times |
Geometric Compression Through Topological Surgery
Gabriel Taubin (IBM)
Jarek Rossignac (Georgia Tech)
Problem Statement
Want to send mesh across network– Compress Losslessly
Want to save CPU time– Decompress on load
Want to get triangle strips– Save on vertex reads + transforms
Basic Idea
Use properties of planar graphs to compress– Extend to graphs 3d meshes using hacks
Lossily drop bits left & right out of vertex position since vertex pos dominates size– Use reasonably good predictor to “guess”
location
Compressing Topology
QuickTime™ and aTIFF (Uncompressed) decompressor
are needed to see this picture.
Start with meshes having Euler Characteristic 2 (Deformable to sphere)
Compressing Topology
QuickTime™ and aTIFF (Uncompressed) decompressor
are needed to see this picture.
QuickTime™ and aTIFF (Uncompressed) decompressor
are needed to see this picture.
Want to cut it into a planar mesh with lots of long triangle strips
Compressing Topology
QuickTime™ and aTIFF (Uncompressed) decompressor
are needed to see this picture.QuickTime™ and a
TIFF (Uncompressed) decompressorare needed to see this picture.
A MST on vertices indicates some interesting cut lines
Compressing Topology
QuickTime™ and aTIFF (Uncompressed) decompressor
are needed to see this picture.QuickTime™ and a
TIFF (Uncompressed) decompressorare needed to see this picture.
QuickTime™ and aTIFF (Uncompressed) decompressor
are needed to see this picture.
Notice how the edge boundary graph has 2 edges for each MST cut line
Compressing Topology
QuickTime™ and aTIFF (Uncompressed) decompressor
are needed to see this picture.
QuickTime™ and aTIFF (Uncompressed) decompressor
are needed to see this picture.
Splaying our faithful Euler-2 characteristic mesh looks as follows
Compressing Topology
QuickTime™ and aTIFF (Uncompressed) decompressor
are needed to see this picture.
QuickTime™ and aTIFF (Uncompressed) decompressor
are needed to see this picture.
Note that in the flattened shape a binary graph can represent edges
Marching edge
Compressing Topology
If we save these two graphs & 1 bit per marching edge graph as to how it fits to MST, we’ve got topology of Euler-2 meshes
QuickTime™ and aTIFF (Uncompressed) decompressor
are needed to see this picture.
QuickTime™ and aTIFF (Uncompressed) decompressor
are needed to see this picture.
QuickTime™ and aTIFF (Uncompressed) decompressor
are needed to see this picture.
Not all cuts are equal
QuickTime™ and aTIFF (Uncompressed) decompressor
are needed to see this picture.
QuickTime™ and aTIFF (Uncompressed) decompressor
are needed to see this picture.
But some will earn you a prize from l’Institut Paul Bocuse in Lyons
Others…QuickTime™ and a
TIFF (Uncompressed) decompressorare needed to see this picture.
QuickTime™ and aTIFF (Uncompressed) decompressor
are needed to see this picture.
Not all cuts are equal
QuickTime™ and aTIFF (Uncompressed) decompressor
are needed to see this picture.
QuickTime™ and aTIFF (Uncompressed) decompressor
are needed to see this picture.
QuickTime™ and aTIFF (Uncompressed) decompressor
are needed to see this picture.
QuickTime™ and aTIFF (Uncompressed) decompressor
are needed to see this picture.
Why cuts are not equal
Vertex edge graph stored as:– Integer: runlength– Bit: leaf?– Bit: more runs starting from here?
Longer triangle strips– Amortize-out 2 starting vertices– Faster rendering
1st cut: spanning tree construction
Use edge length and run MST algorithm
Disaster with a capital D
QuickTime™ and aTIFF (Uncompressed) decompressor
are needed to see this picture.
Actual attempt to make MST
Distance from edge midpoint to tree root
QuickTime™ and aTIFF (Uncompressed) decompressor
are needed to see this picture.
QuickTime™ and aTIFF (Uncompressed) decompressor
are needed to see this picture.QuickTime™ and a
TIFF (Uncompressed) decompressorare needed to see this picture.
Modification to improve result
2 pass algorithm where only non-branching edges are allowed on 1st pass
Concentric Rings Method
Choose a root, order by concentric rings
QuickTime™ and aTIFF (Uncompressed) decompressor
are needed to see this picture.
QuickTime™ and aTIFF (Uncompressed) decompressor
are needed to see this picture.
Connect concentric layers
with triangle that minimize branches
QuickTime™ and aTIFF (Uncompressed) decompressor
are needed to see this picture.
QuickTime™ and aTIFF (Uncompressed) decompressor
are needed to see this picture.
Final Mesh
QuickTime™ and aTIFF (Uncompressed) decompressor
are needed to see this picture.
QuickTime™ and aTIFF (Uncompressed) decompressor
are needed to see this picture.
QuickTime™ and aTIFF (Uncompressed) decompressor
are needed to see this picture.
Concentric Rings applied to bone
Generating concentric rings makes for much longer triangle runs
QuickTime™ and aTIFF (Uncompressed) decompressor
are needed to see this picture.
Encoding Vertex Position
Vertex Spanning Tree offers mechanism for vertex position prediction
Build a prediction function based on samples from parents in run
QuickTime™ and aTIFF (Uncompressed) decompressor
are needed to see this picture.
A
B
B=f(A)+B
C
C=f(A,B)+c
D
D=f(A,B,C)+D
E
E=f(A,B,C,D)+E
FF=f(A,B,C,D,E)+F
Store per-vertex fixed-point delta from given predictorG
G=f(A,B,C,D)+G
H
H=f(A,B,C,D,G)+H
Vertex Position Predictor
Assume a linear predictorf(v0…vK)=b0v0+…+bkvk
Thus estimate b0…bk by minimizing the least square error over all vertices of depth n>k for given model
Dealing with real meshes
Jump Edges– Ugly hack to deal with non-spheres– Read paper for “juicy” details
Making sure that edges line up after quantization + prediction
Results
They don’t all add up
Feels like they use the red herring called – ASCII VRML– To boost their results
(sometimes literally)
QuickTime™ and aTIFF (Uncompressed) decompressor
are needed to see this picture.
Results: (what a) Crock
About as lossless as a spam stock investment
QuickTime™ and aTIFF (Uncompressed) decompressor
are needed to see this picture.
original 12 bits per coord
10 bits per coord
8 bits per coord
Results: Crocodile
(a) (b) (c) (d)
Bits/tri 5.00 4.23 2.77 2.16
Vertex runs 1292 1528 80 168
Tri runs 2388 1612 1340 526
Bits/v-run 5 4 10 8
Bits/t-run 5 5 6 8
QuickTime™ and aTIFF (Uncompressed) decompressor
are needed to see this picture.
Results:Architecture
QuickTime™ and aTIFF (Uncompressed) decompressor
are needed to see this picture.
Results:Architecture
QuickTime™ and aTIFF (Uncompressed) decompressor
are needed to see this picture.
17332 vertices x 12+34404 triangles x 12 = 248,832
80,056 x 19.63 = 1,571,49980,056 /0.1658 = 482,864
Their stated results
Parsing a file in compressed binary is 20x faster than in ascii– So is transcribing it from stone tablets
Writing uncompressed binary is 30x faster than writing in ascii– Are they using printf or something?!– Unless you’re writing aligned data, this bitwise
stuff should kill your perf if you understand what you are doing, and it should be no slower than 2x-4x (ASCII is about 2-4x bigger)
Their stated results
Decompression reconstructs 60-90Ktris/s Takes same time to construct scene in
VRML as compressing it with their algo– If they would only compare to something
not-terrible Writing scene in compressed form is 10x
faster than in uncompressed.– If you’re writing to disk or network, sure
The cool result
Optimality analysis of their algorithm– Number of triangulations of simply
connected polygon of n+2 vertices
If enumerated and an index into triangulation is used, encoding requires log2(ceil(Cn)) bits. As n->inf expr-> 2
QuickTime™ and aTIFF (Uncompressed) decompressor
are needed to see this picture.QuickTime™ and a
TIFF (Uncompressed) decompressorare needed to see this picture.
The cool result
Optimal fixed-length encoding 2bits per vertex
On some examples they do better– They have some evidence of better
performance than this fixed length scheme• on highly tesselated models• Like a bunny subdivided 2 times to have 38,000
polys (~1.5 bits per tri)– Potentially like a modern game model?
– Around 2.5 for other models
Insight
In polygonal mesh that is orientable– Vertices incident on any mesh vertex may
be ordered Separation property
– If you cut out a ring of a mesh, it separates it into 2 disjoint meshes:
• set of vertices inside (may be empty)• set outside
Connectivity can be encoded by degree
Definitions
Vertex cycle– Cyclic sequence of vertices along tri edges
Active list– Vertex cycle at “wavefront” of encoding.
Mesh divided into portion of mesh encoded and portion not encoded
Focus– Vertex in active list being processed
Step 0: Make object closed
QuickTime™ and aTIFF (Uncompressed) decompressor
are needed to see this picture.
Step 1: Pick tri for active list
Specify node degrees:“add 6, add 7, add 4”
QuickTime™ and aTIFF (Uncompressed) decompressor
are needed to see this picture.
Continue working with focus
Add 4, Add 8
QuickTime™ and aTIFF (Uncompressed) decompressor
are needed to see this picture.
And now focus is done
Add 5, Add 5
QuickTime™ and aTIFF (Uncompressed) decompressor
are needed to see this picture.
Active edge added twice: split
Add 5, Split 5
QuickTime™ and aTIFF (Uncompressed) decompressor
are needed to see this picture.
QuickTime™ and aTIFF (Uncompressed) decompressor
are needed to see this picture.
Algorithm
Start with triangle, active list of 3 vertices Add n vertices (clockwise order) adjacent
to current focus to active list with “add <n>” command
If active list intersects itself, it is split to two active list with a “split <offset>” command
Merge case
This deals with genus 1+ objects (torus,etc)
If first free edge of active vertex is in active list of vertex, 2 possibilities– It is on current active list
• Split <offset>
– It is on active list already split• Merge <index> <offset>
Better prediction of vertex position
Have previous triangle Compute plane equation Assume next triangle is coplanar Encode error term
– Simple, elegant, low error Use codebook for most common errors
Results
For regular meshes– Get around .2 bits per vertex for topology
• With RLE
– Increasing quantization from 8-10 bits, size goes up by 30-40% (!?)
ResultsModel verts VRML
gzIBM conn
IBM cord
Our conn
Our cord
blob 8036 117K 3447 10352 1709 7951
tri 2832 44K 1523 3673 764 2937
eight 766 11K 363 1146 53 683
shape 2562 35K 713 4578 48 2990
beet 2655 36K 1585 4982 781 3576
eng 2164 24K 1041 4703 330 3425
dum 11738 114K 4929 20351 1210 11162
cow 3066 40K 1766 4878 779 3376
Decompression
Leaf triangle reconstructed from root id
QuickTime™ and aTIFF (Uncompressed) decompressor
are needed to see this picture.