460 likes | 628 Views
Streaming Compression of Triangle Meshes. Martin Isenburg University of California at Berkeley. Peter Lindstrom Lawrence Livermore National Labs. Jack Snoeyink University of North Carolina at Chapel Hill. Compression. digital text, programs … images voice, music movies. JPG. GIF.
E N D
Streaming Compressionof Triangle Meshes Martin Isenburg University of Californiaat Berkeley Peter Lindstrom Lawrence LivermoreNational Labs Jack Snoeyink University of North Carolina at Chapel Hill
digital • text, programs… • images • voice, music • movies JPG GIF Compression • physical • sleeping bags • compressed air
main memory Maximum Compression • Connectivity • Geometry • Properties storage / network Mesh Compression “Geometry Compression” [Deering, 95] • Efficient Rendering • Progressive Transmission • Maximum Compression
Current Schemes “Triangle Mesh Compression”[Touma & Gotsman ‘98] “Cut-Border Machine”[Gumhold & Strasser ‘98] “Edgebreaker”[Rossignac ‘99] “Face Fixer”[Isenburg & Snoeyink ‘00] “Angle Analyzer”[Lee, Alliez & Desbrun ‘02] “Degree Duality Coder”[Isenburg ‘02] “Out-of-Core Compression”[Isenburg & Gumhold ‘03] “FreeLence”[Kälberer et al. ‘05]
Underlying Assumption • original ordering of vertices and triangles is not important • no need to preserve it • compressor is allowed to re-order • impose “canonical” ordering • only encode connectivity graph • re-order mesh based on some deterministic traversal
Original Orderings rendering the first 20to 40 percent of thetriangle array
Auxiliary Data Structures getNext(h_edge); getInv(h_edge);getOrigin(h_edge); isBorder(h_edge);isEncoded(h_edge); markAsEncoded(h_edge); beforecompression starts inv flags 0 1 0 0 0 0 0 1 0 0 1 0 0 1 0 1 0 1 createdata structure for queryingand marking connectivity 1 0 1 1 1 1 1 0 0 1 0 0 0 0 0 0 1 0 0 1 1 1 1 Connectivity Traversal Entire Mesh As Input vertices triangles
Large Meshes 3D scans isosurfaces
Large Meshes 3D scans isosurfaces
cut mesh into pieces, compress separately, stitch back together “Compressing Large Polygonal Models” [Ho et al. ‘01] • use an external memory structure “Out-of-core Compression of Gigantic Polygon Meshes”[Isenburg and Gumhold. ‘03] Limited Main Memory • impossible to construct / store data structures for mesh traversal
Out-of-Core Compression • OoC-Mesh • on-disk clustering • construct in advance • cache LRU clusters • OoC-Compressor • make few queries
Out-of-Core Compression • OoC-Mesh • on-disk clustering • construct in advance • cache LRU clusters • OoC-Compressor • make few queries • Decompression • “streaming”
digital • streaming formats • audio • video Streaming • physical • water in a pipe • drip coffee • triangle meshes
non-progressive Two Types of Streaming • progressive
small window Non-Progressive Streaming • consume immediately • potentially without end • keep small buffer • delete data if no longer needed
not used byprecedingtriangles vertex # 2 introduced active not used bysubsequenttriangles vertex # 2 finalized number of active vertices “width” Streaming Mesh Formats interleave introducefinalize “Streaming Meshes”[Isenburg and Lindstrom ‘05] v 1.32 0.12 0.23v 1.43 0.23 0.92v 0.91 0.15 0.62f 1 2 3done 2 v 0.72 0.34 0.35f 4 1 3done 1 v 0.72 1.03 0.35 ⋮ ⋮ ⋮ ⋮
Outputting StreamingMeshes • isosurface • 235 million vertices • 469 million triangles over8 Gigabyte • marching cubes • extract layer by layer • output elements as extracted • finalize vertices of previous layer Richtmeyer-Meshkov instability simulation at LLNL
Streaming Simplification “Stream Algorithm for … ”[Wu & Kobbelt ‘03] “Large Mesh Simplification …”[Isenburg et al. ‘03]
compare to standard API • bool compress(FILE* file, int bits,int num_pos,float* positions,int num_tri,int* indices); Streaming Compression (1) • streaming API • bool open(FILE* file, int bits); • bool write_vertex(float* position);bool write_triangle(int* index, bool* finalize); • bool close();
Streaming Compression (2) • when writing a vertex • insert in hash • when writing a triangle • look-up activevertices • determine configuration • compress triangle • positions of new vertices • remove finalized data structures
Possible Configurations written triangle start add fill start1 end join active elements
add fill fill Compressing a Triangle • configuration • specify active vertex • log2(width) bits • better: use cache add • specify other active vertices • use local edge lists • position of new vertices • parallelogram prediction • finalization flags
Demo • compress triangles immediately • use delay buffer
Greedy Local Reordering Improving connectivity compression by reordering triangles in a delay buffer 18 lucy 16 14 (original) 12 (spectral) 10 (geometric) bpv 8 (breadth) 6 4 (depth) 2 st. matthew 0 (original) 25 50 1K 5K 100 250 500 10K 50K (spectral) none (geometric) delay buffer size
streaming 392 MB 7 hours --- pre-process 11.2 GB --- disk space 384 MB 12 MB main memory 4 hours 28 min compress out-of-core 344 MB compressed (coordinates uniformly quantized to 18 bits)
P1 P2 P3 • pipelined stream-processing P1 P2 P3 P1 P2 P3 P1 P2 P3 Pipelined Stream-Processing • conventional processing • super-linear speedup • minimal end-to-end I/O delay • optimal disk caching
Demo Pipeline regular volume grid v 1.32 0.12 0.23v 1.43 0.23 0.92v 0.91 0.15 0.62f 1 2 3done 2 v 0.72 0.34 0.35f 4 1 3done 1 ⋮ ⋮ ⋮ ⋮ 256 256 256 smextract | smclean | smsimp | smcompress P1 P4 P2 P3 grid.raw mesh.smc
Current Schemes do not Scale 9 GB 1 MB
Problems of Current Schemes entire mesh as input IO-inefficient for large data 186 million vertices(2 GB) dedicated out-of-core data structure(11 GB) global reordering ofmesh duringcompression 372 milliontriangles(4 GB)
Streaming Approach • bool open(FILE* file, int bits); • bool write_vertex(float* position);bool write_triangle(int* index, bool* finalize); • bool close();
streaming 392 MB 7 hours --- pre-process 11.2 GB --- disk space 384 MB 12 MB main memory 4 hours 28 min compress out-of-core 344 MB compressed (coordinates uniformly quantized to 18 bits)
Alternate Approaches • different re-ordering strategy • higher correlation • deterministic growing strategy • let compressor choose & correct • degree-based coding • need to relax “max delay” constraint • geometry • local coordinate system, angles, … • connectivity
Compressing Volume Meshes standard streaming 2.14 bpt 3.88 bpt rate torso 7 min 8 sec time memory 3 MB 115 MB 1.81 bpt 3.56 bpt rate fighter 11 min 12 sec time memory 6 MB 140 MB
Current/Future Work • implement more stream modules • streaming surface reconstruction • streaming stripification • streaming re-meshing • streaming smoothing • streaming segmentation • streaming feature extraction • streaming …
Acknowledgements • meshes • Stanford University, Cyberware • support • NSF grant 0429901 "Collaborative Research: Fundamentalsand Algorithms for Streaming Meshes." • U.S. DOE / LLNL # W-7405-Eng-48 • Max Planck Institute für Informatik
Thank You streaming compression API :http://www.cs.unc.edu/~isenburg/smc
Stream-Processing Modules • tasks that process mesh elements one at a time • e.g. for each triangle t … • tasks that only require access to local neighbors • e.g. for each triangle t of vertex v … • tasks that are order independent • e.g. collapse edges shorter than
2832! • 2834! • 4 differentorderings = 1.6E+18810 possible descriptions 2834 4 rotations 2834 # triceratops.obj## 2832 vertices# 2834 polygons#v 3.661 0.002 -0.738v 3.719 0.347 -0.833v 3.977 0.311 -0.725v 4.077 0.139 -0.654⋮ ⋮ ⋮ ⋮f 2806 2810 2815 2821f 2797 2801 2811 2805f 2789 2793 2802 2796f 2783 2794 2788⋮ ⋮ ⋮ ⋮ 2832! permutations 2806 2834! permutations