Radiance Caching for efficient Global Illumination Computation
Radiance Caching is a ray tracing-based method for accelerated global illumination computation in scenes with low-frequency glossy BRDFs. The method is based on sparse sampling, caching, and interpolating radiance on glossy surfaces. In particular we extend the irradiance caching scheme proposed by Ward et al. in 1988 to cache and interpolate directional incoming radiance instead of irradiance. The incoming radiance at a point is represented by a vector of coefficients with respect to a spherical or hemispherical basis.
The basic idea of radiance caching is to compute indirect illumination only at certain locations and then interpolate it elsewhere, as can be seen in Figure 1. Indirect illumination at a point is computed by hemisphere sampling, using 500-5000 rays, and stored in the radiance cache represented by spherical harmonics. Later, the stored values can be reused through interpolation.
Radiance Gradient Computation
To improve interpolation quality, radiance gradients are computed during hemisphere sampling and stored in the cache. In  and , we propose two novel methods for computing the gradient, each having different pros and cons.
Coordinate Frame Alignment - Fast Spherical Harmonic Rotation
When interpolating illumination on curved surfaces, care must be taken to properly align the (different) local coordinate frames, with respect to which the cached illumination is represented. This is achieved through spherical harmonics rotation. In , we propose a fast approximate procedure for spherical harmonics rotation.
Quality and Robustness Improvements - Adaptive Caching and Neighbor Clamping
To improve reliability if both irradiance and radiance caching, we propose in  the neighbor clamping heuristic, which equalizes the spatial distribution of cached illumination values thereby improving the image quality. Adaptive Caching, is designed to adapt the distribution of cached samples on glossy surfaces to the actual illumination conditions in the scene, with the purpose of avoiding interpolation artifacts.
GPU Implementation - Radiance Cache Splatting
We reformulated radiance and irradiance caching to make it more suitable for GPU implementation. Hemisphere sampling at a point is performed by the GPU using hemicube rasterization. The computed radiance is then directly splatted on the screen. This avoids searching for records in the octree data structure, as in the original radiance caching. The implementation delivers is high quality, first bounce global illumination at interactive frame rates.
Radiance Cache Splatting:
Code is in C++. You are free to use it for commercial and non-commercial purposes. If you do use it, please, acknowledge this web page. Mind this is a reserch code - much of it is useless for practical purposes.
A spherical and hemispherical harmonics library.
Supports storage of coefficents vectors, evaluation of basis functions, various implementations of spherical harmonics rotation (see rotation-howto.txt). Operation of coefficients vectors implemented using SIMD.
Radiance caching related sources from the GOLEM renderer.
You cannot compile these files as they are, since you would need the rest of GOLEM, which unfortunately is not open source. However, it should be pretty straightforward to port this to your renderer. Start reverse engineering from rt17app and rt19app, which are the actual rendering applications based on irradiance and radiance caching, respectively.
This work was partially supported by