This will be a quick one. There is some required viewing/reading before diving in: Previously, with the FFXV standalone benchmark release, we found significant culling deficiencies of objects in the game, including both GameWorks and non-GameWorks objects. This suggested overall inefficiency and hasty development, as opposed to some sort of malfeasance. Square Enix later tweeted rather direct acknowledgement of the benchmark’s issues, and began work to optimize the game (and the GameWorks integration) for launch.
Today’s test is a quick one. Square Enix launched a playable demo of Final Fantasy XV and, although it’s still not the complete game, we wanted to see if any of the object culling issues had been addressed. We were primarily interested in HairWorks LOD scaling, as that was previously an issue responsible for causing performance loss on both nVidia and AMD hardware – even when no HairWorks objects were anywhere remotely close to the player.
First off, the settings for the playable demo have changed in a major way, as we’ve already reported. Square Enix has added customizable graphics options, but has also added another layer of presets. Previously, the graphics options were restricted to three presets: Lite, Standard, and High. Now, the game offers Low, Average, High, and Highest. Interestingly, all GameWorks settings are disabled in “High,” where previously all were enabled. Users also now have the ability to manually flip GameWorks options on and off, broken into HairWorks, VXAO, Turf, and ShadowLibs. Flow is not present in the current iteration of the settings menu, though is also decidedly less impacting on performance.
Our testing primarily focuses on toggling HairWorks on vs. off to create an A/B test (at Highest settings, 1080p) between AMD and nVidia. We are trying to determine whether HairWorks is still negatively affecting performance even when no HW monsters are present. As a general FYI, note also that the main characters do not ever use HairWorks. Using debugging tools, we were able to inspect the game and scrape main character hair meshes from memory:
This more or less shows that the hair is done through meshes, not through HairWorks, leaving only enemy/boss mobs to leverage HairWorks for the demo.
For testing, we’re using an Intel i7-8700K at 5GHz, coupled with GSkill 3200MHz CL14 memory and a GTX 1070 or RX Vega 56 graphics card. The latest drivers (as of 2/26/18) were used for testing, including nVidia’s game-ready drivers.
HairWorks Revisited in FFXV’s Demo
Our first objective was to determine whether the unnecessary HairWorks issue had been resolved, as that was causing the biggest performance concern; previously, we were seeing upwards of 17% performance deficit on nVidia cards from HairWorks, even when no HairWorks objects were present. This was a result of the buffalo that were rendering at all times, even when they were miles away. The hit was much larger on AMD – going from 30 to 40%.
In our first test site, at the Service Station, we noticed observed that toggling HairWorks on and off did not change performance. Any performance difference was a result of normal variance and error, and is not measurable within our test resolution. These results suggest that HairWorks is not being rendered when no HairWorks objects are present, which is correct – that’s how it should be and is significantly improved over the benchmark. We observed the same (correct) performance behavior out in the middle of the desert, with no HairWorks objects around.
Testing in combat versus the first boss mob, a user of HairWorks, we logged an on/off performance disparity of approximately 7% on Vega 56. The disparity was similar on the GTX 1070. Note that these results are not comparable to our initial benchmark where we discovered the issues, as this is a single mob entity with HairWorks. That means the boss is costing you 7-8% performance alone. In the initial benchmark, we had numerous buffalo objects that were being drawn with HairWorks, and those seemed to impact performance more heavily. We cannot therefore compare the two sets of results. We can say that there is objective performance cost for HairWorks when near objects. It does not appear to be as aggressively loaded as previously, fortunately.
Note that we also tested one more location: The first boss’ immediate surroundings, but after the boss had been slain and had disappeared from the screen. We saw zero impact from HairWorks on vs. off here, as expected:
And if you’d like a comparative chart for nVidia vs. AMD with HairWorks, see below:
Overall Improvement
As we show in the video accompaniment to this article, Square Enix has significantly improved LOD scaling, object culling, and GameWorks implementation for its demo. We were still able to scrape memory for objects which were sufficiently far enough away to go unrendered, like this tank:
But these objects are now being drawn at significantly lower LOD than before, as is apparent from the limited geometry above. Because these objects are being limited to just a few primitives, we do not believe they have a substantial, negative impact on performance at this time. The HairWorks LOD scaling issue has also been resolved, and other object culling issues have been partially addressed. It would appear that Square Enix is attempting to make good on its promise to improve performance for launch and, so far, we think they’ve improved things significantly versus the initial benchmark. Of course, this also reinforces the fact that the initial benchmark utility remains unusable for actual performance gauging in FFXV, but that’s far less important than improving the game. We’ll keep an eye on things for final launch.
Editorial, Testing: Steve Burke
Video: Andrew Coleman