Abstract
Most ray tracing libraries allow the user to provide custom
functionality that is executed when a potential ray surface interaction
was encountered to determine if the interaction was valid or traversal
should be continued. This is e.g. useful for alpha mask validation and
allows the user to reuse existing ray object intersection routines
rather than reimplementing them. Augmenting ray traversal with custom
intersection logic requires some kind of callback mechanism that injects
user code into existing library routines. With template libraries, this
injection can happen statically since the user compiles the binary code
herself. We present an implementation of this “custom intersector”
approach and its integration into the C++ ray tracing template library
Visionaray.