Download presentation
Presentation is loading. Please wait.
Published byΠάνθηρας Δασκαλόπουλος Modified over 5 years ago
1
Ray Classification for Accelerated BVH Traversal
Jakub Hendrich, Adam Pospíšil, Daniel Meister, Jiří Bittner
2
BVH Traversal San Miguel (7.8M tris) 2 2
3
Previous Work 5D ray-space [Arvo87, Müller17, …]
Shaft culling [Haines94, Bala99, Reshetov05, …] BVHs & SAH [Goldsmith87, Wald07, Ganestam15, …] Ray classification & Shaft culling: old ideas, but not used frequently because of not knowing how to combine them with modern BVHs 3 3
4
Main Idea 4 4
5
Accelerated Traversal
shaft = classify(ray) if (shaft.candidateList): stack.push(shaft.candidateList) else: stack.push(bvh.root) // original traversal kernel while (!stack.empty()): node = stack.pop() … 5 5
6
Construction Outline input: scene, BVH for each voxel in scene
for each interval in directional cube map construct frustum shaft geometry create candidate list 6 6
7
Shaft Geometry 7 7
8
Candidate List Construction
Starting from BVH root, replace nodes with children until a termination criterion is met: no intersection with the shaft leaf node low hit probability 8 8
9
Estimating Hit Probability
When to stop opening and replacing nodes with their children? crucial decision: too early: staying close to root, not saving many steps too late: long candidate lists, possibly adding trav. steps Considering: node hit ratio (20 sample rays) vs. threshold occlusion: don’t open nodes behind geometry 9 9
10
Memory Optimizations Raw memory complexity: 𝑂( 𝑠 3 𝑑 2 𝑘)
𝑠 and 𝑑: spatial & directional resolution, 𝑘 candidate list size Candidate list sharing among adjacent shafts Occupied Voxels – only voxels occupied by geometry View Dependent – ray sampling to determine shafts with many rays 10 10
11
Evaluation Setup std. C++11, threads, no SIMD PBRT v3 [Pharr16]
binary & quaternary BVHs 10 scenes, 3 cameras each (1920x1080 px, 8 spp) 11 11
12
Evaluated Variants Complete Occupied Voxels View Dependent Measured:
build size build time traversals per ray FirstHit / AnyHit / total render time 12 12
13
Rendering speedup Conference (330k tris) 13 13
14
Rendering speedup San Miguel (7.8M tris) 14 14
15
Rendering speedup Happy Buddha (1.1M tris) 15 15
16
Speedup wrt. Memory Consumption (Conference)
16 16
17
Conclusion Ray classification for accelerated BVH traversal
ray space subdivision + precomputed compact candidate lists algorithm for optimized candidate list computation Easy to plug into & use within existing framework Up to 1.25x speedup in PBRT 17 17
18
Future Work Wide BVHs & optimized traversal kernels
Tailor for any-hit usage Combine with path guiding [Müller17] Ray reordering [Bikker12] 18 18
19
Thank You! → Ray Classification for Accelerated BVH Traversal
19 19
20
Memory Layout 20 20
21
CL Length Distribution
Conference (330k tris) San Miguel (7.8M tris) 21 21
22
Candidate List Construction
stack.push(bvh.root) while (!stack.empty()): node = stack.pop() if (shaft.overlaps(node)): if (node.isInner()): p = shaft.getHitProbability(node, sampleRays) if (p >= minHitProbability): stack.push(all node.children) else: node = shaft.cullNodeSubtree(node) if (node.valid()): shaft.candidateList.append(node) else: // leaf shaft.candidateList.append(node) core part - great importance!!! Key for algorithm efficiency!!! 22 22
Similar presentations
© 2025 SlidePlayer.com Inc.
All rights reserved.