Edgebreaker Connectivity Compression for Triangle Meshes Jarek - - PowerPoint PPT Presentation

edgebreaker
SMART_READER_LITE
LIVE PREVIEW

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


slide-1
SLIDE 1

Edgebreaker

Connectivity Compression for Triangle Meshes Jarek Rossignac, TVCG 1999

slide-2
SLIDE 2

Contribution

  • Lossless compression for a triangle mesh,

using ≈2 bits per triangle for simple meshes

– Only a slight increase for meshes with holes and

handles

  • Linear encoding size O(|T|)

– Improves upon O(|T| log |T|) for many previous

approaches

– The constant is better than for previous approaches

slide-3
SLIDE 3

Basic Idea

  • Destroy triangles of the mesh one-by-one,

starting from the boundary and spiralling inwards

  • For each destruction operation, store an
  • pcode indicating the type of the operation

– Sequence of opcodes is called “history” – Length of history == number of triangles, hence

linear size encoding

slide-4
SLIDE 4

Edgebreaker in action

C

slide-5
SLIDE 5

Edgebreaker in action

C

slide-6
SLIDE 6

Edgebreaker in action

R

slide-7
SLIDE 7

Edgebreaker in action

R

slide-8
SLIDE 8

Edgebreaker in action

R

slide-9
SLIDE 9

Edgebreaker in action

S

slide-10
SLIDE 10

Edgebreaker in action

L

slide-11
SLIDE 11

Edgebreaker in action

E

slide-12
SLIDE 12

Edgebreaker in action

L

slide-13
SLIDE 13

Edgebreaker in action

C

slide-14
SLIDE 14

Edgebreaker in action

R

slide-15
SLIDE 15

Edgebreaker in action

R

slide-16
SLIDE 16

Edgebreaker in action

C

slide-17
SLIDE 17

Edgebreaker in action

R

slide-18
SLIDE 18

Edgebreaker in action

R

slide-19
SLIDE 19

Edgebreaker in action

R

slide-20
SLIDE 20

Edgebreaker in action

E

slide-21
SLIDE 21

Terminology

  • Simple triangle mesh

– Edge-connected collection of triangles with one or

zero bounding loops

  • Piecewise linear surface homeomorphic to a disk or a

sphere

  • Hole: Interior triangles missing

– Like holes in a sheet of paper

  • Handle: The surface has genus > 0

– Doughnuts, teacups etc.

slide-22
SLIDE 22

Basics

  • Simple triangle mesh T
  • “Gate” g := some half-edge on bounding loop
  • X := triangle incident on g, v := third vertex of X

g X v

slide-23
SLIDE 23

Types of Triangles

  • The g-X-v combo can be one of the 5 types C L

E R S

  • Compression scheme: remove X, store the
  • peration (C, L, E, R or S), update the bounding

loop and advance the gate

slide-24
SLIDE 24

Data Structures

  • Mesh:

(pseudo) winged-edge structure

  • History H:

stores CLERS opcodes

  • List P:

stores vertex positions

  • Stack:

stores “deferred” loops

slide-25
SLIDE 25

Operation C (central)

  • v == internal vertex before the op

== boundary vertex after the op

  • Position of v is appended to list P
slide-26
SLIDE 26

Operation L (left)

slide-27
SLIDE 27

Operation R (right)

slide-28
SLIDE 28

Operation S (split)

  • Two loops created.
  • Push gate of one loop onto the stack and

continue with the other loop

slide-29
SLIDE 29

Operation E (end)

  • Loop shrinks to zero
  • Pop the gate of the next loop to be processed

from the stack

slide-30
SLIDE 30

Edgebreaker in action

History = (null) P11 P1 P2 P3 P4 P5 P6 P7 P8 P9 P10 Stack

(initial)

slide-31
SLIDE 31

Edgebreaker in action

C

History = C P12 Stack

(before op)

P11 P1 P2 P3 P4 P5 P6 P7 P8 P9 P10

slide-32
SLIDE 32

Edgebreaker in action

C

History = CC P12 P13 Stack

(before op)

P11 P1 P2 P3 P4 P5 P6 P7 P8 P9 P10

slide-33
SLIDE 33

Edgebreaker in action

