Radiance Caching for efficient Global Illumination ComputationAbstractRadiance 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 work has been done in collaboration with IRISA / INRIA Rennes, France and the University of Central Florida, USA (see the radiance caching page at UCF).
Radiance CachingThe 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 ComputationTo improve interpolation quality, radiance gradients are computed during hemisphere sampling and stored in the cache. In [1] and [3], we propose two novel methods for computing the gradient, each having different pros and cons.
Coordinate Frame Alignment - Fast Spherical Harmonic RotationWhen 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 [4], we propose a fast approximate procedure for spherical harmonics rotation. Quality and Robustness Improvements - Adaptive Caching and Neighbor ClampingTo improve reliability if both irradiance and radiance caching, we propose in [5] 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 SplattingWe 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. VideoRadiance Caching:
Radiance Cache Splatting:Source CodeCode 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. libsphar.zipA 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. rcache.zipRadiance 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. Presentations
Ph.D. Thesis
Publications
AcknowledgementThis work was partially supported by
| ||||||||||||||||||||||||||||||||