Martin Isenburg Jack Snoeyink University of North Carolina Chapel Hill Mesh Collapse Compression
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
Topology geometry versus topology x 0 y 0 z x 1 y 1 z x 2 y 2 z x 3 y 3 z x 4 y 4 z x n y n z n.....
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 ] DeFloriani et al [ 99 ] Isenburg Snoeyink [ 00 ]
Previous work Deering [ 95 ] Keeler Westbrook [ 95 ] Taubin Rossignac [ 96 ] Tauma Gotsman [ 98 ] Rossignac [ 98 ] DeFloriani et al [ 99 ] Isenburg Snoeyink [ 00 ] Geometry Compression
Previous work Deering [ 95 ] Keeler Westbrook [ 95 ] Taubin Rossignac [ 96 ] Tauma Gotsman [ 98 ] Rossignac [ 98 ] DeFloriani et al [ 99 ] Isenburg Snoeyink [ 00 ] Short Encodings of Planar Graphs and Maps 4.6 bpv (4.6)
Previous work Deering [ 95 ] Keeler Westbrook [ 95 ] Taubin Rossignac [ 96 ] Tauma Gotsman [ 98 ] Rossignac [ 98 ] DeFloriani et al [ 99 ] Isenburg Snoeyink [ 00 ] Topological Surgery 2.2 ~ 4.8 bpv (--)
Previous work Deering [ 95 ] Keeler Westbrook [ 95 ] Taubin Rossignac [ 96 ] Tauma Gotsman [ 98 ] Rossignac [ 98 ] DeFloriani 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 ] DeFloriani et al [ 99 ] Isenburg Snoeyink [ 00 ] Edgebreaker 3.4 ~ 4.0 bpv (4.0)
Previous work Deering [ 95 ] Keeler Westbrook [ 95 ] Taubin Rossignac [ 96 ] Tauma Gotsman [ 98 ] Rossignac [ 98 ] DeFloriani et al [ 99 ] Isenburg Snoeyink [ 00 ] A Simple and Efficient Encoding for Triangle Meshes 4.2 ~ 5.4 bpv (6.0)
Previous work Deering [ 95 ] Keeler Westbrook [ 95 ] Taubin Rossignac [ 96 ] Tauma Gotsman [ 98 ] Rossignac [ 98 ] DeFloriani 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.
mc-edge From Mesh to Digon mc-vertex cut and openrearrange new mc-edge
Various Digons simple trivialcomplex dividing edge
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.pushCode( “S” ); } else { degree = mc-contract( digon ); codec.pushCode( degree ); } codec.push( “E” ); }
mc-contract contract mc-edge removeselectcontract new mc-edgeloop
mc-divide divideselect dividing edgemc-edge
Video
Example
mc-vertex
Example mc-edge
Example digonify mc-edge
Example
mc-contract degree of removed vertex removed vertex
Example
mc-contract removed vertex degree of removed vertex
Example
mc-contract removed vertex degree of removed vertex
Example
mc-contract removed vertex degree of removed vertex
Example
mc-divide divided vertex
Example mc-divide divided vertex
Example push on stack
Example
mc-contract degree of removed vertex
Example
trivial digon trivial digon
Example trivial digon
Example pop from stack
Example
mc-contract degree of removed vertex
Example
mc-contract degree of removed vertex removed vertex
Example
trivial digon trivial digon
Example trivial digon
Example
mc-tree
Example mc-tree embedded mc-tree
Example mc-tree
Example Vertex permutation Code word sequence mc-encodingmc-tree
Decode algorithm decode( Mesh mesh, Codec codec ) { while ( not codec.empty( ) ) { code = codec.popCode( ); 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-edgeadded edge
Encoding a Hole holeadded 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 bpvmesh 250/ ~ 1.7bishop 1524/ ~ 2.8bunny 1502/ ~ 3.4dragon 2832/ ~ 2.7triceratops 2655/ ~ 2.7beethoven 2562/ ~ 1.2shape
Results vertices/triangles bpvmesh 250/ ~ 1.7bishop 1524/ ~ 2.8bunny 1502/ ~ 3.4dragon 2832/ ~ 2.7triceratops 2655/ ~ 2.7beethoven 2562/ ~ 1.2shape
Results vertices/triangles bpvmesh 250/ ~ 1.7bishop 1524/ ~ 2.8bunny 1502/ ~ 3.4dragon 2832/ ~ 2.7triceratops 2655/ ~ 2.7beethoven 2562/ ~ 1.2shape
Results vertices/triangles bpvmesh 250/ ~ 1.7bishop 1524/ ~ 2.8bunny 1502/ ~ 3.4dragon 2832/ ~ 2.7triceratops 2655/ ~ 2.7beethoven 2562/ ~ 1.2shape
Results vertices/triangles bpvmesh 250/ ~ 1.7bishop 1524/ ~ 2.8bunny 1502/ ~ 3.4dragon 2832/ ~ 2.7triceratops 2655/ ~ 2.7beethoven 2562/ ~ 1.2shape
Results vertices/triangles bpvmesh 250/ ~ 1.7bishop 1524/ ~ 2.8bunny 1502/ ~ 3.4dragon 2832/ ~ 2.7triceratops 2655/ ~ 2.7beethoven 2562/ ~ 1.2shape
Results vertices/triangles bpvmesh 250/ ~ 1.7bishop 1524/ ~ 2.8bunny 1502/ ~ 3.4dragon 2832/ ~ 2.7triceratops 2655/ ~ 2.7beethoven 2562/ ~ 1.2shape
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