Sponsored By

Featured Blog | This community-written post highlights the best of what the game industry has to offer. Read more like it on the Game Developer Blogs.

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

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

About the Author(s)

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

You May Also Like