Performance Analysis: Firewatch
What went wrong with the PS4 release - and does patch 1.02 really fix all of the issues?
There's been a lot of talk about Firewatch and its sub-par performance on PlayStation 4 over the past few weeks and with the recent release of patch 1.02, we felt it was time to take a closer look. Frame-rate issues may not seem like a big deal for a narrative-driven adventure, but with a title based so much on traversing the environment, a wildly variable refresh and intrusive stutter definitely marred the experience. A patch was needed sooner, rather than later, and last week, developer Campo Santo delivered.
The game's initial sub-optimal state was both puzzling and disappointing, but to be fair, the developer was very open with the community regarding these issues. Members of the studio kept players up to date on problems as they were being addressed and the comprehensiveness of the fast-tracked patch is impressive - but what exactly went wrong in the first place and to what extent has the game been fixed?
A quick look at the launch code paints a clear picture of the technical issues surrounding the game. First and foremost, in its original form, Firewatch operated using an uncapped frame-rate with double buffer v-sync enforced leading the game to bounce between multiples of the 60Hz refresh rate. When pointing the camera in a less demanding direction, such as the sky, the frame-rate shoots up to 60 fps. Conversely, when looking forward, things snap back to 30fps or lower creating a very unstable level of performance. From the beginning we felt that a 30fps cap would help smooth things out.
The frame-rate difficulties found in version 1.01 are further compounded by an issue common with many Unity titles - stuttering and hitching. In Firewatch, this is often caused by the auto-save feature, which can be disabled, but there are plenty of other instances where it pops up on its own while drawing in new assets. When combined with the inconsistent frame-rate, the game can start to feel rather jerky at times.
Lastly, we have the rather disorienting camera acceleration issue. There is no sensitivity adjustment in the settings menu nor an option to fiddle with analog acceleration. In version 1.01, Firewatch simply jumps from a slow panning movement to out of control spinning far too quickly. You'll push the stick in one direction and, for a moment, it barely moves but just as you're pointing in the right direction, acceleration kicks in and it goes flying.
With the release of version 1.02, things get interesting - despite the vague patch notes, this updated version of the game manages to completely correct two of the issues mentioned above. The first is the inclusion of a 30fps cap - by capping the frame-rate, Firewatch no longer suffers from frame-time spikes and instead produces a more even level of performance. Beyond that, when the frame-rate inevitably dips below 30fps, there's a performance uplift in the region of 3fps on the latest code.
The issues with unwieldy camera acceleration arecompletely addressed as well. The right stick now responds more naturally enabling a more natural exploration experience. Improved controls and a stabilised frame-rate go a long way towards creating a much more playable game. In fact, at this point, it's fair to say that the PlayStation 4 now offers a great Firewatch experience - a radical transformation from the game's initial turnout.
But even with this genuine improvement, there still remains a lot of hitching and stuttering within the game, which seems tied in principally to streaming in new background assets - which happens a lot. Auto-saves also cause stutter too. It seems that the developer has toned down their frequency in order to alleviate some of the issues here. It's the one remaining performance blemish on what is otherwise a good experience. So what's happening here? We believe part of this answer is tied to the underlying game engine itself. In this case, Firewatch is built in Unity - a toolset designed to facilitate easier development of a game not unlike Unreal Engine or Frostbite.
It's easy to understand the appeal of Unity. It's simple to prototype a new game concept, the tools are very friendly, and there's a vibrant community out there to tap into. It seems like a great place to build a game. However, as things stand, the way Unity handles certain tasks isn't always optimal. In its current iteration, console developers familiar with the tech tell us that the engine struggles with proper threading, which is very important on a multi-core platform like PlayStation 4.
This refers to the engine's ability to exploit multiple streams of instructions simultaneously. Given the relative lack of power in each of the PS4's CPU cores, this is crucial to obtaining smooth performance. We understand that there are also issues with garbage collection, which is responsible for moving data into and out of memory - something that can also lead to stuttering. When your game concept starts to increase in complexity the things Unity handles automatically may not be sufficient when resources are limited.
Games built in Unity have a long history of suffering from performance issues. Unstable frame-rates, loading issues, hitching, and more plague a huge range of titles. Console games are most often impacted but PC games can often suffer as well. Games such as Galak-Z, Roundabout, The Adventures of Pip, and more operate with an inherent stutter that results in scrolling motion that feels less fluid than it should. In other cases, games such as Grow Home, Oddworld: New 'n' Tasty on PS4, and The Last Tinker operate at highly variable levels of performance that can impact playability. It's reached a point where Unity games which do run well on consoles, such as Ori and the Blind Forest or Counter Spy, are a rare breed.
There is some hope on the horizon, however - the latest update of Unity, version 5.4, is scheduled for March 16th. We're told that this will include a number of performance enhancements including better threading - something very useful for CPU-limited consoles. Members of Campo Santo, the game's developer, have already posted a number of tweets suggesting that these improvements are in the works for Firewatch.
However, ultimately we feel that Unity was not entirely to blame here for the initial state of Firewatch. Two of the primary issues fixed in version 1.02 could conceivably have been addressed during development. The frame-rate really should have been capped at 30 frames per second out of the gate when it was clear that there wasn't enough performance overhead to hit 60fps.
The wild spikes between 30 and 60fps in version 1.01 heavily impacted the game's fluidity and, as we now see, capping it at 30fps brings a level of consistency that was previous absent. It's odd that the game shipped as it did when some of these issues were obvious well before release. We noticed the lack of a frame-rate cap way back when the game was first shown on PS4 - seeing as this was addressed so quickly we're mystified as to why it was released in this condition.
The real shame here is that while patch 1.02 might not be perfect, it's a colossal improvement over the launch code - a night and day difference that emphasises that the game really shouldn't have shipped in that condition on day one. This is a short, narrative-driven adventure game but it isn't the kind of title users will play and replay the game for months to come - it's a one and done kind of thing. We walked away from it really impressed on the PC but if our first playthrough had been on PS4's launch version, it's fair to say that we would have been sorely disappointed.
While Campo Santo has been very responsive in addressing complaints, it may actually be too late for some players. Thankfully, the major issues are now mostly resolved and new players will enjoy a superb experience - if you've been holding fire on a purchase, we can now highly recommend it, though we are curious to see whether a potential patch 1.03 can resolve the last, lingering problems.