OptiX: A General Purpose Ray Tracing Engine


in ACM Transactions on Graphics (SIGGRAPH 2010)


Steven G. Parker, NVIDIA
James Bigler, NVIDIA
Andreas Dietrich, NVIDIA
Heiko Friedrich, NVIDIA
Jared Hoberock, NVIDIA
David Luebke, NVIDIA
David McAllister, NVIDIA
Morgan McGuire, Williams College and NVIDIA
Keith Morley, NVIDIA
Austin Robison, NVIDIA
Martin Stich, NVIDIA

Paper (PDF) Abstract
BibTex
Acknowledgments

Abstract

The OptiX engine is a programmable ray tracing system designed for NVIDIA GPUs and other highly parallel architectures. OptiX builds on the key observation that most ray tracing algorithms can be implemented using a small set of programmable operations. Consequently, the core of OptiX is a domain-specific just-in-time compiler that generates custom ray tracing kernels by combining user-supplied programs for ray generation, material shading, object intersection, and scene traversal. This enables the implementation of a highly diverse set of ray tracing-based algorithms and applications, including interactive rendering, offline rendering, collision detection systems, artificial intelligence queries, and scientific simulations such as sound propagation. OptiX achieves high performance through a compact object model and application of several ray tracing-specific compiler optimizations. For ease of use it exposes a single-ray programming model with full support for recursion and a dynamic dispatch mechanism similar to virtual function calls.

Acknowledgments

The car, frog, and engine model in Figure 1 are courtesy of TurboSquid. The authors appreciate valuable comments from Dr. Greg Humphreys and benefited greatly from groundwork and numerous conversations on ray tracing with members of NVIDIA Research and the SceniX team.

BibTex

@article{Parker10OptiX,
 author = {Steven G. Parker and James Bigler and Andreas Dietrich and Heiko Friedrich and Jared Hoberock and David Luebke and  David McAllister and Morgan McGuire and Keith Morley and Austin Robison and Martin Stich},
 title = {OptiX: A General Purpose Ray Tracing Engine},
 year = {2010},
 month = {August},
 journal = {ACM Transactions on Graphics}
 }