R

History = CCR P12 P13 Stack

(before op)

P11 P1 P2 P3 P4 P5 P6 P7 P8 P9 P10

slide-34
SLIDE 34

Edgebreaker in action

R

History = CCRR P12 P13 Stack

(before op)

P11 P1 P2 P3 P4 P5 P6 P7 P8 P9 P10

slide-35
SLIDE 35

Edgebreaker in action

R

History = CCRRR P12 P13 Stack

(before op)

P11 P1 P2 P3 P4 P5 P6 P7 P8 P9 P10

slide-36
SLIDE 36

Edgebreaker in action

S

History = CCRRRS P12 P13 g' Stack

(before op)

P11 P1 P2 P3 P4 P5 P6 P7 P8 P9 P10

slide-37
SLIDE 37

Edgebreaker in action

L

History = CCRRRSL g' P12 P13 g' Stack

(before op)

P11 P1 P2 P3 P4 P5 P6 P7 P8 P9 P10

slide-38
SLIDE 38

Edgebreaker in action

E

History = CCRRRSLE g' P12 P13 g' Stack

(before op)

P11 P1 P2 P3 P4 P5 P6 P7 P8 P9 P10

slide-39
SLIDE 39

Edgebreaker in action

L

History = CCRRRSLEL P12 P13 Stack

(before op)

P11 P1 P2 P3 P4 P5 P6 P7 P8 P9 P10

slide-40
SLIDE 40

Edgebreaker in action

C

History = CCRRRSLELC P12 P13 P14 Stack

(before op)

P11 P1 P2 P3 P4 P5 P6 P7 P8 P9 P10

slide-41
SLIDE 41

Edgebreaker in action

R

History = CCRRRSLELCR P12 P13 P14 Stack

(before op)

P11 P1 P2 P3 P4 P5 P6 P7 P8 P9 P10

slide-42
SLIDE 42

Edgebreaker in action

R

History = CCRRRSLELCRR P12 P13 P14 Stack

(before op)

P11 P1 P2 P3 P4 P5 P6 P7 P8 P9 P10

slide-43
SLIDE 43

Edgebreaker in action

C

History = CCRRRSLELCRRC P12 P13 P14 P15 Stack

(before op)

P11 P1 P2 P3 P4 P5 P6 P7 P8 P9 P10

slide-44
SLIDE 44

Edgebreaker in action

R

History = CCRRRSLELCRRCR P12 P13 P14 P15 Stack

(before op)

P11 P1 P2 P3 P4 P5 P6 P7 P8 P9 P10

slide-45
SLIDE 45

Edgebreaker in action

R

History = CCRRRSLELCRRCRR P12 P13 P14 P15 Stack

(before op)

P11 P1 P2 P3 P4 P5 P6 P7 P8 P9 P10

slide-46
SLIDE 46

Edgebreaker in action

R

History = CCRRRSLELCRRCRRR P12 P13 P14 P15 Stack

(before op)

P11 P1 P2 P3 P4 P5 P6 P7 P8 P9 P10

slide-47
SLIDE 47

Edgebreaker in action

E

History = CCRRRSLELCRRCRRRE P12 P13 P14 P15 Stack

(before op)

P11 P1 P2 P3 P4 P5 P6 P7 P8 P9 P10

slide-48
SLIDE 48

Crux Observations

  • Different graphs have different histories.

– Allows reconstruction of topology.

  • There is a bijection between C operations and

interior vertices of the triangulation.

– Allows reconstruction of embedding.

slide-49
SLIDE 49

Compression

  • The history H can be encoded as follows:

– Write 0 for C – Write 100 for S – Write 101 for R – Write 110 for L – Write 111 for E

  • (The resulting binary string may be further

compressed using any good compression algorithm.)

slide-50
SLIDE 50
  • Number of bits required = b

= |C| + 3(|S| + |L| + |R| + |E|)

  • Denote boundary vertices VE and interior

vertices VI.

  • |T| = |C| + |S| + |L| + |R| + |E|

(each op destroys one triangle)

  • |C| = |VI|

(observe from algorithm)

  • |T| = 2|VI| + |VE| - 2

(property of triangulations)

  • Hence b = 2|T| + |VE| - 2 ≤ 3|T|

