+ All Categories
Home > Documents > Geometric Compression Through Topological Surgery Gabriel Taubin (IBM) Jarek Rossignac (Georgia...

Geometric Compression Through Topological Surgery Gabriel Taubin (IBM) Jarek Rossignac (Georgia...

Date post: 22-Dec-2015
Category:
View: 218 times
Download: 1 times
Share this document with a friend
Popular Tags:
55
Geometric Compression Through Topological Surgery Gabriel Taubin (IBM) Jarek Rossignac (Georgia Tech)
Transcript

Geometric Compression Through Topological Surgery

Gabriel Taubin (IBM)

Jarek Rossignac (Georgia Tech)

Problem Statement

Want to send mesh across network– Compress Losslessly

Want to save CPU time– Decompress on load

Want to get triangle strips– Save on vertex reads + transforms

Basic Idea

Use properties of planar graphs to compress– Extend to graphs 3d meshes using hacks

Lossily drop bits left & right out of vertex position since vertex pos dominates size– Use reasonably good predictor to “guess”

location

Compressing Topology

QuickTime™ and aTIFF (Uncompressed) decompressor

are needed to see this picture.

Start with meshes having Euler Characteristic 2 (Deformable to sphere)

Compressing Topology

QuickTime™ and aTIFF (Uncompressed) decompressor

are needed to see this picture.

QuickTime™ and aTIFF (Uncompressed) decompressor

are needed to see this picture.

Want to cut it into a planar mesh with lots of long triangle strips

Compressing Topology

QuickTime™ and aTIFF (Uncompressed) decompressor

are needed to see this picture.QuickTime™ and a

TIFF (Uncompressed) decompressorare needed to see this picture.

A MST on vertices indicates some interesting cut lines

Compressing Topology

QuickTime™ and aTIFF (Uncompressed) decompressor

are needed to see this picture.QuickTime™ and a

TIFF (Uncompressed) decompressorare needed to see this picture.

QuickTime™ and aTIFF (Uncompressed) decompressor

are needed to see this picture.

Notice how the edge boundary graph has 2 edges for each MST cut line

Compressing Topology

QuickTime™ and aTIFF (Uncompressed) decompressor

are needed to see this picture.

QuickTime™ and aTIFF (Uncompressed) decompressor

are needed to see this picture.

Splaying our faithful Euler-2 characteristic mesh looks as follows

Compressing Topology

QuickTime™ and aTIFF (Uncompressed) decompressor

are needed to see this picture.

QuickTime™ and aTIFF (Uncompressed) decompressor

are needed to see this picture.

Note that in the flattened shape a binary graph can represent edges

Marching edge

Compressing Topology

If we save these two graphs & 1 bit per marching edge graph as to how it fits to MST, we’ve got topology of Euler-2 meshes

QuickTime™ and aTIFF (Uncompressed) decompressor

are needed to see this picture.

QuickTime™ and aTIFF (Uncompressed) decompressor

are needed to see this picture.

QuickTime™ and aTIFF (Uncompressed) decompressor

are needed to see this picture.

Not all cuts are equal

QuickTime™ and aTIFF (Uncompressed) decompressor

are needed to see this picture.

QuickTime™ and aTIFF (Uncompressed) decompressor

are needed to see this picture.

But some will earn you a prize from l’Institut Paul Bocuse in Lyons

Others…QuickTime™ and a

TIFF (Uncompressed) decompressorare needed to see this picture.

QuickTime™ and aTIFF (Uncompressed) decompressor

are needed to see this picture.

Not all cuts are equal

QuickTime™ and aTIFF (Uncompressed) decompressor

are needed to see this picture.

QuickTime™ and aTIFF (Uncompressed) decompressor

are needed to see this picture.

QuickTime™ and aTIFF (Uncompressed) decompressor

are needed to see this picture.

QuickTime™ and aTIFF (Uncompressed) decompressor

are needed to see this picture.

Why cuts are not equal

Vertex edge graph stored as:– Integer: runlength– Bit: leaf?– Bit: more runs starting from here?

Longer triangle strips– Amortize-out 2 starting vertices– Faster rendering

1st cut: spanning tree construction

Use edge length and run MST algorithm

Disaster with a capital D

QuickTime™ and aTIFF (Uncompressed) decompressor

are needed to see this picture.

Actual attempt to make MST

Distance from edge midpoint to tree root

QuickTime™ and aTIFF (Uncompressed) decompressor

are needed to see this picture.

QuickTime™ and aTIFF (Uncompressed) decompressor

are needed to see this picture.QuickTime™ and a

TIFF (Uncompressed) decompressorare needed to see this picture.

Modification to improve result

2 pass algorithm where only non-branching edges are allowed on 1st pass

Concentric Rings Method

Choose a root, order by concentric rings

QuickTime™ and aTIFF (Uncompressed) decompressor

are needed to see this picture.

QuickTime™ and aTIFF (Uncompressed) decompressor

are needed to see this picture.

Connect concentric layers

with triangle that minimize branches

QuickTime™ and aTIFF (Uncompressed) decompressor

are needed to see this picture.

QuickTime™ and aTIFF (Uncompressed) decompressor

are needed to see this picture.

Final Mesh

QuickTime™ and aTIFF (Uncompressed) decompressor

are needed to see this picture.

QuickTime™ and aTIFF (Uncompressed) decompressor

are needed to see this picture.

QuickTime™ and aTIFF (Uncompressed) decompressor

are needed to see this picture.

Concentric Rings applied to bone

Generating concentric rings makes for much longer triangle runs

QuickTime™ and aTIFF (Uncompressed) decompressor

are needed to see this picture.

Encoding Vertex Position

Vertex Spanning Tree offers mechanism for vertex position prediction

Build a prediction function based on samples from parents in run

QuickTime™ and aTIFF (Uncompressed) decompressor

are needed to see this picture.

A

B

B=f(A)+B

C

C=f(A,B)+c

D

D=f(A,B,C)+D

E

E=f(A,B,C,D)+E

FF=f(A,B,C,D,E)+F

Store per-vertex fixed-point delta from given predictorG

G=f(A,B,C,D)+G

H

H=f(A,B,C,D,G)+H

Vertex Position Predictor

Assume a linear predictorf(v0…vK)=b0v0+…+bkvk

Thus estimate b0…bk by minimizing the least square error over all vertices of depth n>k for given model

Dealing with real meshes

Jump Edges– Ugly hack to deal with non-spheres– Read paper for “juicy” details

Making sure that edges line up after quantization + prediction

Results

They don’t all add up

Feels like they use the red herring called – ASCII VRML– To boost their results

(sometimes literally)

QuickTime™ and aTIFF (Uncompressed) decompressor

are needed to see this picture.

Results: (what a) Crock

About as lossless as a spam stock investment

QuickTime™ and aTIFF (Uncompressed) decompressor

are needed to see this picture.

original 12 bits per coord

10 bits per coord

8 bits per coord

Results: Crocodile

(a) (b) (c) (d)

Bits/tri 5.00 4.23 2.77 2.16

Vertex runs 1292 1528 80 168

Tri runs 2388 1612 1340 526

Bits/v-run 5 4 10 8

Bits/t-run 5 5 6 8

QuickTime™ and aTIFF (Uncompressed) decompressor

are needed to see this picture.

Results:Architecture

QuickTime™ and aTIFF (Uncompressed) decompressor

are needed to see this picture.

Results:Architecture

QuickTime™ and aTIFF (Uncompressed) decompressor

are needed to see this picture.

17332 vertices x 12+34404 triangles x 12 = 248,832

80,056 x 19.63 = 1,571,49980,056 /0.1658 = 482,864

Their stated results

Parsing a file in compressed binary is 20x faster than in ascii– So is transcribing it from stone tablets

Writing uncompressed binary is 30x faster than writing in ascii– Are they using printf or something?!– Unless you’re writing aligned data, this bitwise

stuff should kill your perf if you understand what you are doing, and it should be no slower than 2x-4x (ASCII is about 2-4x bigger)

Their stated results

Decompression reconstructs 60-90Ktris/s Takes same time to construct scene in

VRML as compressing it with their algo– If they would only compare to something

not-terrible Writing scene in compressed form is 10x

faster than in uncompressed.– If you’re writing to disk or network, sure

The cool result

Optimality analysis of their algorithm– Number of triangulations of simply

connected polygon of n+2 vertices

If enumerated and an index into triangulation is used, encoding requires log2(ceil(Cn)) bits. As n->inf expr-> 2

QuickTime™ and aTIFF (Uncompressed) decompressor

are needed to see this picture.QuickTime™ and a

TIFF (Uncompressed) decompressorare needed to see this picture.

The cool result

The cool result

Optimal fixed-length encoding 2bits per vertex

On some examples they do better– They have some evidence of better

performance than this fixed length scheme• on highly tesselated models• Like a bunny subdivided 2 times to have 38,000

polys (~1.5 bits per tri)– Potentially like a modern game model?

– Around 2.5 for other models

Triangle Mesh Compression

Costa Touma, Craig Gotsman

Technion - Israel Institute of Technology

Insight

In polygonal mesh that is orientable– Vertices incident on any mesh vertex may

be ordered Separation property

– If you cut out a ring of a mesh, it separates it into 2 disjoint meshes:

• set of vertices inside (may be empty)• set outside

Connectivity can be encoded by degree

Definitions

Vertex cycle– Cyclic sequence of vertices along tri edges

Active list– Vertex cycle at “wavefront” of encoding.

Mesh divided into portion of mesh encoded and portion not encoded

Focus– Vertex in active list being processed

Step 0: Make object closed

QuickTime™ and aTIFF (Uncompressed) decompressor

are needed to see this picture.

Step 1: Pick tri for active list

Specify node degrees:“add 6, add 7, add 4”

QuickTime™ and aTIFF (Uncompressed) decompressor

are needed to see this picture.

Continue working with focus

Add 4, Add 8

QuickTime™ and aTIFF (Uncompressed) decompressor

are needed to see this picture.

And now focus is done

Add 5, Add 5

QuickTime™ and aTIFF (Uncompressed) decompressor

are needed to see this picture.

Active edge added twice: split

Add 5, Split 5

QuickTime™ and aTIFF (Uncompressed) decompressor

are needed to see this picture.

QuickTime™ and aTIFF (Uncompressed) decompressor

are needed to see this picture.

Algorithm

Start with triangle, active list of 3 vertices Add n vertices (clockwise order) adjacent

to current focus to active list with “add <n>” command

If active list intersects itself, it is split to two active list with a “split <offset>” command

Merge case

This deals with genus 1+ objects (torus,etc)

If first free edge of active vertex is in active list of vertex, 2 possibilities– It is on current active list

• Split <offset>

– It is on active list already split• Merge <index> <offset>

Better prediction of vertex position

Have previous triangle Compute plane equation Assume next triangle is coplanar Encode error term

– Simple, elegant, low error Use codebook for most common errors

Results

For regular meshes– Get around .2 bits per vertex for topology

• With RLE

– Increasing quantization from 8-10 bits, size goes up by 30-40% (!?)

ResultsModel verts VRML

gzIBM conn

IBM cord

Our conn

Our cord

blob 8036 117K 3447 10352 1709 7951

tri 2832 44K 1523 3673 764 2937

eight 766 11K 363 1146 53 683

shape 2562 35K 713 4578 48 2990

beet 2655 36K 1585 4982 781 3576

eng 2164 24K 1041 4703 330 3425

dum 11738 114K 4929 20351 1210 11162

cow 3066 40K 1766 4878 779 3376

Decompression

Leaf triangle reconstructed from root id

QuickTime™ and aTIFF (Uncompressed) decompressor

are needed to see this picture.

Decompression

QuickTime™ and aTIFF (Uncompressed) decompressor

are needed to see this picture.

Decompression

QuickTime™ and aTIFF (Uncompressed) decompressor

are needed to see this picture.

Decompression

QuickTime™ and aTIFF (Uncompressed) decompressor

are needed to see this picture.

Decompression

QuickTime™ and aTIFF (Uncompressed) decompressor

are needed to see this picture.

Decompression

QuickTime™ and aTIFF (Uncompressed) decompressor

are needed to see this picture.

Decompression

QuickTime™ and aTIFF (Uncompressed) decompressor

are needed to see this picture.

Decompression

QuickTime™ and aTIFF (Uncompressed) decompressor

are needed to see this picture.


Recommended