Convolution Shadow Maps

Published December 03, 2008
Advertisement

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...
Previous Entry Direct3D 11!
Next Entry Year End Activities
0 likes 2 comments

Comments

jollyjeffers
Looks good - do you get reasonably good performance from the high-quality approach?

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]
December 04, 2008 07:29 AM
Jason Z
Yes, now that I'm finished with my classes I have made a promise to myself that I will take the time to implement a few of the more prominent shadowing algorithms. It has been a long time coming, and I have a few things that I want to try out...

The performance is directly dependant on the number of expansion terms that are used. If the shadow maps are small then the fill rate and bandwidth and memory requirements aren't too bad. You can get away with smaller maps due to the ability to filter them - similarly to VSM, but without the light bleeding.

I still need to try a few things out, but with the second linked paper I should be able to implement the whole algorithm with only a 4 term expansion, which is very comparable to other techniques in memory consumption (it would be a single channel depth map, plus two RGBA textures). We'll see how it turns out...
December 04, 2008 11:05 PM
You must log in to join the conversation.
Don't have a GameDev.net account? Sign up!
Advertisement