I’ve knocked down the next graphics feature: exponential soft shadow mapping!
Prior, I implemented traditional shadow-mapping, and they looked like this if you got close:
See those pixelated edges? Not very pretty, and it gets worse the closer you get. With these new shadows, they can have varying penumbra, and look much better at close range!
How It Works (In a Nutshell)
Overall, the algorithm has 2 parts: The conversion of linear-depth to exponential-depth, and the Gaussian blur. That first step takes your depth and runs it through the exponential function, scaling it up by some arbitrary constant prior to the function (helps with “shadow bleeding” when shadow samples of different objects are close to each other). The second part takes the exponential depth, and applies a Gaussian blur of a specified width. Mine does this through a compute shader, using the techniques specified in this great presentation by AMD. Finally, during shadow calculations, you calculate the exponential depth of the current z-value and multiply that by your exponential depth, and voila! Silky-smooth shadows.
Here’s a quick batch of pictures that show off the range of shadow blurs:
Soon as I finish up my MFBRDF rendering, it’ll be time to tackle SSAO, then the last project for this semester will be depth of field.