We present an implementation of node culling multi-hit BVH traversal in Embree. Whereas previous work was limited by API restrictions, as of version 2.10.0, Embree respects ray state modifications from within its intersection callbacks (ICBs). This behavior permits an ICBbased implementation of the node-culling algorithm, but requires a trick to induce culling once the necessary conditions are met: candidate intersections are accepted with a (possibly) modified tfar value, so that ray traversal continues with an updated ray interval. We highlight a scalar implementation of the Embree ICB and report results for a vector implementation in OSPRay that improves performance by as much as 2× relative to naive multi-hit when users request fewer-than-all hits.
[1]
David K. McAllister,et al.
OptiX: a general purpose ray tracing engine
,
2010,
ACM Trans. Graph..
[2]
Christiaan P. Gribble.
Node Culling Multi-Hit BVH Traversal
,
2016,
EGSR.
[3]
M. Pharr,et al.
ispc: A SPMD compiler for high-performance CPU programming
,
2012,
2012 Innovative Parallel Computing (InPar).
[4]
Ingo Wald,et al.
Embree: a kernel framework for efficient CPU ray tracing
,
2014,
ACM Trans. Graph..
[5]
Aaron Knoll,et al.
OSPRay - A CPU Ray Tracing Framework for Scientific Visualization
,
2017,
IEEE Transactions on Visualization and Computer Graphics.