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