Spherical Harmonics and applications in real time graphics (part 3)
February 12, 2017
This is a continuation of the tutorial on spherical harmonic applications for games. On the last page, we figured out the core math for integrating a basic diffuse BRDF with a spherical environment of incident light.
Efficient implementation
So far, we've been dealing with spherical harmonics fairly abstractly. But now we can get down to a concrete use and some concrete code. Given our input texture (which effectively describes a sphere of incident light on a point) we want to calculate, for a given normal direction, what is the appropriate diffuse response.
To explain that more visually, here's the images from the first page. The first one is the input texture, and the second one is the matching diffuse response (with the same mapping).
(images from sIBL Archive: http://www.hdrlabs.com/sibl/archive.html)
Recall that we've expressed the BRDF as zonal harmonic coefficients and the incident light environment as spherical harmonic coefficients. We've established that we need to use a "convolve" operation to calculate how the BRDF reflects incident light to excident light (this effectively calculates the integral of the BRDF across the incident sphere). We also worked out that we need to rotate the BRDF in order to align it with the direction of the normal.
To refresh, here's the equation for convolution and rotation:
The output of the convolve operation is a set of coefficients, and our final result will be the sum of those coefficients.
Simplifying
Let's define g by rearranging the convolve equation: