For those of you who aren't familiar with Ambient Occlusion
, it is used to approximate the perception of global illumination when resources aren't available to compute realistic full-scene lighting, which is almost always the case with games.
The previous technique we used was very fast, but it was a very poor approximation. It suffered from all kinds of overdarkening, and we couldn't properly setup the viewmodel hands while still getting good results in mid and far distance.
This implementation is based on the current new state-of-the-art
technique for Screen-Space Ambient Occlusion. It is much more accurate and robust, faithfully approximating the ground truth, or actual brute-force raytraced ambient occlusion.
The effect has been exaggerated in this shots. Notice how global shadowing now connects objects to the ground and they no longer look like they're hovering.
Surprisingly, it also turned out to be faster than our previous one, leveraging the use of temporal integration, as you can see from the FPS delta on the lower left corner.
Please note that it still has a few quirks and will be improved over time.