600 likes | 740 Views
Compressing the Property Mapping of Polygon Meshes. Martin Isenburg Jack Snoeyink University of North Carolina at Chapel Hill. 3. 6. 7. 6. 7. 2. 0. 0. 3. 1. 2. 1. 4. 5. 5. Polygon Meshes. 6. 7. 0. 3. 1. 2. 4. 5. Polygon Meshes. connectivity. 5. face 0 0 1 2 3. 3.
E N D
Compressing the Property Mapping of Polygon Meshes Martin IsenburgJack Snoeyink University of North Carolina at Chapel Hill
3 6 7 6 7 2 0 0 3 1 2 1 4 5 5 Polygon Meshes
6 7 0 3 1 2 4 5 Polygon Meshes connectivity 5 face0 0 1 2 3 3 face1 3 2 5 7 face2 1 4 5 2 4 1 0 face3 6 0 3 7 2 face4 6 4 1 0 face5 6 7 5 4
Connectivity Compression recent compressionresults report improvements of ~ 10.98 % ~ 0.22 b/v on compression rates of ~ 2.32 b/v
10 11 11 10 8 5 0 3 12 13 3 0 0 3 11 10 1 2 1 2 1 2 5 8 0 3 9 4 6 7 2 4 13 1 9 12 6 7 Properties
Properties property mapping 5 10 11 11 10 face0 0 1 2 3 3 8 5 0 3 face1 3 2 4 5 3 0 0 3 face2 1 6 7 2 4 1 0 1 2 1 2 face3 10 0 3 11 1 2 2 face4 8 9 1 0 9 4 6 7 face5 10 11 13 12 13 12
Property Mapping (1) Mesh properties can be attached “per-vertex” • # of Bones • Bone IDs • Bone Weights
Property Mapping (2) Mesh properties can be attached “per-face” • Shader IDs
Property Mapping (3) Mesh properties can be attached “per-corner” • Normals • TexCoords • Colors
? ? ? ? ? ? ? ? ? Definitions (1)
smooth corner crease corner smooth vertex crease vertex corner vertex smooth edge crease edge blend edge Definitions (2)
Previous Work • Gumhold & Strasser: “edge bits”Real-time compression of triangle mesh connectivity, SIGGRAPH, 1998 • Taubin et al: “discontinuity bits”Geometry coding and VRML, Proceedings of the IEEE, 1998 • Isenburg & Snoeyink: “vertex and corner bits”Face Fixer: Compressing Polygon Mesheswith Properties, SIGGRAPH, 2000
Corner and Vertex Bits 1 0 0
Corner and Vertex Bits 1 0 0 1
Corner and Vertex Bits 1 0 0 0 1
Corner and Vertex Bits 1 1 0 0 0 1
Corner and Vertex Bits 1 0 1 1 0 0 0 1
Corner and Vertex Bits 1 0 0 1 1 0 0 0 1
Corner and Vertex Bits 1 0 0 0 1 1 0 0 0 1
Corner and Vertex Bits 1 0 1 0 0 1 1 0 0 0 1
Corner and Vertex Bits 0 1 0 1 0 0 1 1 0 0 0 1
Corner and Vertex Bits 0 0 1 0 1 0 0 1 1 0 0 0 1
Corner and Vertex Bits 0 0 1 0 1 0 0 0 1 1 1 0 0 0 1
Corner and Vertex Bits 0 0 1 0 1 0 0 0 1 1 1 1 0 0 0 1
Corner and Vertex Bits 0 0 1 0 1 0 0 1 0 1 1 1 1 0 0 0 1
Corner and Vertex Bits 0 0 1 0 1 0 0 0 1 0 1 1 1 1 0 0 0 1
Corner and Vertex Bits 0 0 1 0 1 0 0 0 1 0 1 1 1 0 1 1 0 0 0 1
Corner and Vertex Bits 0 0 1 0 1 0 0 0 1 0 1 1 1 0 0 1 1 0 0 0 1
Corner and Vertex Bits 0 0 1 0 1 0 0 0 1 0 1 1 1 1 0 0 1 1 0 0 0 1
Corner and Vertex Bits 0 0 1 0 1 0 0 0 1 0 1 1 0 1 1 0 0 1 1 0 0 0 1
Corner and Vertex Bits 1 0 0 1 0 1 0 0 0 1 0 1 1 0 1 1 0 0 1 1 0 0 0 1
Corner and Vertex Bits 1 0 0 1 0 1 0 0 0 1 0 1 1 0 1 1 0 0 1 1 0 0 0 1
Improve the Coding improve the vertex & corner bit approach: • Don’t write all bits! Rules R1 toR4 • Try to predict the remaining bits! Predictions P1 toP4
Rules • some bit configurations cannot occur not all bits are needed, because some can be inferred • four simple rules: • rule R1 saves vertex bits • rules R2, R3, and R4 save corner bits
Rule R1 marks current vertex and current corner ? ? if a vertex has only one corner, then it must be a smooth vertex saves 1 vertex bit
Rule R2 currentlyprocessed bit (s) ? 0 0 ? ? ? vertex bit if a crease vertex has only two corners, then both of them must be crease corners saves 2 corner bits
Rule R3 alreadyprocessed corners 0 ? 1 0 0 0 0 0 0 ? 0 1 each crease vertex must have at least two crease corners, this has only one so far saves 1 corner bit
Rule R4 0 ? 0 ? 0 0 0 0 0 ? 0 ? corner bits each crease vertex must have at least two crease corners, this has none so far saves 2 corner bits
Predictions • some bit configurations are more likely than others fewer bits are needed, because many can predicted correctly • eight simple predictions: • predictions P1 and P2 for vertex bits • predictions P3 to P8 for corner bits
Prediction P1 1 0 1 0 0 0 0 0 1 1 0 ? ? previouslyprocessed vertex some edge connects to a previously processed vertex along a crease assume crease edge predict vertex bit: 0
Prediction P2 ? ? 1 0 0 0 0 0 1 1 otherwise assume nothing predict nothing
Prediction P3 1 0 1 0 0 0 0 0 ? 1 ? 1 0 0 0 1 0 0 previouslyprocessed vertex the current edge connects to a previously processed vertex along a crease assume crease edge predict corner bit: 1
Prediction P4 0 1 0 0 0 ? currentedge 1 ? 1 1 0 0 0 0 0 1 1 the current edge connects to a previously processed vertex, but not along a crease assume smooth edge predict corner bit: 0
Prediction P5 creasecorners 0 1 1 ? 0 0 ? 0 1 0 1 there have been already two (or more) crease corners assume crease vertex predict corner bit: 0
degree-1 2 Prediction P6 0 ? 1 1 ? 0 0 0 smoothcorner there has been one crease, but since then less than smooth corners assume crease vertex predict corner bit: 0
degree-1 2 Prediction P7 0 ? 1 0 0 0 0 0 ? 0 there have been already preceding smooth corners assume crease vertex predict corner bit: 1
Prediction P8 currently processed bit 0 0 0 ? ? 0 otherwise assume nothing predict nothing
# of 0s # of 1s p0 = p1 = n n Entropy For a sequence of n bits givenp0 : probability of bit 0 occurringp1 : probability of bit 1 occurring Entropy = - n (p0log2(p0) + p1log2(p1))
# of 0s given C # of 1s given C p0|C = p1|C = # times given C # times given C Entropy with Context For a sequence of n bits givenp0|C : probability of bit 0 occurring given Cp1|C : probability of bit 1 occurring given C Entropy = - n (p0|C log2(p0|C) + p1|C log2(p1|C)) C