Where the heck have I been?
I have spent the past weeks wrapping up my final two courses of my Master's Degree. Two presentation to give today, and then the course work is finished - leaving only my thesis to write. Now to find a topic for the thesis...
Convolution Shadow Maps
One of the two presentations mentioned above is a recap of convolution shadow maps. It is surprisingly not discussed very much in the world of shadowing techniques, although it is a relatively new method. The original paper can be found on Thomas Annen's home page. The basic concept is to change the visibility query to a Fourier Series expansion of a step function. It works out that the Fourier Series terms are separable with respect to the input objects depth and the depth values represented in the depth map, which allows for pre-filtering of the basis terms. (see paper for all the good details!)
This original implementation had some pretty steep memory/bandwidth requirements, but a recent technique extension from August 2008 has significantly improved the algorithm and reduced the needed memory. This updated paper can be found on Thomas' home page as well here.
After a short while to implement the function, I was pleasantly suprised at the quality of the results. I go from this unfiltered result (notice the size of the shadow map texels!):
Using hardware mip-mapping and a 5x5 gaussian blur on the same shadow map, I get the following result:
There are drawbacks (as with any technique), but if controlled properly then CSM provides a fairly robust solution. Check out the papers and see how your implementation looks...
If only there were enough hours in the day I'd look into the papers you referenced and try it myself. I still want to work on some shadowing algorithms [headshake]