Silent Hill 2 on PC: another Unreal Engine 5 game blighted by stutter

1 month ago 68

There's much to commend in Bloober Team efforts - but smooth performance is off the table again.

Image credit: Konami/Digital Foundry

Like a lot of Unreal Engine 5 games, Silent Hill 2 stutters and it stutters a lot. Why is it happening? Can it be fixed? Looking for answers on this, I found myself tumbling down a rabbit hole, with this game - and others based on Unreal Engine 5 - presenting issues even more concerning than big lurches on the frame-time graph. Shader compilation stutter? That's not an issue in Silent Hill 2. Traversal stutter? Well, unfortunately that is - and it's highly problematic. However, similar to Star Wars Jedi: Survivor, there's also animation stutter. Even if you manage to stabilise performance, it's still impossible to enjoy a smooth, consistent experience in Silent Hill 2. We have some idea of why it's happening and even a highly makeshift solution, but even so, UE5 continues to present issues that continue to pile up as game after game falls foul of them.

Before we go into more depth on that, let's talk about Bloober Team's work more holistically. There's much to like and enjoy in terms of the PC version of Silent Hill 2. The graphics options are generally OK and there are some surprises too - like console-style dynamic resolution scaling support, even though it's only limited to Epic's TSR upscaler. Still, there's actual scaling beyond the PlayStation 5 version of the game, which is something I don't take for granted these days. For example, consoles tend to use software Lumen for diffuse global illumination and reflections, but the hardware-accelerated version is significantly better. Many PC ports don't even bother to offer hardware Lumen, but Silent Hill does via its 'ray tracing on/off' option, most obviously producing far superior reflections and more accurate indirect lighting. This is generally a good thing as PC's software Lumen implementation does not appear to offer the equivalent of UE5's epic setting here.

I am excited that the game offers unique RT features only found on the PC version, and often I thought the game looked really great, but I did notice a number of visual flaws too that deserve to be pointed out should they be able to be fixed in future patches. For example, nearly all cloth in the game I have seen so far runs at 30fps, no matter your frame-rate target, so fluttering drapes or flags in the wind look awkward and pretty poor. It's the same with cutscenes, which bafflingly lock to 30 fps using UE5's frame-rate cap. This should never be a 'feature' on a PC port, but to add salt to the wound, inconsistent frame-pacing is the order of the day if you're using v-sync. This impacts the PS5 version too in its performance mode as far as I can tell.

We've got problems with the bugs and stuttering issues in the PC version of Silent Hill 2 and while this article outlines the basics, the video goes into much more depth - with examples.Watch on YouTube

While hardware Lumen generally looks better, there are also bugs here. Grass can flicker, while the entire presentation can flicker momentarily when crossing consistent but seemingly arbitrary points in the game world. Lumen reflections also suffer from poor denoising presenting obvious 'boiling' effects, while moving leaves can 'leave' trails behind them. Other flaws and bugs present throughout, but it's been remarkable to see the PC community attempt to solve the issue with mods. DLSS ray reconstruction has been ported into the game, for example, solving the Lumen denoising problem convincingly, while DLSS .dll swap-outs can sort out the trailing leaves. Even I got into the spirit of things with .ini tweaks to add ray-traced transparency reflections instead of just Lumen probes and screen-space reflections, which greatly improves glass rendering. As always, PC modders are making the best of the situation, trying to make the game better - and hopefully Bloober takes inspiration from this. There's a lot of what we like to call 'low-hanging fruit' here: easy solutions that can demonstrably improve the game.

However, we shouldn't be expecting modders to fix UE5's perennial stuttering problems - and yes, there is distracting stutter you cannot fix, whether we're talking about mods, .ini tweaks or even using the most powerful PC hardware in existence. These are continuing, foundational problems with Unreal Engine that requires a software fix. The good news is that there is no shader compilation stuttering: there will be no hitching because shader code is being compiled on the fly as it is needed. Bloober Team seems to be tucking this into the loading process, where PC monitoring tools show your CPU maxing out on all cores. Traversal stutter though? That's here in spades, with even a top-of-the-range Ryzen 7 7800X3D momentarily hitching to 16-24ms. The game can consistently run at over 100fps, depending on hardware, so let's say an average 10ms per frame. To see frame-times double is noticeable and cannot be avoided and remember, this is on the fastest gaming CPU money can buy. On something like the more popular Ryzen 5 3600 - a mainstream CPU 'classic' - you can double that.

Reading online, I see a lot of people under the misconception that the situation is much better on PS5, but unfortunately it is not. There it is harder to measure the exact length of the stutters that are occurring due to v-sync getting in the way but it is plain as day to see they are all there and very obvious in fact in the game's 30fps mode. The difference is that frame-rate overall is much lower so the traversal stutter presents as a series of dropped frames as opposed to PC's sudden lurch down. PS5 can also seem to spread traversal stutter over a longer time period - so more a series of smaller stutters as opposed to one big spike, as seen on PC.

We've seen some people attempt to mitigate traversal stutter by following a similar route to consoles: artificially cap the game at a lower frame-rate and use superior CPU performance to contain the stutters within a frame update. For example, if Silent Hill 2 stutters to a max of 25ms on a certain CPU, capping to 30fps (33.3ms per frame) should contain the hitch within the regular update. This does work in giving a new frame every 33.3ms, but it does not work in giving smooth performance and here's where we find another key problem with Unreal Engine 5 that must be addressed: animation stutter. With frame-rate capped to 30fps and new frames consistently delivered, the PC version of Silent Hill 2 still stutters (!) - this time it's the game update that is affected. I'd recommend watching the video to see the problem in action and for a more detailed description of what we think the issue is.

The engine is operating on 'delta time' which should in theory deliver the same game speed no matter what the frame-rate is. If we disable this via launch parameters and force Silent Hill 2 to run at 30fps, we find that the issue is completely gone (unfortunately it does not seem to work at 60fps). Setting the game to a fixed tic means that if you allow the game to run at a higher frame-rate, it'll run at comically fast speeds. Slower frame-rate? Literal SNES-style slowdown. However, if you have enough horsepower to run at 30fps, the problem is fixed. Again, the video above shows some dramatic examples.

What this test shows is that something is deeply wrong in Silent Hill 2. Technically - albeit with massive air quotes - we have managed to 'fix' the game, but capping to 30fps is not a viable solution. As things stand, this game's problems led me down a rabbit hole where I have discovered something unexpected and even more troubling than just 'bad' frame-times. Something is very wrong here in Silent Hill 2, and the fact that I saw it in Star Wars Jedi: Survivor as well concerns me. Is this a Windows issue? Is this a game issue? Is this an Unreal Engine issue? Is it a combination of problems? I have no idea but surely this is not my job to fix - I can only report on it and hope that game developers and Epic itself become aware of the problem and eliminate it.

Continue reading