Triangle Fixer: Edge-based Connectivity Compression Martin Isenburg University of North Carolina at Chapel Hill Introduction A new edge-based encoding scheme for polygon mesh connectivity. Introduction A new edge-based encoding scheme for polygon mesh connectivity. compact mesh representations Introduction A new edge-based encoding scheme for polygon mesh connectivity. compact mesh representations simple implementation Introduction A new edge-based encoding scheme for polygon mesh connectivity. compact mesh representations simple implementation fast decoding Introduction A new edge-based encoding scheme for polygon mesh connectivity. compact mesh representations simple implementation fast decoding Introduction A new edge-based encoding scheme for polygon mesh connectivity. compact mesh representations simple implementation fast decoding extends to non-triangular meshes Introduction A new edge-based encoding scheme for polygon mesh connectivity. compact mesh representations simple implementation fast decoding extends to non-triangular meshes extends to meshes with group or triangle strip information What are ‘Polygon Meshes’ . . . ? A Simple Mesh Mesh with Holes Mesh with Handle Mesh with Handle and Holes How are Polygon Meshes stored . . . ? Geometry and Connectivity The minimal information we need to store is: • Where are the vertices located ? mesh geometry • How are the vertices connected ? mesh connectivity Standard Representation list of vertices x0 y0 z0 x1 y1 z1 x2 y2 z2 x3 y3 z3 4 x4 y4 z4 6 4 ..... xn yn zn Standard Representation list of vertices x0 y0 z0 x1 y1 z1 x2 y2 z2 x3 y3 z3 4 x4 y4 z4 6 4 ..... xn yn zn list of faces 1 4 20 Standard Representation list of vertices x0 y0 z0 x1 y1 z1 x2 y2 z2 x3 y3 z3 4 x4 y4 z4 6 4 ..... xn yn zn list of faces 1 4 20 Standard Representation list of vertices x0 y0 z0 x1 y1 z1 x2 y2 z2 x3 y3 z3 4 x4 y4 z4 6 4 ..... xn yn zn list of faces 1 4 20 Standard Representation list of vertices x0 y0 z0 x1 y1 z1 x2 y2 z2 x3 y3 z3 4 x4 y4 z4 6 4 ..... xn yn zn list of faces 1 4 20 Standard Representation list of vertices list of faces x0 y0 z0 x1 y1 z1 x2 y2 z2 x3 y3 z3 x4 y4 z4 ..... xn yn zn 1 4 2 2 3 0 4 0 5 3 4 5 5 0 2 ..... ..... ..... 4 u2 v 2 w 2 u3 v 3 w 3 u4 v 4 w 4 3 4 3 4 3 6 Compressing Geometry list of vertices list of faces x0 y0 z0 x1 y1 z1 x2 y2 z2 x3 y3 z3 x4 y4 z4 ..... xn yn zn 1 4 2 2 3 0 4 0 5 3 4 5 5 0 2 ..... ..... ..... 4 u2 v 2 w 2 u3 v 3 w 3 u4 v 4 w 4 3 4 3 4 3 6 Compressing Connectivity list of vertices list of faces x0 y0 z0 x1 y1 z1 x2 y2 z2 x3 y3 z3 x4 y4 z4 ..... xn yn zn 1 4 2 2 3 0 4 0 5 3 4 5 5 0 2 ..... ..... ..... 4 u2 v 2 w 2 u3 v 3 w 3 u4 v 4 w 4 3 4 3 4 3 6 Uncompressed Connectivity 2 1 3 0 6 5 4 7 9 11 8 10 12 Uncompressed Connectivity 0 2 1 3 0 6 5 4 7 9 11 8 10 12 4 5 Uncompressed Connectivity 0 1 2 1 3 0 6 5 4 7 9 11 8 10 12 4 5 0 5 Uncompressed Connectivity 0 1 2 1 3 0 6 5 4 7 9 11 8 10 12 4 5 5 6 0 1 5 Uncompressed Connectivity 2 1 3 0 6 5 4 7 9 11 8 10 12 0 1 6 4 5 2 5 6 0 1 5 1 Uncompressed Connectivity 2 1 3 0 6 5 4 7 9 11 8 10 12 0 1 6 4 5 2 5 6 2 0 1 6 5 1 3 Uncompressed Connectivity 2 1 3 0 6 5 4 7 9 11 8 10 12 0 1 6 4 4 5 2 8 5 6 2 5 0 1 6 5 1 3 Uncompressed Connectivity 2 1 3 0 6 5 4 7 9 11 8 10 12 0 1 6 4 5 4 5 2 8 5 6 2 5 0 1 6 8 5 1 3 9 Uncompressed Connectivity 2 1 3 0 6 5 4 7 9 11 8 10 12 0 1 6 4 5 4 5 2 8 5 5 6 2 5 9 0 1 6 8 6 5 1 3 9 Uncompressed Connectivity 2 1 0 6 5 4 9 11 8 10 0 1 3 6 4 5 7 11 12 4 5 2 8 5 6 5 6 2 5 9 0 1 6 8 6 5 1 3 9 9 Uncompressed Connectivity 2 1 0 6 5 4 9 11 8 10 0 1 3 6 4 5 7 11 12 4 5 2 8 5 6 5 0 6 1 2 6 5 8 9 6 6 11 5 1 3 9 9 7 Uncompressed Connectivity 2 1 0 6 5 4 9 11 8 10 0 1 3 6 4 5 7 11 6 12 4 5 2 8 5 6 7 5 0 6 1 2 6 5 8 9 6 6 11 3 5 1 3 9 9 7 Uncompressed Connectivity 2 1 0 6 5 4 9 11 8 10 0 1 3 6 4 5 7 11 6 12 9 4 5 2 8 5 6 7 5 0 5 6 1 1 2 6 3 5 8 9 9 6 9 6 11 7 3 8 10 Uncompressed Connectivity 2 1 0 6 5 4 9 11 8 10 0 1 3 6 4 5 7 11 6 12 9 4 5 5 6 2 2 8 5 5 9 6 6 7 3 9 10 0 1 6 8 6 11 8 11 5 1 3 9 9 7 10 Uncompressed Connectivity 2 1 0 6 5 4 9 11 8 10 0 1 3 6 4 5 7 11 6 12 9 12 4 5 5 6 2 2 8 5 5 9 6 6 7 3 9 10 7 0 1 6 8 6 11 8 11 5 1 3 9 9 7 10 11 Uncompressed Connectivity 2 1 0 6 5 4 9 11 8 10 0 1 3 6 4 5 7 11 6 12 9 12 4 5 5 6 2 2 8 5 5 9 6 6 7 3 9 10 7 0 1 6 8 6 11 8 11 5 1 3 9 9 7 10 11 Uncompressed Connectivity 2 1 0 6 5 4 9 11 8 10 0 1 3 6 4 5 7 11 6 12 9 12 4 5 5 6 2 2 8 5 5 9 6 6 7 3 9 10 7 0 1 6 8 6 11 8 11 5 1 3 9 9 7 10 11 Uncompressed Connectivity 2 1 0 6 5 4 9 11 8 10 0 1 3 6 4 5 7 11 6 12 9 12 4 5 5 6 2 2 8 5 5 9 6 6 7 3 9 10 7 0 1 6 8 6 11 8 11 5 1 3 9 9 7 10 11 Uncompressed Connectivity 2 1 0 6 5 4 9 11 8 10 0 1 3 6 4 5 7 11 6 12 9 12 4 5 5 6 2 2 8 5 5 9 6 6 7 3 9 10 7 0 1 6 8 6 11 8 11 5 1 3 9 9 7 10 11 Uncompressed Connectivity 6 log(n) bpv 2 1 0 6 5 4 9 11 8 10 0 1 3 6 4 5 7 11 6 12 9 12 4 5 5 6 2 2 8 5 5 9 6 6 7 3 9 10 7 0 1 6 8 6 11 8 11 5 1 3 9 9 7 10 11 Maximum Connectivity Compression for Triangle Meshes Turan’s observation • The fact that a planar graph can be decomposed into two spanning trees implies that it can be encoded in a constant number of bits. Turan’s observation • The fact that a planar graph can be decomposed into two spanning trees implies that it can be encoded in a constant number of bits. • The two spanning trees are: – a vertex spanning tree – its dual triangle spanning tree Turan’s observation • The fact that a planar graph can be decomposed into two spanning trees implies that it can be encoded in a constant number of bits. • The two spanning trees are: – a vertex spanning tree – its dual triangle spanning tree • He gave an encoding that uses 12 bits per vertex (bpv). Vertex Spanning Tree Vertex Spanning Tree Vertex Spanning Tree Triangle Spanning Tree Vertex Spanning Tree Previous work • Keeler Westbrook [95] • Taubin Rossignac [96] • Tauma Gotsman [98] • Rossignac [98] • DeFloriani et al [99] • Isenburg Snoeyink [99] Previous work • Keeler Westbrook [95] • Taubin Rossignac [96] • Tauma Gotsman [98] • Rossignac [98] • DeFloriani et al [99] • Isenburg Snoeyink [99] Short Encodings of Planar Graphs and Maps 4.6 bpv (4.6) Previous work • Keeler Westbrook [95] • Taubin Rossignac [96] • Tauma Gotsman [98] • Rossignac [98] • DeFloriani et al [99] • Isenburg Snoeyink [99] Topological Surgery 2.4 ~ 7.0 bpv (--) Previous work • Keeler Westbrook [95] • Taubin Rossignac [96] • Tauma Gotsman [98] • Rossignac [98] • DeFloriani et al [99] • Isenburg Snoeyink [99] Triangle Mesh Compression 0.2 ~ 2.9 bpv (--) Previous work • Keeler Westbrook [95] • Taubin Rossignac [96] • Tauma Gotsman [98] • Rossignac [98] • DeFloriani et al [99] • Isenburg Snoeyink [99] Edgebreaker 3.2 ~ 4.0 bpv (4.0) Previous work A Simple and Efficient • Keeler Westbrook [95] Encoding for Triangle Meshes 4.2 ~ 5.4 bpv (6.0) • Taubin Rossignac [96] • Tauma Gotsman [98] • Rossignac [98] • DeFloriani et al [99] • Isenburg Snoeyink [99] Previous work • Keeler Westbrook [95] • Taubin Rossignac [96] • Tauma Gotsman [98] • Rossignac [98] • DeFloriani et al [99] • Isenburg Snoeyink [99] Mesh Collapse Compression 1.1 ~ 3.4 bpv (--) Triangle Fixer: Edge-based Connectivity Compression Short description • • • • • edge-based traverses mesh and grows a boundary labels edges with T, R, L, S, or E for each triangle there is a T label the remaining labels R, L, S, and E encode a vertex spanning tree • linear-time decompression processes labels in reverse order Encoding scheme An initial active boundary is defined in cw order around an arbitrary edge of the mesh. Encoding scheme One of the two initial boundary edges is defined to be the active gate. Encoding scheme At every step of the encoding process the active gate is labeled with T, R, L, S, or E. Encoding scheme At every step of the encoding process the active gate is labeled with T, R, L, S, or E. Then the boundary and the gate are updated. Encoding scheme At every step of the encoding process the active gate is labeled with T, R, L, S, or E. Then the boundary and the gate are updated. The boundary is expanded (T), is shrunk (R and L), is split (S), or is terminated (E). Encoding scheme At every step of the encoding process the active gate is labeled with T, R, L, S, or E. Then the boundary and the gate are updated. The boundary is expanded (T), is shrunk (R and L), is split (S), or is terminated (E). Which label the gate is assigned depends on its adjacency relation with the boundary. Encoding scheme For each label T, R, L, S, and E we will now explain: (1) for which active gate <-> boundary adjacency relation it applies (2) how the boundary is updated (3) how the active gate is updated Label T The active gate is not adjacent to any other boundary edge. before Label T The new active gate is the right edge of the included triangle. before after Label R The active gate is adjacent to the next edge along the active boundary. before Label R The new active gate is the previous edge along the active boundary. before after Label L The active gate is adjacent to the previous edge along the active boundary. before Label L The new active gate is the next edge along the active boundary. before after Label S The active gate is adjacent to some other edge of the active boundary. before Label S The new active gate is the previous and the next edge along the active boundary. before after Label E The active gate is adjacent to the previous and the next edge along the active boundary. before Label E The new active gate is popped from the stack. If the stack is empty we terminate. before after Example Run - Encoding T T T R T T R T T R T R T R T R T S T R E T R E Example Run - Decoding E R T E R T S T R T R T R T R T T R T T R T T T Holes and Handles Encoding a hole • use a new label H • associate an integer called size with the label that specifies the number of edges/vertices around the hole • there is one label Hsize per hole • the total number of labels does not change, it is still equal to the number of edges in the mesh Label Hsize The active gate is adjacent to a hole of size edges/vertices. before hole Label Hsize The new active gate is the rightmost edge of the included hole. before hole after Encoding a handle • use a new label M • associate three integers called index, offset1, and offset2 with the label that specify the current configuration • there is one label Midx,off1,off2 per handle • the total number of labels does not change, it is still equal to the number of edges in the mesh Label Midx,off1,off2 The active gate is adjacent to some edge of a boundary in the stack. before offset2 index in stack offset1 Label Midx,off1,off2 The new active gate is the one previous to the adjacent edge from the stack boundary. before after offset2 index in stack offset1 Compressing the label sequence label encoding • The number of labels T, R, L, S, and E equals the number of edges in the mesh. A simple mesh with v vertices has 3v - 6 edges and 2v - 4 triangles. • This means that 2v - 4 labels are of type T and the remaining v - 2 labels are of type R, L, S, and E. • A 13333 label encoding guarantees to use exactly 5v - 10 bits. 13333 label encoding label bits code T 1 0 R L S E 3 3 3 3 100 101 110 111 guarantees 5 bits per vertex 12344 label encoding label bits code T 1 0 R L S E 2 3 4 4 10 110 1110 1111 guarantees 6 bits per vertex fixed bit encoding previous label current encoding T 12434 R L S E 12434 14243 14243 12443 guarantees 6 bits per vertex arithmetic encoding • approaches the entropy of the label sequence • adaptive version • three label memory • due to small number of different symbols, probability tables require less than 8KB • implemented with fast bit operations Example results mesh vertices holes handles fixed aac-3 phone 33204 3 -- 4.05 2.70 bunny 34834 5 -- 4.00 1.73 skull 10952 -- 51 4.22 2.96 eight 766 -- 2 4.09 1.43 femur 3897 -- 2 4.16 3.05 cow 3078 22 -- 3.99 2.36 shape 2562 -- -- 4.00 0.77 fandisk 6475 -- -- 4.01 1.67 Sneak Preview Triceratops • 2832 vertices Triceratops • 2832 vertices • 2834 polygons Triceratops • 2832 vertices • 2834 polygons – 346 triangles Triceratops • 2832 vertices • 2834 polygons – 346 triangles – 2266 quadrilaterals Triceratops • 2832 vertices • 2834 polygons – 346 triangles – 2266 quadrilaterals – 140 pentagons Triceratops • 2832 vertices • 2834 polygons – – – – 346 triangles 2266 quadrilaterals 140 pentagons 63 hexagons Triceratops • 2832 vertices • 2834 polygons – – – – – 346 triangles 2266 quadrilaterals 140 pentagons 63 hexagons 10 heptagons Triceratops • 2832 vertices • 2834 polygons – – – – – – 346 triangles 2266 quadrilaterals 140 pentagons 63 hexagons 10 heptagons 7 octagons Triceratops • 2832 vertices • 2834 polygons – – – – – – – 346 triangles 2266 quadrilaterals 140 pentagons 63 hexagons 10 heptagons 7 octagons 2 undecagons Triceratops • 2832 vertices • 2834 polygons Triceratops • 2832 vertices • 2834 polygons -> 11328 corners Triceratops • 2832 vertices • 2834 polygons -> 11328 corners • 2832 vertices • 5660 triangles Triceratops • 2832 vertices • 2834 polygons -> 11328 corners • 2832 vertices • 5660 triangles -> 16980 corners Triceratops • 2832 vertices • 2834 polygons -> 11328 corners • 2832 vertices • 5660 triangles -> 16980 corners Triceratops • 2832 vertices • 2834 polygons Triceratops • 2832 vertices • 2834 polygons -> 2834 faces Triceratops • 2832 vertices • 2834 polygons -> 2834 faces • 2832 vertices • 5660 triangles Triceratops • 2832 vertices • 2834 polygons -> 2834 faces • 2832 vertices • 5660 triangles -> 5660 faces Triceratops • 2832 vertices • 2834 polygons -> 2834 faces • 2832 vertices • 5660 triangles -> 5660 faces Beethoven Galleon Sandal Shark Cessna Tommy-gun Short Example Run F4 F3 R F5 R F4 Example results mesh vertices bpv triceratops 2832 346 2266 140 82 2.36 galleon 2372 336 1947 40 62 2.60 cessna 3745 900 2797 180 50 2.84 beethoven 2655 680 2078 44 10 2.89 sandal 2636 961 1985 7 0 2.60 shark 2560 188 2253 83 38 1.67 tommygun 4171 992 2785 84 119 2.61 Face Fixer: Compressing Polygon Meshes with Properties SIGGRAPH ’2000 http://www.cs.unc.edu/~isenburg/papers/is-ff-00.pdf Current Work • Patch Fixer – Find frequent patches in mesh and use their repeating structure for encoding. • Tetra Fixer – Compressing Tetrahedral Meshes • Volume Fixer – Compressing Volume Data composed of Tetrahedrons and Octahedrons with support for cell group structures. Acknowledgements • Paola Magillo for providing her set of example meshes • Michael Maniscalco and Frederick Wheeler for technical insights on arithmetic coding • Jarek Rossignac and Davis King for fruitful discussions • my supervisor Jack Snoeyink for reviewing the paper