Compression

slide-51
SLIDE 51
  • Assume mesh has small boundary.

– 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.

  • Then b ≈ 2|T|, i.e. 2 bits per triangle.

– Compact repr. of any planar triangulated graph!

  • Since CL and CE sequences are impossible,

encoding can be made even shorter.

  • In other situations, different coding schemes

may be used, all of which guarantee b ≈ 2|T|.

Compression

slide-52
SLIDE 52
  • Improvement in guarantees:

[King-Rossignac '99] show coding schemes which guarantee 1.84|T| length for the encoded history of closed genus 0 meshes.

  • In practice:

[Rossignac-Szymczak '99] show that entropy codes “usually” give 0.91|T| to 1.26|T| lengths.

Compression

slide-53
SLIDE 53

Decompression

  • [Rossignac '99] proposes (somewhat

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.

  • [Rossignac-Szymczak '99] propose O(|T|)

“Wrap&Zip” algorithm.

  • [Isenburg-Snoeyink '01] propose single-pass

O(|T|) algorithm.

– Traverses history in reverse order (why did it take

two years to devise this “obvious” scheme???)

slide-54
SLIDE 54

Spirale Reversi in action

E

History = CCRRRSLELCRRCRRRE Stack

(after op)

slide-55
SLIDE 55

Spirale Reversi in action

R

History = CCRRRSLELCRRCRRR Stack

(after op)

slide-56
SLIDE 56

Spirale Reversi in action

R

History = CCRRRSLELCRRCRR Stack

(after op)

slide-57
SLIDE 57

Spirale Reversi in action

R

History = CCRRRSLELCRRCR Stack

(after op)

slide-58
SLIDE 58

Spirale Reversi in action

C

History = CCRRRSLELCRRC P15 Stack

(after op)

slide-59
SLIDE 59

Spirale Reversi in action

R

History = CCRRRSLELCRR P15 Stack

(after op)

slide-60
SLIDE 60

Spirale Reversi in action

R

History = CCRRRSLELCR P15 Stack

(after op)

slide-61
SLIDE 61

Spirale Reversi in action

C

History = CCRRRSLELC P15 P14 Stack

(after op)

slide-62
SLIDE 62

Spirale Reversi in action

L

History = CCRRRSLEL P15 P14 Stack

(after op)

slide-63
SLIDE 63

Spirale Reversi in action

E

History = CCRRRSLE g' P15 P14 g' Stack

(after op)

slide-64
SLIDE 64

Spirale Reversi in action

L

History = CCRRRSL g' P15 P14 g' Stack

(after op)

slide-65
SLIDE 65

Spirale Reversi in action

History = CCRRRS P15 P14 Stack

(after op)

S

slide-66
SLIDE 66

Spirale Reversi in action

R

History = CCRRR P15 P14 Stack

(after op)

slide-67
SLIDE 67

Spirale Reversi in action

R

History = CCRR P15 P14 Stack

(after op)

slide-68
SLIDE 68

Spirale Reversi in action

R

History = CCR P15 P14 Stack

(after op)

slide-69
SLIDE 69

Spirale Reversi in action

C

History = CC P15 P14 P13 Stack

(after op)

slide-70
SLIDE 70

Spirale Reversi in action

C

History = C P12 P15 P14 P13 Stack

(after op)

slide-71
SLIDE 71

Spirale Reversi in action

C

History = (null) P12 P11 P1 P2 P3 P4 P5 P6 P7 P8 P9 P10 P15 P14 P13 Stack

(final)

slide-72
SLIDE 72

Patching holes

  • While processing a loop, the third vertex v

might lie on the boundary of a hole.

  • Solution: Introduce M operation which merges

the current loop with the hole.

slide-73
SLIDE 73

Handling handles

  • While processing one loop, we might run into

situation where the third vertex v is on some

  • ther loop created by a previous split operation.
  • Solution:

– 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.

slide-74
SLIDE 74

Discussion

  • What about huge meshes?

– [Isenburg-Gumhold '03] “Out-of-Core Compression

for Gigantic Polygon Meshes”, SIGGRAPH '03.

  • Can a different decimation order yield

progressively decodable meshes?