Spherical Harmonics in games

Here is everything you really need to know about spherical harmonics to use them in games:

0. Spherical Harmonics are not scary at all :)
1. An Efficient Representation for Irradiance Environment Maps
2. Spherical Harmonics in Actual Games
3. Spherical Harmonic Lighting: The Gritty Details
4. DirectX SDK samples contain all the C++ and HLSL code that you might need to get started.

C++ code to calculate shader constants for evaluation on GPU:
IrradianceVolume\PRTMesh.cpp, CPRTMesh::ComputeSHIrradEnvMapConstants()

HLSL code to evaluate SH for a given normal:
IrradianceVolume\SHIrradianceEnvMap.fx

Also, DirectX SDK comes with a bunch of functions to get you going quickly. For example there is D3DXSHProjectCubeMap(), which generates spherical harmonic coefficients from a given cubemap.

PS: There one thing to keep in mind, though: SH are not the only option for storing lighting information. One great alternative is Valve’s Ambient Cube (page 28), which gives quality somewhere between 2-band and 3-band SH.

Comments are closed.