 |

Submitted by , posted on 13 November 2003
|
 |
Image Description, by

This is my implementation of the SH (Spherical Harmonics) Lighting. What my little demo does is substitute a real light for its spherical harmonics projection. The algorithm is a little complicated but it boils down to
1) Get a light's position and color
2) Project that light into a environment map (spherical)
3) Get Spherical Harmonics coefficients from the environment map
4) Pass those coefficients to a vertex program that will do vertex level diffuse lighting
In the picture, the 2 upper images are obtained using normal lighting (OpenGL lights plus a vertex program to do the actual lighting), while the 2 bottom images are obtained using the spherical harmonics coefficients of the lights projected into the environment map. There are 3 lights in the scene.
I know that D3DX offers utility functions for calculating coefficients out of a given light, but here I coded my own utility functions. The demo is coded entirely in OpenGL. The papers I used are:
Spherical Harmonics Lighting: The Gritty Details - Robin Green (great because it explains very good the mathematics behind the technique)
An Efficient Representation for Irradiance Environment Maps - Ravi Ramamoorthi & Pat Hanrahan (good for the actual algorithm implementation explanation)
The GDC 2003 talk that Tom Forsyth and Peter Pike-Sloan gave.
The model I am using is taken from a tutorial from http://www.gametutorials.com. Keep up the good work guys.
The demo can be downloaded from:
http://www.zen32404.zen.co.uk/vlad/sh.htm
Any feedback is greatly appreciated
Vlad Stamate.
|
|