Edgebreaker
Connectivity Compression for Triangle Meshes Jarek Rossignac, TVCG 1999
Edgebreaker Connectivity Compression for Triangle Meshes Jarek - - PowerPoint PPT Presentation
Edgebreaker Connectivity Compression for Triangle Meshes Jarek Rossignac, TVCG 1999 Contribution Lossless compression for a triangle mesh, using 2 bits per triangle for simple meshes Only a slight increase for meshes with holes and
Connectivity Compression for Triangle Meshes Jarek Rossignac, TVCG 1999
using ≈2 bits per triangle for simple meshes
– Only a slight increase for meshes with holes and
handles
– Improves upon O(|T| log |T|) for many previous
approaches
– The constant is better than for previous approaches
starting from the boundary and spiralling inwards
– Sequence of opcodes is called “history” – Length of history == number of triangles, hence
linear size encoding
C
C
R
R
R
S
L
E
L
C
R
R
C
R
R
R
E
– Edge-connected collection of triangles with one or
zero bounding loops
sphere
– Like holes in a sheet of paper
– Doughnuts, teacups etc.
g X v
E R S
loop and advance the gate
(pseudo) winged-edge structure
stores CLERS opcodes
stores vertex positions
stores “deferred” loops
== boundary vertex after the op
continue with the other loop
from the stack
History = (null) P11 P1 P2 P3 P4 P5 P6 P7 P8 P9 P10 Stack
(initial)
C
History = C P12 Stack
(before op)
P11 P1 P2 P3 P4 P5 P6 P7 P8 P9 P10
C
History = CC P12 P13 Stack
(before op)
P11 P1 P2 P3 P4 P5 P6 P7 P8 P9 P10
R
History = CCR P12 P13 Stack
(before op)
P11 P1 P2 P3 P4 P5 P6 P7 P8 P9 P10
R
History = CCRR P12 P13 Stack
(before op)
P11 P1 P2 P3 P4 P5 P6 P7 P8 P9 P10
R
History = CCRRR P12 P13 Stack
(before op)
P11 P1 P2 P3 P4 P5 P6 P7 P8 P9 P10
S
History = CCRRRS P12 P13 g' Stack
(before op)
P11 P1 P2 P3 P4 P5 P6 P7 P8 P9 P10
L
History = CCRRRSL g' P12 P13 g' Stack
(before op)
P11 P1 P2 P3 P4 P5 P6 P7 P8 P9 P10
E
History = CCRRRSLE g' P12 P13 g' Stack
(before op)
P11 P1 P2 P3 P4 P5 P6 P7 P8 P9 P10
L
History = CCRRRSLEL P12 P13 Stack
(before op)
P11 P1 P2 P3 P4 P5 P6 P7 P8 P9 P10
C
History = CCRRRSLELC P12 P13 P14 Stack
(before op)
P11 P1 P2 P3 P4 P5 P6 P7 P8 P9 P10
R
History = CCRRRSLELCR P12 P13 P14 Stack
(before op)
P11 P1 P2 P3 P4 P5 P6 P7 P8 P9 P10
R
History = CCRRRSLELCRR P12 P13 P14 Stack
(before op)
P11 P1 P2 P3 P4 P5 P6 P7 P8 P9 P10
C
History = CCRRRSLELCRRC P12 P13 P14 P15 Stack
(before op)
P11 P1 P2 P3 P4 P5 P6 P7 P8 P9 P10
R
History = CCRRRSLELCRRCR P12 P13 P14 P15 Stack
(before op)
P11 P1 P2 P3 P4 P5 P6 P7 P8 P9 P10
R
History = CCRRRSLELCRRCRR P12 P13 P14 P15 Stack
(before op)
P11 P1 P2 P3 P4 P5 P6 P7 P8 P9 P10
R
History = CCRRRSLELCRRCRRR P12 P13 P14 P15 Stack
(before op)
P11 P1 P2 P3 P4 P5 P6 P7 P8 P9 P10
E
History = CCRRRSLELCRRCRRRE P12 P13 P14 P15 Stack
(before op)
P11 P1 P2 P3 P4 P5 P6 P7 P8 P9 P10
– Allows reconstruction of topology.
interior vertices of the triangulation.
– Allows reconstruction of embedding.
– Write 0 for C – Write 100 for S – Write 101 for R – Write 110 for L – Write 111 for E
compressed using any good compression algorithm.)
= |C| + 3(|S| + |L| + |R| + |E|)
vertices VI.
(each op destroys one triangle)
(observe from algorithm)
(property of triangulations)
– e.g., a closed genus 0 surface can be “opened up”
by “cutting along” one of its edges; the resulting surface has a boundary of length 2.
– Compact repr. of any planar triangulated graph!
encoding can be made even shorter.
may be used, all of which guarantee b ≈ 2|T|.
[King-Rossignac '99] show coding schemes which guarantee 1.84|T| length for the encoded history of closed genus 0 meshes.
[Rossignac-Szymczak '99] show that entropy codes “usually” give 0.91|T| to 1.26|T| lengths.
convoluted) O(|T|2) algorithm.
– Traverses history in compression order, uses
preprocessing pass to compute constants + offsets and generation pass to actually recreate the graph.
“Wrap&Zip” algorithm.
O(|T|) algorithm.
– Traverses history in reverse order (why did it take
two years to devise this “obvious” scheme???)
E
History = CCRRRSLELCRRCRRRE Stack
(after op)
R
History = CCRRRSLELCRRCRRR Stack
(after op)
R
History = CCRRRSLELCRRCRR Stack
(after op)
R
History = CCRRRSLELCRRCR Stack
(after op)
C
History = CCRRRSLELCRRC P15 Stack
(after op)
R
History = CCRRRSLELCRR P15 Stack
(after op)
R
History = CCRRRSLELCR P15 Stack
(after op)
C
History = CCRRRSLELC P15 P14 Stack
(after op)
L
History = CCRRRSLEL P15 P14 Stack
(after op)
E
History = CCRRRSLE g' P15 P14 g' Stack
(after op)
L
History = CCRRRSL g' P15 P14 g' Stack
(after op)
History = CCRRRS P15 P14 Stack
(after op)
S
R
History = CCRRR P15 P14 Stack
(after op)
R
History = CCRR P15 P14 Stack
(after op)
R
History = CCR P15 P14 Stack
(after op)
C
History = CC P15 P14 P13 Stack
(after op)
C
History = C P12 P15 P14 P13 Stack
(after op)
C
History = (null) P12 P11 P1 P2 P3 P4 P5 P6 P7 P8 P9 P10 P15 P14 P13 Stack
(final)
might lie on the boundary of a hole.
the current loop with the hole.
situation where the third vertex v is on some
– Modify split operation S to mark and push additional
information about the deferred loop.
– When we reach a vertex marked as above, execute
an M' operation, which merges the two loops.
– [Isenburg-Gumhold '03] “Out-of-Core Compression
for Gigantic Polygon Meshes”, SIGGRAPH '03.
progressively decodable meshes?