150 likes | 265 Views
Hierarchical Occluders for Interactive Rendering of Large Models. Avneesh Sud. Motivation. The Dream of “Viewing the Double Eagle at 20 fps in ‘good’ fidelity”. Occlusion Culling. Hidden Surface Removal methods are not fast enough for massive models on current hardware
E N D
Hierarchical Occluders for Interactive Rendering of Large Models Avneesh Sud COMP236
Motivation • The Dream of “Viewing the Double Eagle at 20 fps in ‘good’ fidelity” COMP236
Occlusion Culling • Hidden Surface Removal methods are not fast enough for massive models on current hardware • Occlusion Culling avoids rendering primitives that are occluded by another part of the scene • Occlusion Culling techniques are ideally output sensitive – runtime is proportional to the size of exact visibility set COMP236
Related Work • Hierarchical Z-Buffer • Image space occlusion culling method [Greene’93] • Build a layered Z-pyramid with a different resolution of the Z-buffer at each level • Allows quick accept/reject • Hierarchical LODs • Simplification Culling : Approximate entire branch of the scene graph by an HLOD • Can we use HLODs as occluders/occludees? COMP236
Parallel Occlusion Culling • Bill Baxter’s idea of using separate pipelines for occlusion tests and rendering [Spring 2000] • Use the HZB for rendering acceleration COMP236
Hierarchical Parallel Occlusion Culling • Build an HLOD representation of the model and find a set of hierarchical occluders for culling • Build a HZB from the hierarchy of occluders in the occlusion pipeline • Test the objects against the HZB and pass the visible nodes to the rendering pipeline for displaying at the appropriate LOD COMP236
HPOC System • 4 Threads • Software Culling • Hardware Culling • Display • Load • LOD selection on pixel error • Display and Culling threads in synch or asynch modes COMP236
HPOC System Coarse HZB Coarse HZB All Nodes Camera VFC VFC SW Culler Occlusion Pipeline Maybe Occluded Visible Build HZB HW Culler Histogram Test Z-Buffer Visible Nodes Renderer Display Pipeline Render COMP236
Partitioning • Repartition the model for better visibility coherence – Karl Hillesland [Fall 00] • Worked well with small disconnected objects (e.g. split Double Eagle) • Fixed bug to work with connected meshes COMP236
Partitioning Even then – splits could be lopsided… Torpedo Room Leaf Object : 232627 faces of 705917 Try splitting across different axes if a split across the longest axis fails ! COMP236
Constructing the Scene Graph • Build an AABBTree hierarchy • Create HLODs from geometry at leaf nodes • Use GAPS to simplify geometry at each node • Need better terminating conditions for GAPS COMP236
Scene Graph AABBTree While the partitioning is smart, AABBTree subdivides across longest axis Rightmost leaf node of the AABBTree : Most of the geometry inside the shell is grouped into 1 node. Use a different partitioning hierarchy COMP236
Occluder/Occludee Selection Currently use same nodes for culling and display Bad Occludee Selection Close up top view of the double eagle : HPOC is rendering 323 objects and 160k polygons while there are 4 objects and 370 polygons visible. COMP236
Further Work • Better partitioning, HLOD construction • Memory management • Using coarser HLOD occlusion bounding volumes, finer LODs for occludee selection • Timing Analysis COMP236
Lessons • Working with massive models is a pain • Multithreaded massive model rendering is a bigger pain • Good Occlusion Culling is a tough problem COMP236