Mesh Collapse Compression Martin Isenburg Jack Snoeyink University
Mesh Collapse Compression Martin Isenburg Jack Snoeyink University of North Carolina Chapel Hill
Introduction A novel scheme for encoding triangle mesh topology.
Introduction A novel scheme for encoding triangle mesh topology. – triangle mesh
Introduction A novel scheme for encoding triangle mesh topology. – triangle mesh – encoding
Introduction A novel scheme for encoding triangle mesh topology. – triangle mesh – encoding – topology
Triangle Mesh • • Computer Graphics Surface description Hardware support Used everyday Used everywhere Used by everybody Increasingly complex
Encoding • Compressed representation • Decrease storage and transmission time 011101101011. . .
Topology geometry x 0 y 0 z 0 x 1 y 1 z 1 x 2 y 2 z 2 x 3 y 3 z 3 x 4 y 4 z 4. . . x n y n zn versus topology 0 1 2 2 3 0 2 3 1 2 4 3 5 4 3. . . .
Overview • • previous work simple meshes video example general meshes results summary
Previous work • Deering [95] • Keeler Westbrook [95] • Taubin Rossignac [96] • Tauma Gotsman [98] • Rossignac [98] • De. Floriani et al [99] • Isenburg Snoeyink [00]
Previous work • Deering [95] • Keeler Westbrook [95] • Taubin Rossignac [96] • Tauma Gotsman [98] • Rossignac [98] • De. Floriani et al [99] • Isenburg Snoeyink [00] Geometry Compression
Previous work • Deering [95] • Keeler Westbrook [95] • Taubin Rossignac [96] • Tauma Gotsman [98] • Rossignac [98] • De. Floriani et al [99] • Isenburg Snoeyink [00] Short Encodings of Planar Graphs and Maps 4. 6 bpv (4. 6)
Previous work • Deering [95] Topological Surgery • Keeler Westbrook [95] 2. 2 ~ 4. 8 bpv (--) • Taubin Rossignac [96] • Tauma Gotsman [98] • Rossignac [98] • De. Floriani et al [99] • Isenburg Snoeyink [00]
Previous work • Deering [95] • Keeler Westbrook [95] • Taubin Rossignac [96] • Tauma Gotsman [98] • Rossignac [98] • De. Floriani et al [99] • Isenburg Snoeyink [00] Triangle Mesh Compression 0. 2 ~ 2. 9 bpv (--)
Previous work • Deering [95] • Keeler Westbrook [95] • Taubin Rossignac [96] • Tauma Gotsman [98] • Rossignac [98] • De. Floriani et al [99] • Isenburg Snoeyink [00] Edgebreaker 3. 4 ~ 4. 0 bpv (4. 0)
Previous work A Simple and Efficient Encoding for Triangle Meshes 4. 2 ~ 5. 4 bpv (6. 0) • Keeler Westbrook [95] • Deering [95] • Taubin Rossignac [96] • Tauma Gotsman [98] • Rossignac [98] • De. Floriani et al [99] • Isenburg Snoeyink [00]
Previous work • Deering [95] • Keeler Westbrook [95] • Taubin Rossignac [96] • Tauma Gotsman [98] • Rossignac [98] • De. Floriani et al [99] • Isenburg Snoeyink [00] Face Fixer 3. 9 ~ 4. 1 bpv (6. 0)
Simple Meshes (1) the mesh is a surface composed of triangles (2) the mesh has no boundary (3) the mesh has no holes (4) the mesh has no handles
Simple Mesh
Mesh Collapse Compression i Input: Output: a simple mesh - a sequence of code words - a permutation of vertices
Compression Scheme (1) initialize - declare arbitrary directed mesh edge as current edge
Compression Scheme (2) loop until done (and usually): - contract current edge - record the removed vertex - record the degree - select new current edge
Compression Scheme (2) loop until done (but occasionally): - divide mesh along current edge - record start symbol - continue on one mesh part - record end symbol - continue on other mesh part
Digons A triangulation with exception of the outer face that is bound by only two edges.
From Mesh to Digon mc-edge mc-vertex new mc-edge cut and open rearrange
Various Digons dividing edge simple trivial complex
Encode Algorithm encode( Mesh mesh, Codec codec ) { stack. push( digonify( mesh ) ); while ( not stack. empty( ) ) { digon = stack. pop( ); while ( not digon. trivial ( ) ) { if ( digon. complex() ) { subdigon = mc-divide( digon ); stack. push( subdigon ); codec. push. Code( “S” ); } else { degree = mc-contract( digon ); codec. push. Code( degree ); } } codec. push( “E” ); } }
mc-contract mc-edge contract loop contract new mc-edge remove select
mc-divide dividing edge divide mc-edge select mc-edge
Video
Example
Example
Example mc-vertex
Example mc-edge
Example mc-edge digonify
Example
Example removed vertex degree of removed vertex mc-contract
Example
Example removed vertex degree of removed vertex mc-contract
Example
Example removed vertex mc-contract degree of removed vertex
Example
Example removed vertex mc-contract degree of removed vertex
Example
Example divided vertex mc-divide
Example divided vertex mc-divide
Example push on stack
Example
Example mc-contract degree of removed vertex
Example
Example trivial digon
Example trivial digon
Example pop from stack
Example
Example mc-contract degree of removed vertex
Example
Example removed vertex mc-contract degree of removed vertex
Example
Example trivial digon
Example trivial digon
Example
Example mc-tree
Example mc-tree embedded mc-tree
Example mc-tree
Example mc-encoding Code word sequence Vertex permutation mc-tree
Decode algorithm decode( Mesh mesh, Codec codec ) { while ( not codec. empty( ) ) { code = codec. pop. Code( ); if ( code == “E” ) { stack. push( digon ); digon = new Digon( ); } else if ( code == “S” ) { subdigon = stack. pop( ); mc-join( digon, subdigon ); } else { mc-expand( digon, code ); } } mesh = undigonify ( digon ); }
General Meshes (1) the mesh is a surface composed of triangles (2) the mesh can have a boundary (3) the mesh can have holes (4) the mesh can have handles
Simple Mesh
Boundary
Holes
Handle
Handle & Boundary
Handle & Holes
Encoding a Boundary mc-vertex mc-edge added edge
Encoding a Hole hole added vertex
Encoding a Handle digon in stack After mc-contract: M + index + [0. . 5] After mc-divide: M + index + [0. . 1] Hiding in a trivial digon: M + index + [0. . 7]
Results vertices/triangles bpv bishop 250/496 1. 4 ~ 1. 7 bunny 1524/3044 2. 7 ~ 2. 8 dragon 1502/3000 3. 1 ~ 3. 4 triceratops 2832/5660 2. 4 ~ 2. 7 beethoven 2655/5030 2. 5 ~ 2. 7 shape 2562/5120 1. 1 ~ 1. 2 mesh
Results vertices/triangles bpv bishop 250/496 1. 4 ~ 1. 7 bunny 1524/3044 2. 7 ~ 2. 8 dragon 1502/3000 3. 1 ~ 3. 4 triceratops 2832/5660 2. 4 ~ 2. 7 beethoven 2655/5030 2. 5 ~ 2. 7 shape 2562/5120 1. 1 ~ 1. 2 mesh
Results vertices/triangles bpv bishop 250/496 1. 4 ~ 1. 7 bunny 1524/3044 2. 7 ~ 2. 8 dragon 1502/3000 3. 1 ~ 3. 4 triceratops 2832/5660 2. 4 ~ 2. 7 beethoven 2655/5030 2. 5 ~ 2. 7 shape 2562/5120 1. 1 ~ 1. 2 mesh
Results vertices/triangles bpv bishop 250/496 1. 4 ~ 1. 7 bunny 1524/3044 2. 7 ~ 2. 8 dragon 1502/3000 3. 1 ~ 3. 4 triceratops 2832/5660 2. 4 ~ 2. 7 beethoven 2655/5030 2. 5 ~ 2. 7 shape 2562/5120 1. 1 ~ 1. 2 mesh
Results vertices/triangles bpv bishop 250/496 1. 4 ~ 1. 7 bunny 1524/3044 2. 7 ~ 2. 8 dragon 1502/3000 3. 1 ~ 3. 4 triceratops 2832/5660 2. 4 ~ 2. 7 beethoven 2655/5030 2. 5 ~ 2. 7 shape 2562/5120 1. 1 ~ 1. 2 mesh
Results vertices/triangles bpv bishop 250/496 1. 4 ~ 1. 7 bunny 1524/3044 2. 7 ~ 2. 8 dragon 1502/3000 3. 1 ~ 3. 4 triceratops 2832/5660 2. 4 ~ 2. 7 beethoven 2655/5030 2. 5 ~ 2. 7 shape 2562/5120 1. 1 ~ 1. 2 mesh
Results vertices/triangles bpv bishop 250/496 1. 4 ~ 1. 7 bunny 1524/3044 2. 7 ~ 2. 8 dragon 1502/3000 3. 1 ~ 3. 4 triceratops 2832/5660 2. 4 ~ 2. 7 beethoven 2655/5030 2. 5 ~ 2. 7 shape 2562/5120 1. 1 ~ 1. 2 mesh
Summary We presented a novel scheme for encoding the topology of triangular meshes. The achieved compression rates of 1. 1 ~ 3. 4 bits/vertex compete with the best results known today. Currently we work on a progressive version of mc-compression.
Acknowledgements • University of British Columbia at Vancouver, Canada • Gene Lee and his RASP tools • International Computer Science Institute (ICSI) at Berkeley, USA • funding: NSERC, IRIS, UGF
- Slides: 85