Jump to content
  • Advertisement
  • entries
  • comments
  • views

Convolution Shadow Maps

Sign in to follow this  
Jason Z


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...
Sign in to follow this  


Recommended Comments

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]

Share this comment

Link to comment
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...

Share this comment

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Advertisement

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!