Streaming Compression of Triangle Meshes Martin Isenburg University of California at Berkeley Jack Snoeyink University of North Carolina at Chapel Hill Peter Lindstrom Lawrence Livermore National Labs
Compression
physical – sleeping bags – compressed air JPG GIF digital – text, programs … – images – voice, music – movies
– Efficient Rendering – Progressive Transmission – Maximum Compression Connectivity Geometry Properties Mesh Compression “Geometry Compression” [ Deering, 95 ] storage / network main memory Maximum Compression
Current Schemes “Triangle Mesh Compression” [ Touma & Gotsman ‘98 ] “Cut-Border Machine” [ Gumhold & Strasser ‘98 ] “Edgebreaker” [ Rossignac ‘99 ] “Face Fixer” [ Isenburg & Snoeyink ‘00 ] “Degree Duality Coder” [ Isenburg ‘02 ] “Angle Analyzer” [ Lee, Alliez & Desbrun ‘02 ] “FreeLence” [ Kälberer et al. ‘05 ] “Out-of-Core Compression” [ Isenburg & Gumhold ‘03 ]
Current Approach
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 20 to 40 percent of the triangle array
Connectivity Traversal Entire Mesh As Input triangles vertices before compression starts create data structure for querying and marking connectivity
Large Meshes 3D scansisosurfaces
Large Meshes 3D scansisosurfaces
Limited Main Memory “Compressing Large Polygonal Models” [ Ho et al. ‘01 ] cut mesh into pieces, compress separately, stitch back together “Out-of-core Compression of Gigantic Polygon Meshes” [ Isenburg and Gumhold. ‘03 ] use an external memory structure 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”
Streaming
physical – water in a pipe – drip coffee digital – streaming formats audio video triangle meshes
Two Types of Streaming progressive non-progressive
Non-Progressive Streaming consume immediately potentially without end keep small buffer delete data if no longer needed small window
Streaming Mesh Formats interleave introduce finalize v v v f done 2 v f done 1 v ⋮ ⋮ ⋮ ⋮ vertex # 2 finalized not used by subsequent triangles vertex # 2 introduced not used by preceding triangles active “Streaming Meshes” [ Isenburg and Lindstrom ‘05 ] number of active vertices “width”
Outputting Streaming Meshes isosurface – 235 million vertices – 469 million triangles over 8 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 ]
Streaming Compression
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(); compare to standard API bool compress(FILE* file, int bits, int num_pos, float* positions, int num_tri, int* indices);
Streaming Compression ( 2 ) when writing a triangle – look-up active vertices – determine configuration – compress triangle + positions of new vertices – remove finalized data structures when writing a vertex – insert in hash
Possible Configurations start add start 1 fill join end written triangle active elements
Compressing a Triangle – configuration add fill – specify active vertex log 2 ( width ) bits better: use cache – specify other active vertices use local edge lists – position of new vertices parallelogram prediction – finalization flags add fill
Demo compress triangles immediately use delay buffer
Greedy Local Reordering Improving connectivity compression by reordering triangles in a delay buffer none K 5K 10K 50K delay buffer size bpv lucy (original) (spectral) (geometric) (breadth) (depth) st. matthew (original) (spectral) (geometric)
out-of-core compressed 344 MB pre-process 7 hours 4 hours compress main memory 384 MB disk space 11.2 GB streaming min MB 392 MB (coordinates uniformly quantized to 18 bits)
Example Processing Pipeline
P1 P2 P3 P1 P2 P3 P1 P2 P3 pipelined stream-processing Pipelined Stream-Processing conventional processing P1 P2 P3 – super-linear speedup – minimal end-to-end I/O delay – optimal disk caching
Demo Pipeline 256 regular volume grid smextract | smclean | smsimp | smcompress P2 P3 P1 P4 grid.raw mesh.smc v v v f done 2 v f done 1 ⋮ ⋮ ⋮ ⋮
Conclusion
Current Schemes do not Scale 9 GB 1 MB
Problems of Current Schemes 372 million triangles ( 4 GB ) 186 million vertices ( 2 GB ) dedicated out-of-core data structure ( 11 GB ) global reordering of mesh during compression entire mesh as inputIO-inefficient for large data
Streaming Approach bool open(FILE* file, int bits); bool write_vertex(float* position); bool write_triangle(int* index, bool* finalize); bool close();
out-of-core compressed 344 MB pre-process 7 hours 4 hours compress main memory 384 MB disk space 11.2 GB streaming min MB 392 MB (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 standardstreaming torso fighter 2.14 bpt3.88 bpt rate time 7 min 115 MB 8 sec 3 MB memory 1.81 bpt3.56 bpt rate time 11 min 140 MB 12 sec 6 MB memory
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 "Collaborative Research: Fundamentals and Algorithms for Streaming Meshes." – U.S. DOE / LLNL # W-7405-Eng-48 – Max Planck Institute für Informatik
Thank You streaming compression API :
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
# triceratops.obj # # 2832 vertices # 2834 polygons # v v v v ⋮ ⋮ ⋮ ⋮ f f f f ⋮ ⋮ ⋮ ⋮ 2832! permutations 2832! 2834! 4 different orderings = 1.6E possible descriptions rotations ! permutations 2806