Wednesday, August 5, 2020

Horizon Zero Dawn PC Port Analysis

Sony’s announcement, made earlier this year, that Horizon Zero Dawn would be released on PC caused quite some uproar. And with good reason: it’s the first time that the company will release one of its flagship single-player first-party games on the platform. It is, as of yet, unknown whether this is a one-off exception, part of a new approach of porting older games, or even indicative of a larger strategic shift. What we can discuss in detail, however, is the quality of the game’s PC port. In this article I’ll get into its features, discuss the available graphics options, and most importantly point out some important and unusual performance properties to be aware of in order to get the most out of the game. cover

Feature Overview

Horizon on PC ticks all the basic boxes one would expect from a high-profile PC port in 2020: it supports arbitrary rendering resolution, unlocked framerates, ultrawide aspect ratios, and a sizable set of graphics options. All of these work as expected, with a few caveats. For one, the built-in frame limiter has proven relatively problematic for me, and as such I’d suggest always keeping it turned off and externally limiting the frame rate if desired. There is also an adaptive quality option which allows you to set a target framerate and have the game adapt the rendering resolution to try and keep it. While a very useful feature in theory, this is rarely desirable in practice, for reasons that will become more clear when discussing graphics options and performance. ultrawide_aspect_cutscenes Regarding ultrawide support, as you can see in the screenshot up top, it works great during gameplay and often looks fantastic. Cutscenes, however, remain constrained to 16:9 as shown above. This is not unusual, but the developers chose a rather unique way to fill the side areas: as you can see above, they show the left and right parts of the center, but darkened and blurred to some extent. While an interesting choice, I personally found it distracting compared to simple black bars, and hope that an option can be added for people who prefer those. An incredibly important – to me at least – related feature is the field of view setting. This is extremely welcome, and the game felt very claustrophobic when sitting directly in front of a large monitor without adjusting this setting. I’ve always argued that the best field of view for a 3D rendered game is a direct function of each individual player’s setup, including display size, distance and aspect ratio, and as such should always be a configurable option.

Input Mechanisms and Key Binding

Horizon Zero Dawn does a great job supporting various input methods and configuration preferences. General options such as toggling aim assist, changing sensitivity, switching between toggling and holding for movement options, and inverting camera directions are available regardless of input method. input_mapping The mouse and keyboard controls support full remapping, including the ability to map two distinct bindings to each action, which can be of great utility – for example when assigning actions to additional mouse buttons. Speaking of those, mouse button 4 and 5 are natively supported, while – as in most games – this is not the case for further extra buttons. The default controls feel very familiar to anyone who plays third person action RPGs on PC, with keys such as K, I, M and J doing exactly what you expect. Overall, as expected in an aiming-heavy game such as this, I found that it plays very well with mouse and keyboard and I prefer that to playing with a controller. There is one small nitpick I have concerning the controls. At first I was positively surprised to see that the game has an official Steam controller profile. However, sadly this profile uses the right touchpad in joystick simulation mode rather than trackball mode. As a big fan of the Steam controller I’m pretty sure that no one who actually likes the hardware uses this type of mapping for camera control, making the built-in support actually worse than not including a profile at all and falling back to the user’s defaults.

Graphics Options and GPU Performance

