1 MESHCOMPRESSIONMESHCOMPRESSION EG99 Tutorial Mesh Compression
2 MESHCOMPRESSIONMESHCOMPRESSION EG99 Tutorial Why Geometric Compression? o Availability of large geometric datasets in mechanical CAD, virtual reality, medical imaging, scientific visualization, geographic information systems, etc. o Need for mspeeding up transmission of geometric models mreducing the costs of memory and of auxiliary storage required by such models menhancing rendering performances: limitations on on-board memory and on data transfer speed
3 MESHCOMPRESSIONMESHCOMPRESSION EG99 Tutorial...Why Geometric Compression?... Compression methods aimed at two complementary tasks: mcompression of geometry: efficient encoding of numerical information attached to the vertices (position, surface normal, color, texture parameters) mcompression of mesh connectivity: efficient encoding of the mesh topology Compression methods developed for triangle meshes
4 MESHCOMPRESSIONMESHCOMPRESSION EG99 Tutorial Compression of Geometry (Deering, 1995; Chow, 1997) o Positions, normals and colors quantized to significantly fewer than 32 bits (single-precision IEEE floating point) with little loss in visual quality o Example: quantization for position information: mnormalizing object geometry to a unit cube mpositions quantized to q bits (q<=16) by truncating the less significant m bits of position components, where m=16-q o Optimizations: mpositions are "delta-encoded", i.e., just the difference between a vertex position and that of its predecessor in the bitstream is encoded mquantization assignment can be done by partitioning the triangle mesh into parts of similar detail based on triangle size and curvature
5 MESHCOMPRESSIONMESHCOMPRESSION EG99 Tutorial Compression of Connectivity o Two kinds of compression techniques: mDirect techniques: Goal: minimize the number of bits needed to encode connectivity m Progressive techniques: Goal: an interrupted bitstream must provide a description of the whole object at a lower level of detail
6 MESHCOMPRESSIONMESHCOMPRESSION EG99 Tutorial Direct Methods o Triangle strips (and triangle fans) used in graphics API (e.g., OpenGL) o Generalized triangle meshes (Deering 1995; Evans et al., 1996; Chow, 1997; Bar Yehuda and Gotsman 1996) o Topological surgery (Taubin and Rossignac, 1996) o Sequence of triangles in a shelling order (De Floriani, Magillo and Puppo, 1998)
7 MESHCOMPRESSIONMESHCOMPRESSION EG99 Tutorial...Direct Methods... Triangle Strips o Defined as a collection of sequences of vertices o Each triangle in a strip has its vertices at three consecutive positions o Encoding: mnumber and lengths of the strips mtwo vertex references per strip mone vertex reference per triangle mone bit per triangle (swap code) o Drawbacks: meach vertex must be encoded twice on average mit is difficult to obtain few long strips from a generic mesh [Evans et al., 1996] Sequence: 1,2,3,4,5,6,
8 MESHCOMPRESSIONMESHCOMPRESSION EG99 Tutorial...Direct Methods... Generalized Triangle Strips (with direct vertex encoding) o 1,2,3,4,5,6,7,8 NO! o 1,2,3,4,5,6,7,5,8 YES Another way of encoding with swap codes: it tells on which open side the new vertex must be attached o 1,2,0,3,0,4,0,5,0,6,0,7,1,
9 MESHCOMPRESSIONMESHCOMPRESSION EG99 Tutorial...Direct Methods... Generalized Triangle Meshes (Deering, 1995) o Definition of a new syntax for a generalized strip o Use of a mesh buffer: a queue of maximum length 16 of previously used vertices o Encoding: mone bit per vertex to indicate whether the vertex must be inserted into the mesh buffer mtwo bits per triangle to indicate how to continue the current strip (three possible codes) mone bit per triangle to indicate whether a new vertex should be read or a vertex from the mesh buffer must be used 4 bits of address to access a vertex of the mesh buffer o Cost: ~11 bits per vertex for connectivity
10 MESHCOMPRESSIONMESHCOMPRESSION EG99 Tutorial...Direct Methods... Generalized Triangle Meshes o Example: mR = Restart mRO = Replace Oldest mRM = Replace Middle mP = Push mnumber = vertex index in mesh m-number = vertex index in buffer (from top) R 6 P RO 1 RO 7 P RO 2 RO 3 RM 4 RM 8 P RO 5 RO 9 P RO 10 RM 11 RO 17 P RM 16 P RM -3 RO 15 P RM -5 RO 6 RM 14 P RO 13 RM -9 RO 12 RM 18 P RM -3 RO 15 P RO -5 RO 6 RM 14 P RO 13 P RM -9 RO 23 RO -10 RO -7 RM 30 RM 29 RM 28 RM -1 RO -2 RM -3 RM 27 RO 26 RM -4 RO 25 RO -5 QUEUE: 6,7,8,9,17,16,...
11 MESHCOMPRESSIONMESHCOMPRESSION EG99 Tutorial...Direct Methods... Topological Surgery (Taubin and Rossignac, 1996) o Vertex spanning tree formed by selecting the minimum number of edges in the input mesh which connect all its vertices o The edges of the vertex spanning tree decompose the mesh into a collection of non-overlapping triangle strips (runs) o Such triangle strips form a spanning tree of the triangles of the mesh
12 MESHCOMPRESSIONMESHCOMPRESSION EG99 Tutorial...Direct Methods... Topological Surgery o Example:
13 MESHCOMPRESSIONMESHCOMPRESSION EG99 Tutorial...Direct Methods... Topological Surgery o Encoding structure: vertex + triangle spanning trees o Order imposed on the vertices by the spanning tree exploited for computing estimates of the position of a vertex from the position of its 3 or 4 ancestors in the tree o Cost: between 2.5 and 7 bits per vertex to encode connectivity o Drawbacks: mdecompression stage complicated by large memory requirements (all information must be kept in main memory when reconstructing the mesh) mdifficult to implement
14 MESHCOMPRESSIONMESHCOMPRESSION EG99 Tutorial...Direct Methods... A Compression Method based on Shelling (De Floriani, Magillo and Puppo, 1998) o Based on a shelling order: a sequence of all the triangles in the mesh with the property that the boundary of the set of triangles corresponding to any subsequence forms a simple polygon o The compression algorithm works for every triangulated surface homeomorphic to a sphere or a disk o Encoding: four 2-bits codes per edge: SKIP, VERTEX, LEFT, RIGHT
15 MESHCOMPRESSIONMESHCOMPRESSION EG99 Tutorial...Direct Methods... A Compression Method based on Shelling o Start from an arbitrary triangle, whose boundary forms the current polygon o Loop on the edges of the current polygon: for each edge e: mtry to add the triangle t externally adjacent to e mif successful, update the current polygon min any case, send a code mwhen necessary, send a vertex è Each vertex is sent just once è Each edge is examined at most once
16 MESHCOMPRESSIONMESHCOMPRESSION EG99 Tutorial...Direct Methods... A Compression Method based on Shelling mif t brings a new vertex ==> VERTEX + vertex coordinates mif t does not exist or cannot be added ==> SKIP
17 MESHCOMPRESSIONMESHCOMPRESSION EG99 Tutorial...Direct Methods... A Compression Method based on Shelling mif t shares the polygon edge to the left of e ==> LEFT mif t shares the polygon edge to the right of e ==> RIGHT
18 MESHCOMPRESSIONMESHCOMPRESSION EG99 Tutorial...Direct Methods... A Compression Method based on Shelling o Properties of the Shelling Method mEvery vertex is encoded only once mEach edge is examined at most once mCompression and decompression algorithms: Gwork in time linear in the size of the mesh Gno numerical computations Gconceptually simple and easy to implement mAdjacencies between triangles are reconstructed directly from the sequence at no additional cost mCost: Gin theory: at most 6 bits of connectivity per vertex Gin practice: less than 4.5 bits of connectivity per vertex
19 MESHCOMPRESSIONMESHCOMPRESSION EG99 Tutorial...Sequence of Triangles in a Shelling Order... Experimental Results (on TINs) Exp #vert #tri #code bits compress. decompr. bits /vert time(tri/s) time(tri/s) U (51879) 2.414(35331) U (52483) 1.603(35271) U (53899) 0.734(35174) U (56930) 0.348(35172) A (54099) 0.855(35749) A (53894) 0.853(35455) A (53877) 0.867(35545) A (53798) 0.880(35275) B (58076) 0.298(35469) B (58292) 0.308(35581) B (57892) 0.304(35421) B (58149) 0.308(35305) U1--4: uniform resolution (in decreasing order) A1--4: one fourth of the area is at high resolution, the rest is coarse B1--4: one 16th of the area is at high resolution, the rest is coarse
20 MESHCOMPRESSIONMESHCOMPRESSION EG99 Tutorial...Direct Methods... A Compression Method based on Shelling o The method generalizes to surfaces with arbitrary genus o The algorithm automatically cuts the surface into simply connected meshes with a small overhead o No additional control codes required o Vertices belopnging to more than one patch are repeated o Cost: in practice, less than 5.5 bits of connectivity per vertex
21 MESHCOMPRESSIONMESHCOMPRESSION EG99 Tutorial...Sequence of Triangles in a Shelling Order... Experimental Results (on 3D meshes) Mesh #vert #tri # #repeated #code bits patches vert bits /vert eight shape cow femur pieta skull bunny fandisk phone
22 MESHCOMPRESSIONMESHCOMPRESSION EG99 Tutorial...Sequence of Triangles in a Shelling Order... Experimental Results (on 3D meshes) whole mesh patch 1 patch 2 …. + other 4 patches with few triangles each
23 MESHCOMPRESSIONMESHCOMPRESSION EG99 Tutorial...Sequence of Triangles in a Shelling Order... Experimental Results (on 3D meshes) whole mesh patch 1 patch 2 …. + other 78 patches with few triangles each
24 MESHCOMPRESSIONMESHCOMPRESSION EG99 Tutorial Progressive Compression o Efficient encoding of the mesh produced by a simplification algorithm o A sequence of progressive LODs generated by iteratively applying a destructive operator which removes details from a mesh o An inverse constructive operator recovers such details o Encoding: mcoarsest mesh produced in the simplification process + sequence of construction operations
25 MESHCOMPRESSIONMESHCOMPRESSION EG99 Tutorial...Progressive Compression... o Each LOD can be seen as a form of lossy compression of the original mesh o There is a trade-off between loading/transmission times and loss of detail o Compression rates are usually lower than those achieved by direct techniques
26 MESHCOMPRESSIONMESHCOMPRESSION EG99 Tutorial...Progressive Compression... Progressive Compression Methods o Progressive meshes (Hoppe, 1996) mdestructive operator = edge collapse o Sequence of edge swaps (De Floriani, Magillo and Puppo, 1998) mdestructive operator = vertex removal o Sequence of ordered vertex sequences (Snoeyink and van Kreveld, 1997) mdestructive operator = removal of a set of vertices
27 MESHCOMPRESSIONMESHCOMPRESSION EG99 Tutorial...Progressive Compression... Progressive Meshes (Hoppe, 1996) o Edge collapse: mreplace an edge e with a vertex v1 and the two triangles sharing e with two edges incident at v1 o Vertex split (inverse operation): mexpand a vertex v1 into an edge e=v1v2 and two edges e1 and e2 among those incident at v1 into two triangles v1 v2 e1 e2 e
28 MESHCOMPRESSIONMESHCOMPRESSION EG99 Tutorial...Progressive Compression... Progressive Meshes (Hoppe, 1996) o Encoding: mnew vertex v2 mreference to v1 mcode specifying the position of e1 and e2 in the set of edges incident at v1 o Cost: mn(log n + log(b(b-1))) bits of connectivity, where b = maximum degree of a vertex at any step mfor instance, for n=2 16 and b=2 3 ==> about 21.8*2 16 bits of connectivity
29 MESHCOMPRESSIONMESHCOMPRESSION EG99 Tutorial...Progressive Compression... Sequence of Edge Swaps (De Floriani, Magillo, Puppo, 1998) o Based on the iterative removal of a vertex of bounded degree (less than a constant b) selected according to an error-based criterion: mthe vertex which causes the least increase in the approximation error is always chosen The polygonal hole left by removing vertex v is retriangulated The inverse constructive operator inserts vertex v and recovers the previous triangulation of
30 MESHCOMPRESSIONMESHCOMPRESSION EG99 Tutorial Sequence of Edge Swaps o The old triangulation T is recovered from the new one T' by first splitting the triangle t of T' containing vertex v and then applying a sequence of edge swaps...Progressive Compression... T T’
31 MESHCOMPRESSIONMESHCOMPRESSION EG99 Tutorial...Progressive Compression... Sequence of Edge Swaps o Encoding: mfor each removed vertex v: Ga vertex w and an integer number indicating a triangle around w (they define the triangle t of T' containing v) the packed sequence of edge swap which generates T from T' T’ T Vertex: w Triangle index: 0 Swap sequence: 2 0 2
32 MESHCOMPRESSIONMESHCOMPRESSION EG99 Tutorial...Progressive Compression... Sequence of Edge Swaps o Cost: mn(log n +log b+ log((b-1)!)-1) bits of connectivity information mfor instance, for n=2 16 and b=2 3 ==> about 31.4*2 16 bits of connectivity o Properties: madaptivity to LOD generation is good since the vertices are removed by taking into account the accuracy of the resulting approximation the criterion used in the retriangulation is encoded in the sequence of swaps: more general than other progressive methods
33 MESHCOMPRESSIONMESHCOMPRESSION EG99 Tutorial...Progressive Compression... Snoeyink and van Kreveld's Method o It applies to Triangulated Irregular Networks (TINs) based on Delaunay triangulation o Delaunay triangulation: a triangulation is called a Delaunay triangulation if the circumcircle of any of its triangles does not contain any vertex in its interior
34 MESHCOMPRESSIONMESHCOMPRESSION EG99 Tutorial...Progressive Compression... Snoeyink and van Kreveld's Method o LOD generation process: at each step, a maximal set of independent vertices (i.e., vertices which are not connected by an edge) of bounded degree is removed o The process of removing a set of vertices terminates in a logarithmic number of steps