I developed this technique 2 or 3 years ago to solve one of the main issues with shadow mapping: transparency. The only other solution I had heard of at the time was Deep Shadow Maps, which didn’t seem like something that could be done in real time.
It’s a really, really simple idea. First, render the shadow map, drawing semi-transparent objects with screen door transparency. Apply some softening to the shadows, and voila. Of course, there are two major drawbacks.
- It’s still noisy, unless you use a massive filter.
- The only softening technique that works is PCF. VSM (and possible ESM) doesn’t work because the method naturally creates big depth discontinuities, and the conventional fix for light bleeding eliminates the transparent effect.
Here’s a screenshot from 2-3 years ago. Looking at it again after all that time… if I had the capacity for it, I’d probably be embarrassed at how obscure it is. The filtering used was VSM, and you can see the problems – the shadows on the balls further away are cut off.
Since I am terrible at coming up with names, I called this technique “Screen Door Shadow Mapping”.
A few years wiser, I decided to have another go, making a couple of improvements:
- More reliable transparency pattern generation.
I’ll go over the finer detail of this technique in a later post. For now, you can have these test screens, which, hopefully, make a little more sense than the last one. Because three floating boxes casting shadows on a dimly lit room make more sense than four floating spheres casting shadows on a dimly lit sky-sphere.
I’ll post one last image with amplified colors.
This shot got me thinking – what if I could use this to fake caustics?
I’ll make sure to have a better demo scene next time. Until then…