The PC version of Horizon Zero Dawn features a decent set of graphics options, which mostly range from “Low” over “Original” to “High” and “Ultra”. For a few options, there might also be an “Off” setting, and some are missing the ultra level. graphics_options There are several things to like in this graphics settings menu. First of all, each individual setting includes an image preview of its impact, and this is quite accurate for most of them. Secondly, the inclusion of an “Original” setting makes it easy to understand which options correspond to the level the console version operates at, and which go beyond it. Some of the settings, like “Textures”, “Anisotropic FIlter”, and “Motion Blur” are quite straightforward. The texture setting seems to have no measurable performance impact as long as you have sufficient GPU memory, so I suggest keeping it at the maximum supported by your GPU. Motion blur is more of a stylistic choice, I personally liked the game’s implementation of it. [widget path="global/page/imagecomparison" parameters="comparisons=%7B%22comparisons%22%3A%5B%7B%22caption%22%3A%22Impact%20of%20the%20%E2%80%9CModel%20Quality%E2%80%9D%20Setting%20(upper%20left%20quarter%20of%204K%20resolution%20screenshots)%22%2C%22images%22%3A%5B%7B%22id%22%3A%225f29f772e4b0d33753f64a0a%22%2C%22label%22%3A%22Model%20Quality%20Low%22%7D%2C%7B%22id%22%3A%225f29f774e4b0b4a7fbe59599%22%2C%22label%22%3A%22Model%20Quality%20Ultra%22%7D%5D%7D%5D%7D"] “Model Quality” is, as far as I am concerned, the single most important setting and the one which provides the largest improvement over the “Original” console visuals, beyond the obvious resolution and framerate. This setting controls the detail level of geometry shown and at which distance more detailed models are used. Note the differences in geometric detail on the mountain in the background, as well as the brick walls and some trees. Luckily, this setting also appears to have a relatively small performance impact in GPU-constrained scenarios, so I suggest keeping it as high as possible. The “Shadows” setting is somewhat disappointing: it only changes shadow resolution, there is no way to enable more advanced shadow features such as variable penumbras. In a game with very high-end visuals such as this, that would have been a very nice addition. As-is, the shadow setting does not have much of an impact visually (unless turned off entirely of course), and might be a candidate for reducing if you need to eke out a bit more GPU performance. [widget path="global/page/imagecomparison" parameters="comparisons=%7B%22comparisons%22%3A%5B%7B%22caption%22%3A%22Clouds%20%E2%80%9CHigh%E2%80%9D%20Compared%20with%20%E2%80%9CUltimate%E2%80%9D%22%2C%22images%22%3A%5B%7B%22id%22%3A%225f29f774e4b0d33753f64a0b%22%2C%22label%22%3A%22High%22%7D%2C%7B%22id%22%3A%225f29f778e4b0b4a7fbe5959a%22%2C%22label%22%3A%22Ultimate%22%7D%5D%7D%5D%7D"] The “Reflections” and “Clouds” settings each only have a visual and performance impact in very specific scenarios, as you would expect from their name: when a significant amount of reflections or clouds are visible on screen. Of particular interest is the clouds setting, which can have a large performance impact at the highest level. It also produces very beautifully detailed and lit clouds, but if you are trying to increase performance this might be one of the first choices to reduce. Finally, the game provides a choice of antialiasing methods. Here you can either select no AA, let the game decide, use one of the two common screen-space options – FXAA and SMAA – or use TAA. None of them has any significant performance impact so it comes down to an aesthetic choice. For a highly detailed game with tons of foliage, I personally feel like anything other than a temporal solution is completely inadequate for dealing with flickering and image instability. The built-in TAA is relatively sharp, and very good at dealing with opaque geometry edges and texture detail, but not ideal in terms of stability for alpha-tested surfaces. It would have been very nice to see an implementation of DLSS 2.0 in this game, which might have provided comparable or even better image stability combined with a nice performance boost. gpu_presets Talking about performance, the game features four presets, from “Favor Performance” to “Ultimate Quality”, which map to the individual settings as you would expect. In the chart above you see the impact of these settings on game performance in a GPU-limited scenario – 4k resolution at 100% scaling on an RTX 2080 Ti. Conducting reliable real-world testing in an open world game such as this is not easy. For all the data in this article I ended up loading a save game and performing the same set of movements for roughly one minute, and repeating this process three times per measurement point. The sequence includes quickly traversing the open world in an area with a lot of foliage and a herd of robots to the side, and should be somewhat representative. The “Average FPS” metric should be self-explanatory. “1% percentile FPS” is the framerate achieved by the worst 1% of frametimes recorded, and is a good general metric for smoothness of gameplay for most people. “0.2% percentile FPS” is more strongly affected by even individual framedrops, and a good metric to watch if you are extremely particular about frametimes. Note that I used the excellent CapFrameX for all the frametime analysis in this article. [caption id="attachment_238862" align="alignnone" width="720"]perf_test_sequence Part of my benchmarking sequence, which I got intimately familiar with after running it many dozen times.[/caption] With this general information out of the way, we can look at what the results actually tell us about the performance implications of each preset. What we note is that there is a rather significant step in at least some of the metrics for every single increase in quality. Combined with the observations above, my suggestion for people who need to get more GPU performance out of the game is to first look into reducing the preset to “Original”, preferably with the “Model Quality” and “Textures” settings increased, before reducing the rendering resolution.

Performance Deep Dive and CPU Performance

