Engine Development

Trent Polack
Joy Machine
Published in
3 min readNov 27, 2016

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.

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

--

--

Trent Polack
Joy Machine

Founder and CEO of Joy Machine. Making games for more than a decade as a developer, designer, effects & technical artist, creative director, and producer.