Title: Compressing the Property Mapping of Polygon Meshes
1Compressing the Property Mapping of Polygon Meshes
- Martin IsenburgJack Snoeyink
- University of North Carolina at Chapel Hill
2Polygon Meshes
3Polygon Meshes
connectivity
5
face0 0 1 2 3
3
face1 3 2 5 7
face2 1 4 5 2
0
4
1
face3 6 0 3 7
2
face4 6 4 1 0
face5 6 7 5 4
4Connectivity Compression
recent compressionresults report improvements
of 10.98 0.22 b/v on compression rates
of 2.32 b/v
5Properties
6Properties
property mapping
5
10
11
10
11
face0 0 1 2 3
3
8
5
0
3
face1 3 2 4 5
3
0
0
3
face2 1 6 7 2
0
4
1
1
2
1
2
face3 10 0 3 11
1
2
2
face4 8 9 1 0
4
9
6
7
face5 10 11 13 12
13
12
7Property Mapping (1)
- Mesh properties can be attached
- per-vertex
- of Bones
- Bone IDs
- Bone Weights
8Property Mapping (2)
- Mesh properties can be attached
- per-face
- Shader IDs
9Property Mapping (3)
- Mesh properties can be attached
- per-corner
- Normals
- TexCoords
- Colors
10Definitions (1)
11Definitions (2)
12Previous Work
- Gumhold Strasser edge bitsReal-time
compression of triangle mesh connectivity,
SIGGRAPH, 1998 - Taubin et al discontinuity bitsGeometry
coding and VRML, Proceedings of the IEEE, 1998 - Isenburg Snoeyink vertex and corner
bitsFace Fixer Compressing Polygon
Mesheswith Properties, SIGGRAPH, 2000
13Corner and Vertex Bits
1
14Corner and Vertex Bits
1
0
0
15Corner and Vertex Bits
1
0
0
1
16Corner and Vertex Bits
1
0
0
0
1
17Corner and Vertex Bits
1
1
0
0
0
1
18Corner and Vertex Bits
1
0
1
1
0
0
0
1
19Corner and Vertex Bits
1
0
0
1
1
0
0
0
1
20Corner and Vertex Bits
1
0
0
0
1
1
0
0
0
1
21Corner and Vertex Bits
1
0
1
0
0
1
1
0
0
0
1
22Corner and Vertex Bits
0
1
0
1
0
0
1
1
0
0
0
1
23Corner and Vertex Bits
0
0
1
0
1
0
0
1
1
0
0
0
1
24Corner and Vertex Bits
0
0
1
0
1
0
0
0
1
1
1
0
0
0
1
25Corner and Vertex Bits
0
0
1
0
1
0
0
0
1
1
1
1
0
0
0
1
26Corner and Vertex Bits
0
0
1
0
1
0
0
1
0
1
1
1
1
0
0
0
1
27Corner and Vertex Bits
0
0
1
0
1
0
0
0
1
0
1
1
1
1
0
0
0
1
28Corner and Vertex Bits
0
0
1
0
1
0
0
0
1
0
1
1
1
0
1
1
0
0
0
1
29Corner and Vertex Bits
0
0
1
0
1
0
0
0
1
0
1
1
1
0
0
1
1
0
0
0
1
30Corner 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
31Corner 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
32Corner 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
33Corner 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
34Improve the Coding
- improve the vertex corner bit approach
- Dont write all bits!
- ? Rules R1 to R4
- Try to predict the remaining bits!
- ? Predictions P1 to P4
35Rules
- 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
36Rule 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
37Rule 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
38Rule 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
39Rule 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
40Predictions
- 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
41Prediction 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
42Prediction P2
?
?
1
0
0
0
0
0
1
1
otherwise
? predict nothing
? assume nothing
43Prediction 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
44Prediction P4
0
1
0
0
0
?
current edge
1
?
1
1
0
0
0
0
0
1
1
the current edge connects to a previously
processed vertex, but not along a crease
? predict corner bit 0
? assume smooth edge
45Prediction P5
creasecorners
0
1
1
?
0
0
0
?
1
0
1
there have been already two (or more) crease
corners
? predict corner bit 0
? assume crease vertex
46Prediction 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
47Prediction P7
0
?
1
0
0
0
0
0
?
0
there have been already preceding
smooth corners
? assume crease vertex
? predict corner bit 1
48Prediction P8
currently processed bit
0
0
0
?
?
0
otherwise
? predict nothing
? assume nothing
49Entropy
- For a sequence of n bits
- givenp0 probability of bit 0 occurringp1
probability of bit 1 occurring - Entropy - n (p0log2(p0) p1log2(p1))
50Entropy 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
51Arithmetic Coding
- approximates the entropy
- static version, if probabilities known
- adaptive version, if probabilities not known
- ? learn probabilities along the way
- ? BUT of symbols gtgt of contexts
- combination possible
- ? initialize roughly with what is expected
52Test Models
53Results
vertices
IS
mesh
pred
normals
T
GS
button 99 198 6.0 4.9 6.6 1.2 dragknob 161 322 6.0
5.0 6.8 1.3 handle 100 236 6.0 5.3 6.3 2.1 handle
1 128 256 6.0 5.0 6.6 1.5 handle2 1165 1235 6.0 3.
1 1.3 0.1 part1 166 336 6.0 5.0 6.4 1.6 part4 330
495 6.0 4.0 3.8 0.9 part5 175 355 6.0 5.0 6.5 1.9
rotor 600 905 6.0 4.0 4.0 1.0 spool 649 1018 6.0 4
.1 3.8 1.1 oilfilter 860 1484 6.0 4.4 4.7 1.5 gall
eon 2372 3974 4.0 3.2 2.8 1.0 sandal 2636 4096 4.1
3.0 2.7 0.9
54Order k Entropy
- For a sequence of n bits
- givenp0 ? probability of bit 0 occurring
after ?p1 ? probability of bit 1 occurring
after ?
Entropy - n ?(p0 ? log2(p0 ?) p1 ? log2(p1
?))
?
? string of preceding k-bits
number of different contexts is 2k
55Fair Comparison
mesh
pred
T
aac0
aac1
aac2
aac3
aac4
aac5
button 6.0 5.5 4.9 2.7 2.6 2.6 2.6 1.2 dragknob 6.
0 5.5 4.6 2.5 2.5 2.5 2.5 1.3 handle 6.0 5.7 5.3 5
.0 4.6 4.6 4.5 2.1 handle1 6.0 5.5 4.8 2.6 2.6 2.6
2.6 1.5 handle2 6.0 0.9 0.9 0.8 0.4 0.3 0.3 0.1 p
art1 6.0 5.5 5.0 3.5 3.3 3.3 3.3 1.6 part4 6.0 3.9
3.8 3.7 2.1 1.9 1.9 0.9 part5 6.0 5.5 4.7 4.1 4.1
4.1 4.1 1.9 rotor 6.0 4.2 4.0 3.6 1.3 1.1 1.1 1.0
spool 6.0 4.0 3.8 3.8 2.3 2.2 2.1 1.1 oilfilter 6
.0 4.7 4.6 4.6 4.0 3.5 3.4 1.5 galleon 4.0 3.5 3.4
2.5 2.3 2.3 2.2 1.0 sandal 4.1 3.3 3.3 2.4 2.2 2.
2 2.2 0.9
56Could we do better?
- YES !
- HOW ? use better traversal order
- STRATEGIE ... follow the creases
- depth first traversal along crease edges
- crease vertices are predicted correctly
- good start corner for predicting corner bits
- BUT requires a separate decoding pass over the
entire mesh
57Stripified Triangle Meshes
58Strip Corners
59Results
triangles
mesh
pred
strips
button 194 4 0.2 dragknob 318 6 0.2 handle 196 2
4 0.5 handle1 252 5 0.2 handle2 2326 125 0.1 par
t1 328 6 0.2 part4 656 34 0.3 part5
346 9 0.2 rotor 1200 41 0.3 spool 1294 24 0.2 o
ilfilter 1716 135 0.5
? code stripification for FREE
60Thank You !