Recently I wanted to improve the lighting in my game engine, naturally I looked towards Ambient Occlusion. I was considering SSAO but are there any better techniques? Maybe some that are Physically Based? Are there any other techniques that replace SSAO or HBAO+ entirely?

I am aware of VXAO but is that basically it?


Ambient occlusion cannot be physically based no matter what algorithm you use to calculate it. It's a simplification of global illumination that assumes all occluders only block light and are themselves completely black, which isn't true and generally makes corners darker than they should be.

Ideally, you would be using some kind of global illumination method, but they generally don't have enough resolution to capture the effect ambient occlusion simulates and screen space global illumination tends to be too expensive.

That means ambient occlusion is still a reasonable choice, even if it's not entirely physically correct. Screen space ambient occlusion methods are the fastest, but suffer from the limited information they have access to, which can lead to artifacts like halos around objects in the foreground and the edges of the screen. Having more information about the scene to calculate the AO from, like VXAO does, eliminates those artifacts, but it again comes at a performance cost.

In the end, it depends on your perf budget. The more time you can spend calculating global illumination and ambient occlusion, the better the results are going to look. This seems to be a solid resource about screen space ambient occlusion algorithms in particular. I've personally had good results with Alchemy AO accelerated for large radii with a depth mip-chain similar to the Scalable Ambient Obscurance paper.

For an alternative to traditional AO, there's Bent Normals and Cones in Screen-Space that I've heard a lot about. As far as I understand it, the key difference is that instead of just calculating how much a point in space is occluded, it also captures information about what directions in particular are occluded. This information is then later used for lighting, where only light coming from the unoccluded directions is considered. It's still not what you'd call physically based, but in my opinion it comes closer than the usual ambient occlusion.


Your Answer

