Featured Blog

UE4 Engine Development

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

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).

Latest Jobs


Playa Vista, Los Angeles, CA, USA
Senior Level Designer (Zombies)

PlayStation Studios Creative Arts

Petaling Jaya, Selangor, Malaysia
Lead Concept Artist

High Moon Studios

Carlsbad, CA, USA
Technical Designer at High Moon Studios

High Moon Studios

Carlsbad, CA, USA
VFX Artist
More Jobs   


Explore the
Advertise with
Follow us

Game Developer Job Board

Game Developer


Explore the

Game Developer Job Board

Browse open positions across the game industry or recruit new talent for your studio

Advertise with

Game Developer

Engage game professionals and drive sales using an array of Game Developer media solutions to meet your objectives.

Learn More
Follow us


Follow us @gamedevdotcom to stay up-to-date with the latest news & insider information about events & more