Kyle Hayward's


Deferred Instant Radiosity with CUDA & Optix


This is a real-time multi-bounce global illumination demo I developed for fun of working with Nvidia's Optix Ray-Tracing library. The demo is based on instant radiosity, using virtual point lights to provide the indirect illumination. The demo runs entirely on the GPU, including all ray-tracing.

The scene is uploaded as a triangle mesh to Optix along with a list of lights. For each light rays are shot out in a hemisphere (area lights), and when a ray intersects geometry a VPL is created. At each intersection the light ray can continue or be killed based on Russian roulette, up to a maximum of 3 bounces. All the VPLs are stored in a buffer that is copied to the CPU side after each Optix launch. The VPLs are then combined with the deferred rendering and rendered into the light buffer and composited into the final image.

In order to speed up the deferred lighting pass, VPL results are merged into an NxNxN voxel grid. VPLs that occupy the same voxel, are merged together to reduce the hundreds of thousands of lights to a manageable number of VPLs.

For more information visit:


  • Real-time Instant Radiosity Global Illumination

  • DirectX 9 / Optix

  • GPU ray-tracing

  • Physically based lighting using inverse sqrt falloff

  • Multiple bounces

  • Octree voxel grid of VPLs performance optimization

Screen Shots