OmniAO: Upcoming ambient occlusion asset (comparison with HBAO+)

Hello everyone! For the past half a year I’ve been experimenting with various approaches to screen space ambient occlusion. From every idea and algorithm that I toyed with, I took the best and learned from the worst. It’s been more of a hobby than anything to me at the time. However, recently it finally started to shape into a version that I’m satisfied with, both in terms of quality and performance. I’ll let you form your own opinion, though…

Now, what else could I pick as a reference than the next-gen AAA standard, NVIDIA ShadowWorks HBAO+?

The detail combined with the very wide radius produces truly astounding results. However, on my 2 year old laptop GPU, it takes horrendous 10.31 ms, double that with per-sample AO turned on. Feel free to download it from the link above and see how well it runs on your machine.

Anyway, here is (almost) the same scene recreated in Unity, using OmniAO:

Let me point out the major differences: It runs on average at 4.52 ms using the current (quite high) settings, more than twice as fast as HBAO+! If that still sounds too high for you, note that this is an early, not very optimized version. Half resolution mode will also drop the cost significantly.

Quality-wise, it is based on a different algorithm (Alchemy AO). The shadowing tends to be softer and in my opinion more natural than HBAO. On the other hand, it’s currently missing a secondary detail pass (the dark sharp outlines). It is definitely coming though, as it’s useful when you want the details of your assets to really pop.

Amongst other traits planned like high customizability and adaptability, as well as zero shader keyword usage, is the focus on correct application of the AO to the scene, respecting lighting, gamma correction and fog.

As for the release date, my guess is a month or two. I’ll be unfortunately quite busy in the upcoming weeks.

So that’s it for now. I’d love to hear every one of your opinions, questions and suggestions.

Dolkar

4 Likes

So, I’ve just tried to set up Unity’s SSAO to match the above pictures as much as possible:

Full resolution, radius set to 0.8, sample count high. The quality, you can see for yourself.
The speed… well, on my machine, that thing takes unbelievable 25ms! That means my algorithm not only captures much more detail, but it’s more than 5 times faster than SSAO!

One thing I should mention, thanks to precomputations done on the depth buffer, the performance is largely independent on the world space radius. With a tiny 0.1m radius, it runs just as fast as when having a huge 2m scope of reference. The only setting that impacts the performance is the amount of samples used.

2 Likes

Very impressive and I am extremely interested. Especially in the zero keyword usage as I typically stay maxed out on keywords. Looking forward to more updates.

This one’s gonna cost me a pretty penny. Great work!

Excited for this. keep it up!

Anything ever come of this?

I unfortunately reached a couple of obstacles. Unity’s normal buffer has too low precision to support AO with wide radii without very visible banding. The screenshot above was made of the implementation using Jove as a renderer, so it doesn’t show as the normals are stored at a higher precision and in world space. I was hoping to bring something new to the table, but without support for very wide effect radius for low cost, it wouldn’t offer much more than existing AO solutions on the asset store, which there’s plenty of already.

Another feature I wanted to implement were deferred mode only bent normals / bent cones, which would turn flat “black” AO look into local shadows for both direct and directional ambient light (SH)… but Unity decided to apply ambient light in the G-Buffer pass, making this impossible to implement as well.

I apologize for not informing you sooner, but I guess I was hoping for some new idea to come up that would give me an incentive to keep working on this. For now, I’ve moved on to other projects, one of which you might be hearing about soon :slight_smile:

I don’t suppose I could convince you to send what you had my way (as I’m also using Jove)? <3

I don’t think it would be of much use to you, unless you’re using an old version of Jove… It went through a couple of heavy refactorings in the meantime, so it would take some effort to make it work again. The Jove version is also missing some optimizations, fine tuning and proper UI so I’m not really comfortable with sharing it in its current state. It will make its way to Jove eventually, though, together with bent cones.