2022 was a rough year for PC ports. Between stuttering performance issues and infuriating user experience problems, I was almost broken as a reviewer for Digital Foundry. To start the year with a fresh slate, I thought it would be a good idea to put together a checklist of sorts for best practises in creating a PC port. In generating this list of dos and don’ts, I’ve called on my experience reviewing hundreds of titles across my four years at Digital Foundry.
The list is definitely not exhaustive as I am trying to focus on the important core aspects of a PC port. There are plenty of other best practises I can suggest beyond this – no launchers from within launchers, for example. No sign-ins to other online platforms to launch a game on Steam would be another. I’d also like to see some kind of industry-wide standardisation in presenting recommended specs that actually informs the prospective buyer of the kind of system they’ll need to run the game well – the current system is meaningless without the context of resolution and performance expectations. Clearly, there’s a lot to address – but my focus here is simply in delivering a strong, competent PC port.
Some of my suggestions are more technically rigorous, others are low hanging fruit: but most importantly all of them are feasible and I have examples to back them up. I’d also recommend watching the video – when everything comes together in a well-deployed PC port, it’s like poetry. The Days Gone settings menu is astonishingly good, for example. But for our first point, we’ll kick off with the big one.
1. Eliminate shader compilation stutter
You may have been aware of my #StutterStruggle over the last year. It’s the situation where no matter how powerful your PC hardware is, gameplay is regularly interrupted by stutter not found in the console versions of the same game. One of the biggest strengths in the PC platform is the diversity of hardware – but what this means is that developers cannot ship pre-compiled shader code with their games in the same way they do on consoles. What’s happening in a vast array of games on PC is that those shaders are compiled during gameplay, as they are needed. While that happens, the game freezes – anything from 30ms to a full second of pausing kicks in, depending on the game and the strength of your CPU. The frequency of these stutters is usually unacceptable in affected titles.
This can be eliminated, and how it is achieved is not too important, honestly. Shaders can be compiled with a pre-compilation step as seen in the Uncharted: Legacy of Thieves collection on PC, which makes you wait up to 10 minutes on a powerful CPU and even longer on a mid-range one. Shaders can also be compiled asynchronously in the background on the CPU, as seen in Star Citizen and Horizon Zero Dawn. A game can also use a combination of pre-compilation and asynchronous compilation like Spider-Man Remastered. The point is that anything and everything should be done to prep a shader by warming it somehow before it is required.
This item on the list definitely requires some technical rigour and thought, but it is probably the most important item on this list at the moment, given how disastrous the situation has been as of late. One other tip I have here for shader compilation is that if there is a lengthy pre-compilation step and you are worried about a bad user experience while they wait, then make the pre-compilation step interruptible or optional, with a warning that the user will experience stutter if they choose not to wait for precompilation. Modern Warfare 2 allows users to cancel and recompile shaders when they wish by clicking a button – and that’s great design.
2. Deliver visually responsive graphical options
The settings menu is a crucial part of a PC port, but it’s also a complete mystery to most gamers. What do the options actually do? What is ambient occlusion exactly? How much performance do I save by changing options? The way forward is to include a graphics menu that delivers responsive visual feedback. As mentioned early, the graphics menu in Days Gone is a masterpiece – arguably the pinnacle of graphics menu design.
You can change options in the menu while the game world is still being rendered behind the menu and in the top hand corner it is possible to see the performance impact of what is being changed in real-time. I seriously recommend emulating this style of graphical menu – it is important to have a menu like this or the one found in Spider-Man Remastered which is very similar because it allows the user to see the changes to the graphical presentation in real-time so they can easily see the effect on visuals and performance. Having to go in and out of a menu, or even worse, reload the game after a setting change makes meaningfully changing settings almost impossible.
If this is problematic to implement, there are alternatives: include descriptive text, visual indicators, and even performance hints as to what PC component is most stressed by the settings being changed. Gears 5 does this on PC and it gives great insight into what graphical options do. A lot of users tend to think a game’s performance is fully limited by what GPU they have, when in reality the CPU and the amount of video memory used can just as crucial in achieving good performance.
3. Include sensible, convention-driven menu navigation
Thousands of games over the last 30 years on PC have had menus and in that time a lot of conventions have arisen – and it’s important to stick with this established ‘language’ for navigation. For example, ESC or backspace should always back you out of a menu page. The arrow keys and even WASD should be usable to navigate a menu without using a mouse. Alt+ F4 should always quit the game to the desktop. There are more of these conventions of course, but the gist is that users should be able control the game menu rapidly, either with a mouse or a keyboard by its lonesome and it should use intuitive, established controls.
4. Do not overly nest menus
Graphical options, control customization, or other oft-toggled things should be three menus deep at the maximum, but preferably just one or two. For example, if you want to change the quality of a visual effect you should not have to go to options, then video options, then singular subpages for each type of graphical option. Instead, it should be simply going to options, video options and then seeing most, if not all, of the graphical options there. If possible, also avoid scrolling on options menu screens. Scrolling can be a bit slow and it hides options at times. A good example of a non-scrolling menu is seen in Arma 3. This game avoids scrolling by using both the left and right hand sides of the screen and with smaller text size – it is using the screen real estate. This is quite different from the left justified options with large text that we see in many ports to PC.
5. Refresh rate and resolution should be separate options
The list of resolutions and refresh rates should scan the available list of resolutions and refresh rates from Windows itself. All too often I load up a game just to find that the refresh rate in game is not even listed and a number of resolutions are missing. Furthermore, a user should control when the refresh rate changes by applying it: either by backing out of the menu or hitting ‘apply’. Do not automatically apply a resolution after it is changed: for example, in recent Capcom titles, if you move your mouse off the resolution option it changes to the last selected one automatically even if you do not want it to.
A good counter example can be found in Marvel’s Spider-Man Remastered, which does it in a more logical way – the resolution option is separate showing every single resolution that windows lists, then there is another option entirely to change the refresh rate of that chosen resolution – the resolution is only applied when the user wants it to be. Games that constrain resolution and refresh options to the current Windows desktop settings are a particular issue that needs to be eliminated.
6. Include a field of view (FOV) option
A narrow field of view is often found in console games to create claustrophobic moods or to save on performance – and can literally make PC users sick. A field of view option makes the game actually playable for many users where the default FOV might have been too narrow. Once again, the Days Gone menu system is a joy to use here – as you tweak the FOV variable, the view in the background changes in real-time, allowing the user to tweak to their precise preference.
7. Include variable aspect ratios and frame-rates
By and large, this is becoming common practice, but there are still games that don’t accommodate the huge variation in display types open to PC users. Not every PC player will be using a 16:9 monitor locked to 60Hz or 120Hz. Many will be playing on ultra wide monitors or on monitors that can go up to 240Hz or even higher. Supporting these aspect ratios and refresh rates means giving these users a comfortable experience that they expect from their hardware.
The bigger point here is that the PC is a platform with variable hardware and to support PC properly, nothing should be coded to be a fixed experience as it is with consoles. Users will want to play games at any frame-rate you imagine or any aspect ratio you should imagine: I love playing modern games on a 4:3 CRT monitor, for example. So, tying things like game logic to frame-rate, or the UI to fixed pixel grids is categorically a bad idea.
8. Include half, third and quarter-rate v-sync options with consistent frame-pacing
Many games have frame-rate limiters, but these often have really poor frame-pacing with v-sync engaged, where the average frame-rate might be the chosen number, but the frame-times making up that frame-rate are inconsistent, leading to a visually poor experience with inconsistent latency.
A good example how to do it correctly is found in Cyberpunk 2077 – here, there is a separate frame-limiter option with arbitrary frame-rate limiting, but there are comprehensive v-sync, half refresh rate v-sync, one-third rate v-sync, and quarter rate v-sync. With such an option users can get perfect frame-pacing when they limit their FPS, and they can do things like play at 40fps at 120Hz which is a killer feature for those looking for a higher frame-rate than 30 but wanting to crank up the settings.
9. Include multiple quality levels for heavy effects
Simple on/off toggles for heavy features like ray tracing are not enough: I’d like to see low, medium and high options for each RT effect. An example of how not to do it is found in The Witcher 3 Complete Edition on PC, where there are only on and off options for the various ray tracing effects. This has led to users making custom mod presets for the RTXGI featured in the game to reduce its quality to make it run better on lower spec RT-capable GPUs. This is an obvious example of an option that should be in the graphics menu. Control is another example where console optimisations – checkerboard RT reflections – never make their way across to PC. A feature that works for consoles invariably has utility on PC, too.
Similarly, RT effects should also scale to accommodate high-end GPUs – an example of how not to do this is found in Capcom games on the RE Engine, where the highest setting for the ray tracing in the game is of a bizarrely low quality. Marvel’s Spider-Man Remastered gets this right: you can control the resolution of the RT reflection effect, you can control the quality of the models in the RT reflections, and crucially, you can also control the distance and density of the objects being ray traced against, which allows users to control the effect of ray tracing on their CPU performance. Being able to control the BVH range and density is crucial in the modern era where CPU speed is not increasing as rapidly as it did in the past.
10. Include console features such as dynamic resolution scaling
Dynamic resolution scaling is not impossible on PC – there are many examples of good DRS on PC. Titanfall 2 has one of the best dynamic resolution scalers out there and it is feature complete on PC, operating just like the console version. This is a DX11 game which means that Respawn implemented an incredibly high quality dynamic resolution scheme on PC even though they technically had less control over the available PC resources that DX12 or Vulkan could offer them. If such a high quality implementation is available in this scenario, there is no good excuse really for a console version of a game to have DRS but for the PC version to omit it.
11. Include HDR and surround sound if the console versions support them
Not every PC is plugged into a standard desk monitor with the user wearing headphones – many people use their PCs with televisions with home theater setups, where HDR and surround sound are prominent. The basic rule is – if you are doing a feature on console, do it on PC.
12. Include console-equivalent settings as an option
If the game is on console and has customised console settings to make it run fine there, include an easily identifiable ‘console’ setting on PC as well. The recent God of War PC Port did this really well: there the console settings are called ‘original’ and the game starts with these settings by default. This is very smart as the settings chosen for the console version of a game generally offer good enough visual looks for acceptable performance.
My optimised settings guides often end up generating near identical settings that the console versions run at. A game’s graphical options should expose console settings in a transparent way. Effectively, console-equivalent settings are the developer’s choices for the best ‘bang for the buck’ on a midrange-level system, so why not offer the benefits of that wisdom to PC players too? These settings also offer a great starting point for PC users to tweak based on the capabilities of their own hardware.
13. Support all major image reconstruction technologies
Each GPU vendor has its own image reconstruction technique: Nvidia has DLSS, Intel has XeSS and AMD has FSR2. Each of these tends to run best on their respective hardware, and they all use similar inputs when being plugged into a game engine. In 2023 it should not be acceptable that a game launches with support for only one of these image reconstruction techniques, but not the others. And I really do not think it matters which GPU vendor is sponsoring the game: an AMD sponsored title should still support XeSS and DLSS, while there’s no reason why an Nvidia-supported title shouldn’t support XeSS or FSR2 – especially as there’s still many users on GTX 900 and GTX 1000-series GPUs who can tap into those technologies.
With that in mind, it’s disappointing to see The Callisto Protocol only ship with FSR2 when Unreal Engine supports all upscaling technologies. It’s equally frustrating to see A Plague Tale: Requiem only deliver DLSS support when a developer of Asobo’s quality can easily accommodate similar technologies. What ties these games together is that they’re really pushing graphics hard – and any kind of acceleration technology that opens the door to smoother performance should be embraced.
As I said at the beginning of this piece, 2022 was a truly dire year for PC gaming where myself and the team reached the point where we dreaded the arrival on a new PC port. Elden Ring arrived in a pretty disastrous state, numerous Unreal Engine 4 titles reached us with unbearable stuttering issues, culminating in the arrival of a literally unplayable build of The Callisto Protocol.
I’m putting these suggestions forward in the hope that Digital Foundry’s profile can affect change – and to be fair, there have been some positive signs. The Callisto Protocol on PC still has profound CPU utilisation issues, but the stuttering is a thing of the past thanks to a shader compilation step added to the game post-launch, exactly as I suggest in the first point above. Other UE4 titles like Sackboy: A Big Adventure and High on Life also received post-launch updates that attempted to address shader compilation issues. In discussing Fortnite’s Unreal Engine 5.1 upgrades, I was able to speak directly with Epic Games about this issue and I’m hopeful that things will improve.
However, while DF’s #StutterStruggle is at the forefront of the issues, the fact is that addressing this is just one of the key points out of several that should be addressed. There is no singular ‘platform holder’ in the PC space, so best practises and actual technical requirements can’t be enforced in the way that they are on Sony, Microsoft and Nintendo consoles. Even so, while the list above may seem like a lot of work, but in reality it’s about giving the same kind of attention to a PC port that’s often afforded to the console versions and delivering a game that won’t just run well on the hardware of today, but stands the test of time in the decades to follow.