jan-van-bergen / GPU-Raytracer

GPU Raytracer from scratch in C++/CUDA
MIT License
837 stars 47 forks source link

qbvh and other bvhs #23

Closed tigrazone closed 3 years ago

tigrazone commented 3 years ago

Is qbvh fast in traverse? Is qbvh builder use sah and bins on building stage? Is qbvh faster then others? Which bvh is faster in traverse and building and quality?

jan-van-bergen commented 3 years ago

The QBVH (4-way tree) and CWBVH (8-way tree) are both constructed by first building a 2-way tree (using full SAH, no binning yet) and then collapsing it (also based on SAH). The time it takes to collapse is negligable compared to the first building step.

On my laptop (with a Geforce 845m) the frame times for Sponza are as follows: BVH Type Time
BVH 416 ms
SBVH 402 ms
QBVH 210 ms
CWBVH 92 ms

So each BVH is about twice as fast to traverse as the previous.

tigrazone commented 3 years ago

Is your CWBVH build code is good without enable_bvh_optimization? or for CWBVH building enable_bvh_optimization is needed? optimization took too much time

jan-van-bergen commented 3 years ago

No BVH optimization is not strictly needed for good performance, but it can be used to squeeze out the last bit of performance at the cost of more preprocessing time. I guess I should actually disable it by default to get faster startup time.

tigrazone commented 3 years ago

One more question. Did CWBVH faster then sbvh in traversing?

jan-van-bergen commented 3 years ago

The SBVH is also a 2-way BVH, so the CWBVH is significantly faster. I've updated my previous comment to include SBVH in the table, as you can see its only slightly faster than standard SAH BVH

tigrazone commented 3 years ago

Thank you for answers