So far, we have only looked at the game’s performance in the GPU-limited case, which is actually relatively straightforward – the performance obviously scales with rendering resolution, some of the graphics settings, and general GPU hardware performance in a more-or-less expected fashion. However, there are some very interesting and important-to-know factors when it comes to what performance you can expect in a CPU-limited case, and what is required to ensure that you get the best possible performance out of Horizon Zero Dawn. Here are some of the unusual factors involved:
  • As noted previously, the internal framelimiter is not particularly consistent and also reduces performance measurably. It’s preferable to use external framelimiting if required.

  • HZD uses basic double-buffered V-sync if the in-game option is enabled, which means that the framerate will drop precipitously if rendering slightly misses the sync. Again, it is preferable to disable the in-game option and use external/driver-level vertical synchronization.

  • Unlike many recent games, there is a non-negligible performance difference between exclusive fullscreen and borderless windowed mode. I measured roughly 10% better performance in exclusive fullscreen.

  • Having a completely up to date driver is essential on both AMD and Nvidia GPUs. Prior to the latest driver version I was experiencing severe periodic stuttering which vanished with the latest driver.

  • The game makes significant use of PCIe bandwidth. Having your GPU connected via fewer than 16 PCIe lanes reduces performance to a larger degree than any other game either of us is aware of.
As such, to get the best possible performance out of the game, you should disable its internal framelimiter and V-sync, play in exclusive fullscreen mode, and ensure that your GPU actually has access to the full PCIe bandwidth – and this is how I performed all tests in this article. Since this section is designed to illustrate the performance of HZD when CPU-limited, a very low resolution (50% of 1080p) was used. cpu_core_scaling A question I was very curious about going into this article was how a relatively straightforward port of a high-end console game such as this would perform in terms of CPU core scaling when CPU limited. The chart above is designed to answer this question, and allows us to make some important observations:
  • The game scales well up to 12 hardware threads, at which point scaling appears to start levelling out.

  • While full cores without hyperthreading are relatively effective at keeping up the average FPS, when going below 8 hardware threads – regardless of whether these are full cores or just threads – the percentile metrics drop off immediately and heavily.

  • 4 cores with 8 hardware threads are sufficient to keep frametimes in a well playable range, with the 1% percentile FPS remaining above 60.

cpu_core_scaling_frametimes We can gain some further insight by looking into the frametimes over time of each of these samples. Clearly, there are three distinct streaming/loading “humps” that are visible and reproducible in each run. The more hardware threads are thrown at the problem – up to 12 that is, the lines for 8C 16T and 6C 12T are almost identical here – the more these humps are smoothed out. Below 8 HW threads they develop into significant stutters. cpu_freq_scaling As expected in a CPU-limited scenario, scaling with CPU clock speed is much more linear. Interestingly, as long as you have a sufficient number of cores, even a lowly 2 GHz clock speed is sufficient to run the game at an average of 75 FPS, with the lowest drops still remaining above 40.

Conclusion

Horizon Zero Dawn is a very beautiful game, and it arrives on PC in a version which allows for higher framerates, arbitrary resolution rendering, 21:9 aspect ratio support and a field of view adjustment option. It also features some graphics settings and improvements which significantly enhance its appearance compared to the console original, such as dynamic foliage and the “Model Quality” option. The controls have also been ported to keyboard and mouse very competently, largely making the game feel like a native PC action Adventure/RPG when played with this input option. [caption id="attachment_238861" align="alignnone" width="720"]conclusion HZD Gameplay at Native 4k Resolution with the “Ultimate Quality” Preset.[/caption] However, getting good performance out of HZD is more involved and finicky than perhaps it should be – with several in-game options being actively detrimental to performance or perceived smoothness in non-obvious ways, and an unusually high load being placed on the PCIe bus. While the two games are of course substantially different in their load profiles, it is hard not to compare this port to the very recently released Death Stranding, which is free of these more obscure performance concerns and offers DLSS 2.0 for significantly better image stability at lower GPU performance requirements. Overall, if all you want is 60 FPS and you have a relatively recent system and a sufficiently fast GPU for your target resolution, that should be easy enough to achieve as long as you take note of the settings and configuration requirements I pointed out in the performance deep dive section. However, chasing consistent very high framerates above that (e.g. 120 FPS) seems like a fool’s errand even on top-end hardware. Ultimately the game is a visual spectacle and the gameplay is not particularly fast-paced, so the severe sacrifices in graphics necessary to achieve even relatively consistent 120 FPS do not appear to be worth it in this case. Note: This article is based on a pre-release version of the game, and the developers have communicated that a day one patch will be available. This patch might mitigate or eliminate some of the performance peculiarities encountered in the pre-release build. [poilib element="accentDivider"] Peter "Durante" Thoman is known for developing the popular DSFix mod that fixed many problems with the PC port of Dark Souls. He co-founded PH3 Games, a studio that specializes in porting games to PC.

source https://www.ign.com/articles/horizon-zero-dawn-pc-port-analysis

No comments:

Post a Comment