Sponsored By

UE4 Engine Development

The many joys of NVIDIA GameWorks' HBAO+ and its... Multiple distributions and different integrations.

Trent Polack, Blogger

December 22, 2016

3 Min Read
Game Developer logo in a gray background | Game Developer

This post was originally posted at its lovely home on Joy Machine's website.

I'll resume both the system design and lighting & shading series of posts fairly soon (once things lighten up on the bizdev and actual game-making side a bit), but in the mean time, the joys of working within a custom fork of the behemoth known as Unreal Engine 4.

I integrated the 4.14 release of Unreal Engine 4 into my custom fork early last week. The 4.14 UE4 update was pretty great. So, since I have a fairly good workflow in place to (relatively) easily merge in UE updates into my fork, I did so.

And the merge went fine!

Unfortunately, changes made to the way UE handles Child Actor Blueprints (which I use pretty frequently) caused some... Issues. Like crash issues. Like frequent crash issues. Like crash issues that once resolved still resulted in a somewhat-corrupted blueprint where if you selected a certain variable, the editor would crash. So, you know, that was super great. But! I conquered it.

Since I was spending so much time in Visual Studio, I figured I'd re-integrated some GameWorks tech back into my fork (as I had wiped it clean for, well, reasons a few weeks ago). Namely, I needed to get NVIDIA's Horizon-Based Ambient Occlusion (HBAO+) back into the fold, as I haven't been extremely happy with UE's built-in screen-space AO.

So, I did that, and all was fine. Though, one thing I was beginning to notice is that the HBAO+ just wasn't as crisp as I wanted it to be. It was either too blurry or, as shown below, the non-blurred option isn't really viable due to the disparate pixel offsets.

So, I started searching around the internet of things a bit. And I discovered (fairly randomly) that the HBAO+ distribution I was using was version v2.4.

That, in and of itself, meant absolutely nothing to me, but I did see that GameWorks ShadowWorks was at v3.0. Score, I thought. So I downloaded the binaries and... HBAO+ was not included amongst them. It was a distribution for a shadowing method (hybrid frustum traced shadows, ie. HFTS). That was not helpful.

I tried some general-purpose google queries to see if I could nail down any information on whether or not HBAO+ had an updated version I could use (tangent: learning to intelligently search with google is the best skill you can ever learn). And - lo and behold - I found the binaries for a v3 distribution of HBAO+.

With the documentation for v2.4.

So, I went to the NVIDIA GameWorks developer's site and found the documentation for HBAO+. Also v3.0.

I then just started scouring GitHub (including NVIDIA's own repo) for anything related to HBAO+. And eventually I found the documentation for the version I had! Kind of. It was a bit out of date still, but I was able to at least have the primary header file to use as a reference for everything.

Of course, that's when I discovered that the header version I was using was not the same version as the binaries that I had found. Apologies for the image quality:

This was easy enough to resolve in theory, but I had to track down (through history) which repo ultimately had the latest version of the binaries.

But then success! And now, for a comparison between HBAO+ disabled (first image), HBAO+ v2.4 (second image), and HBAO+ v3.0 (final image).

Read more about:

Featured Blogs
Daily news, dev blogs, and stories from Game Developer straight to your inbox

You May Also Like