Extracting BVH from OptiX to manually traverse

In OptiX there is a class: OptixTraversableHandle, and I would like to extract the BVH information from this class and traverse it WITHOUT OptiX in order to model/demonstrate a speed up between my implementation of traversal and OptiX (for an academic project). There is no documentation on how to traverse the object without using traceRay, which would defeat my purpose, any advice?

Essentially the project is make the RT-Core code in CUDA to model that the RT-Core code is indeed accelerated using specialized hardware.

Welcome @thomasabbott916!

The RTX acceleration structure is proprietary and device dependent, therefore we do not offer any API or documentation for extracting it. The only way to traverse the structure is via optixTrace().


Hello David,
I am also interested in this topic. Could you please explain what is “device dependent”? Does it mean that the RTX acceleration structure can only be used in RT core?
In additon, can we use CUDA cores to traverse the RTX acceleration structure?
Thanks in advance.

The acceleration structure implementations are completely abstracted by the NVIDIA drivers.
This is necessary to be able to continuously improve their implementation and support different GPUs.

Their implementations changed among OptiX versions and each GPU architecture can have a different implementation due to available hardware features (== device dependent).
For example, each of the RTX GPU architectures (Turing, Ampere, Ada) has a different generation of RT cores, and each driver release can have changes to the internal acceleration data structures. It’s not feasible to access any of that information outside the NVIDIA drivers.

All that ray tracing functionality is only accessible via the higher level raytracing APIs: OptiX, DirectX Raytracing (DXR), and Vulkan Raytracing.

1 Like