1 / 55

Geometric Compression Through Topological Surgery

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.

Télécharger la présentation

Geometric Compression Through Topological Surgery

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

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

  4. Compressing Topology • Start with meshes having Euler Characteristic 2 (Deformable to sphere)

  5. Compressing Topology • Want to cut it into a planar mesh with lots of long triangle strips

  6. Compressing Topology • A MST on vertices indicates some interesting cut lines

  7. Compressing Topology • Notice how the edge boundary graph has 2 edges for each MST cut line

  8. Compressing Topology • Splaying our faithful Euler-2 characteristic mesh looks as follows

  9. Marching edge Compressing Topology • Note that in the flattened shape a binary graph can represent edges

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

  11. Not all cuts are equal • But some will earn you a prize from l’Institut Paul Bocuse in Lyons • Others…

  12. Not all cuts are equal

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

  14. 1st cut: spanning tree construction • Use edge length and run MST algorithm • Disaster with a capital D

  15. Actual attempt to make MST • Distance from edge midpoint to tree root

  16. Modification to improve result • 2 pass algorithm where only non-branching edges are allowed on 1st pass

  17. Concentric Rings Method • Choose a root, order by concentric rings

  18. Connect concentric layers • with triangle that minimize branches

  19. Final Mesh

  20. Concentric Rings applied to bone • Generating concentric rings makes for much longer triangle runs

  21. B=f(A)+B G=f(A,B,C,D)+G C=f(A,B)+c H=f(A,B,C,D,G)+H B D=f(A,B,C)+D E=f(A,B,C,D)+E C F=f(A,B,C,D,E)+F D F E G H Encoding Vertex Position • Vertex Spanning Tree offers mechanism for vertex position prediction • Build a prediction function based on samples from parents in run A • Store per-vertex fixed-point delta from given predictor

  22. Vertex Position Predictor • Assume a linear predictor f(v0…vK)=b0v0+…+bkvk • Thus estimate b0…bk by minimizing the least square error over all vertices of depth n>k for given model

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

  24. Results • They don’t all add up • Feels like they use the red herring called • ASCII VRML • To boost their results (sometimes literally)

  25. Results: (what a) Crock • About as lossless as a spam stock investment 12 bits per coord 10 bits per coord 8 bits per coord original

  26. Results: Crocodile

  27. Results:Architecture

  28. 17332 vertices x 12+34404 triangles x 12 = 248,832 80,056 x 19.63 = 1,571,499 80,056 /0.1658 = 482,864 Results:Architecture

  29. 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)

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

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

  32. The cool result

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

  34. Triangle Mesh Compression Costa Touma, Craig Gotsman Technion - Israel Institute of Technology

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

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

  37. Step 0: Make object closed

  38. Step 1: Pick tri for active list Specify node degrees:“add 6, add 7, add 4”

  39. Continue working with focus • Add 4, Add 8

  40. And now focus is done • Add 5, Add 5

  41. Active edge added twice: split • Add 5, Split 5

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

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

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

  45. 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% (!?)

  46. Results

  47. Decompression • Leaf triangle reconstructed from root id

  48. Decompression

  49. Decompression

  50. Decompression

More Related