Title: Geometric Compression Through Topological Surgery
1Geometric Compression Through Topological Surgery
- Gabriel Taubin (IBM)
- Jarek Rossignac (Georgia Tech)
2Problem 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
3Basic 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
4Compressing Topology
- Start with meshes having Euler Characteristic 2
(Deformable to sphere)
5Compressing Topology
- Want to cut it into a planar mesh with lots of
long triangle strips
6Compressing Topology
- A MST on vertices indicates some interesting cut
lines
7Compressing Topology
- Notice how the edge boundary graph has 2 edges
for each MST cut line
8Compressing Topology
- Splaying our faithful Euler-2 characteristic mesh
looks as follows
9Compressing Topology
- Note that in the flattened shape a binary graph
can represent edges
10Compressing Topology
- If we save these two graphs 1 bit per marching
edge graph as to how it fits to MST, weve got
topology of Euler-2 meshes
11Not all cuts are equal
- But some will earn you a prize
- from lInstitut Paul Bocuse in Lyons
- Others
12Not all cuts are equal
13Why 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
141st cut spanning tree construction
- Use edge length and run MST algorithm
- Disaster with a capital D
15Actual attempt to make MST
- Distance from edge midpoint to tree root
16Modification to improve result
- 2 pass algorithm where only non-branching edges
are allowed on 1st pass
17Concentric Rings Method
- Choose a root, order by concentric rings
18Connect concentric layers
- with triangle that minimize branches
19Final Mesh
20Concentric Rings applied to bone
- Generating concentric rings makes for much longer
triangle runs
21Encoding Vertex Position
- Vertex Spanning Tree offers mechanism for vertex
position prediction - Build a prediction function based on samples from
parents in run
A
- Store per-vertex fixed-point delta from given
predictor
22Vertex Position Predictor
- Assume a linear predictor
- f(v0vK)b0v0bkvk
- Thus estimate b0bk by minimizing the least
square error over all vertices of depth ngtk for
given model
23Dealing 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
24Results
- They dont all add up
- Feels like they use the red herring called
- ASCII VRML
- To boost their results
(sometimes literally)
25Results (what a) Crock
- About as lossless as a spam stock investment
12 bits per coord
10 bits per coord
8 bits per coord
original
26Results 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
27ResultsArchitecture
28ResultsArchitecture
29Their 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 youre 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)
30Their 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 youre writing to disk or network, sure
31The cool result
- Optimality analysis of their algorithm
- Number of triangulations of simply connected
polygon of n2 vertices - If enumerated and an index into triangulation is
used, encoding requires log2(ceil(Cn)) bits. As
n-gtinf expr-gt 2
32The cool result
33The 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
34Triangle Mesh Compression
- Costa Touma, Craig Gotsman
- Technion - Israel Institute of Technology
35Insight
- 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
36Definitions
- 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
37Step 0 Make object closed
38Step 1 Pick tri for active list
- Specify node degreesadd 6, add 7, add 4
39Continue working with focus
40And now focus is done
41Active edge added twice split
42Algorithm
- Start with triangle, active list of 3 vertices
- Add n vertices (clockwise order) adjacent to
current focus to active list with add ltngt
command - If active list intersects itself, it is split to
two active list with a split ltoffsetgt command
43Merge 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 ltoffsetgt
- It is on active list already split
- Merge ltindexgt ltoffsetgt
44Better 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
45Results
- 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 (!?)
46Results
Model verts VRML gz IBM 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
47Decompression
- Leaf triangle reconstructed from root id
48Decompression
49Decompression
50Decompression
51Decompression
52Decompression
53Decompression
54Decompression
55(No Transcript)