The big Horizon Forbidden West PC tech interview with Nixxes and Guerrilla Games
How one of PS5's most advanced games made its way across to PC.
2022's Horizon Forbidden West is one of the most technically accomplished games produced for PS5, and today it gets a full release on PC with the Complete Edition that aims to add in new features and scale gracefully across a wide range of CPU and GPU hardware.
Porting specialists Nixxes created this new edition of the game with original Horizon Forbidden West developers Guerrilla Games, and key members of both teams spoke to Digital Foundry's Alex Battaglia ahead of the game's PC release.
From Nixxes, this interview includes Patrick Den Bekker (principal lead programmer), Craig Leach (senior systems programmer), Michiel Roza (principal optimisation programmer) and Julian Huijbregts (community manager). Guerrilla is represented by Jeroen Krebbers (lead tech programmer), Jeremy Laumon (principal tech programmer) and Misja Baas (senior art director). As usual, the text has been edited for length and clarity.
When did work start on Horizon Forbidden West for PC, and what was the working relationship like between Nixxes and Guerrilla?
Patrick Den Bekker - Nixxes: We normally start a project a year before it is released, so that would be February or March last year.
Jeroen Krebbers - Guerrilla: We at Guerrilla internally have a PC version, which is not the same as shipping a PC game... we use that for our internal tooling and also for verifying that our rendering backend and all of our subsystems work on PC, to make sure that can run tooling and bakes and things like that without requiring a PlayStation for everything. And that's usually the basis of starting a port, right? So there's a bunch of legwork that we do internally that is basically handed over to Nixxes, and they do the magic.
Patrick Den Bekker - Nixxes: We started with the renderer, which is already there and mostly feature-complete. Then we work to make that into a shippable PC game, because it only runs on certain GPUs on the tooling side, it just makes assumptions. It's also designed to do high-quality bakes, which doesn't mean it performs well on every machine.
Michiel Roza - Nixxes: It also didn't have any scalability options. So that's something we added.
Craig Leach - Nixxes: Also, it only allowed you to use the keyboard and mouse for debug stuff, so we need to add keyboard and mouse controls in. And obviously you've got a lot more controllers available on PC.
What were some of the learnings from the original Horizon Zero Dawn port? What did you want to do better or differently this time around?
Jeroen Krebbers - Guerrilla: On our side, preparing for scalability... on a console game, you don't necessarily need all the options that you would require on a PC game. It's more like a tailored experience, rather than a very customizable experience. So we did a lot of things on making sure that things can be turned on and off... also, in terms of performance, we obviously had to do a lot of work to get a cross-gen game out. And that didn't lead directly to PC scalability, but it informed and helped for sure. Also, just having more experience helped.
Patrick Den Bekker - Nixxes: We came a bit late to the party to Horizon Zero Dawn on PC, because we ended up just doing the final patches. But we did learn how to handle the PSO caches in this engine, what approaches worked better than others... For the most part, we didn't diverge too much from what we normally do, but every game and engine has its specifics...
Michiel Roza - Nixxes: We try to improve the shared libraries on every project that we do, and we just share those libaries with other projects, even those that are under active development.
One thing I noticed is that the UI and user experience options that are part of Forbidden West PC. For example, you can change graphics settings and see those changes happen live in the game - did that require specific engine changes?
Michiel Roza - Nixxes : We always try to do everything in real-time, even stuff that's not actually real-time - such as if you change your texture quality, you won't see that change in one frame because it's going to take some time to unload the textures.
Patrick Den Bekker - Nixxes: One of the bigger challenges is that the PS4 and PS5 versions, they have different data sets that are very optimised for that platform. On PC, we didn't want to have separate downloads for separate configurations, because it also conflicts with the live toggling of these options. So we decided to pick the highest-quality version, PS5, and then scale that down in some ways that can even go below PS4. That was partially done to be able to do all of these live changes... but that does require some different challenges, you are solving things in a bit different way... but it came out quite nice!
Craig Leach - Nixxes: The way it updates is kind of cool for people that are interested in game development... I got rid of that solid panel and you could see the updates in real-time propogate through the engine...
A big part of Nixxes ports is supporting ultrawide aspect ratios. What was like from an art perspective, changing scenes designed for 16:9 to support 21:9 and other aspect ratios?
Patrick Den Bekker - Nixxes: Obviously, on all projects we like to have an ultrawide option, and the game content isn't built for that. So we have animators and designers that go through all the cinematic content to make sure it's all clean on the sides - so you don't see popping, or characters not animating. That's usually the most time-intensive part. But it's always a really great addition to PC, so that's why we try to do it.
Julian Huijbregts - Nixxes: It's good to stress that this title has a very large amount of cutscenes. It was quite a big commitment! But we do support up to 32:9, even in cutscenes. By default, the black bars are turned on, which is partly a creative decision as the game is created for 16:9, but do feel free to turn black bars off and enjoy it on your 32:9 monitor, because I think it's quite enjoyable! And yeah, we did put a lot of work into that in terms of art and lighting.
Jeroen Krebbers - Guerrilla: We saw the game at 32:9 here at Guerrilla for the first time only two weeks ago, and it's amazing. Alex, if you haven't seen it yet, please find somewhere where you can see it.
I have a 4:3 and a 16:9 but no 32:9! I really wish I did - I obviously need that right here.
Jeroen Krebbers - Guerrilla: You don't know what you're missing.
What scalability options existed in the PS4/PS5 game already, and what was added for the PC version?
Jeroen Krebbers - Guerrilla: When people make content for PS4 or PS5, they can add LODs or change a few things to make it suitable for that system. In terms of memory useage, we don't have a fixed budget for streaming textures... a settlement might have a very heavy load on animations, models, characters, much more than in the open world. So we need to scale the texture streaming budget even on PS4 or PS5, and these things can be used by Nixxes to scale down. Resolution scaling is another big aspect, wherer you can set a target resolution for a preset and then scale performance to match, and that will reduce the amount of VRAM used. In terms of asset streaming, therer are a few things that can be scaled, like terrain detail or LODs can be popped in our out earlier or later... we tweaked them for PS4 and PS5. That's most of the scalability options, or is there anything else you at Nixxes introduced?
Michiel Roza - Nixxes : We introduced a whole lot more! We tried to leverage the PS4 content where we could, but we also looked at what else we could scale. For example, screen-space shadows can be turned off to get performance back, and clouds could use PS5 performance quality modes... We also added a memory manager, which we introduced in Marvel's Spider-Man. What it does make sure you never run out of VRAM. If you're almost running out, we start moving data back to system RAM, which does come at a performance cost, but we try to move stuff that's not necessary for a specific scene.
What areas were chosen that scale beyond the PS5 version on PC, besides resolution?
Michiel Roza - Nixxes : One of the easiest things is anisotropic filtering (AF), so we bumped that to 16x, though we didn't put it in a preset - people have to turn that on themselves. We also improved some of the shadow filtering and resolution.
One of the core technical features in terms of presentation was the visibility buffer used in the PS4 and PS5 versions. Does that come intact to PC?
Michiel Roza - Nixxes: The base rendering is pretty much the same, the only feature that didn't translate well to PC is deferred texturing, so we used a more traditional GBuffer approach.
Jeremy Laumon - Guerrilla: Deferred texturing is mainly an optimisation for PS4, for foliage mostly. But the way it's implemented on PlayStation is very console-specific and there was no easy solution to make it work on PC and have the same gains. So we did some other optimisations instead.
What about CPU optimisations? Obviously you have a fixed amount of threads on PS4 and PS5, but on PC you can have more or fewer. Did this require any changes or did the system already scale well to lower or higher core counts?
Michiel Roza - Nixxes : It's a job system that we made more dynamic, so it can go narrower or wider based on your CPU. And for some core counts, we had to... add a system where we can actually run jobs while we are waiting on the GPU. And on top of that, on PS4 and PS5, you can get away with a lot of spin locking, on the PC the Windows scheduler will see you're just wasting cycles basically, so it's going to preempt your threads at that point. So that's something else we had to change.
Jeroen Krebbers - Guerrilla: Historically we've always been very 'jobified', we had a PS3 version running on SPU with thousands of small cores. That obviously doesn't translate very well to even 32 core and 64 thread CPUs, but it's getting closer... We've continued doing that. One of challenges with the Burning Shores DLC for PS5 was the Horus, that huge robot that traverses the mountain and the beach. It's a gigantic entity that needed some excellent job application work to make performant, even on PS5. We always try to make sure that we can scale, we can split work up into separate jobs. That lets the game scale up and down based on thread count, though obviously not as much as on PC. And that's something that we like, because we can get something back from Nixxes as well and improve on our side as well.
Patrick Den Bekker - Nixxes: On PC, you have extra challenges as well, like where your OS and applications are running, you also need to handle data decompression... and also the PSOs. That requires a lot of CPU resources that you need to schedule in some way. It becomes really hard for lower core counts get everything right and get everything in there on time. That definitely requires some tweaking.
On both PS4 and PS5 there is dedicated decompression hardware, but on PC we don't have that - so how is asset decompression being done?
Patrick Den Bekker - Nixxes: We compress all the data on disk to reduce the amount of size it takes for the end user. Because of the limitations with GPU decompression, we decided not to use that part and do all decompression on the CPU. We get better results that way, both on the GPU and consistently across machines.
So it seems like BypassIO is being used, but GPU decompression is not, and neither is GDeflate, so what compression scheme did you use?
Patrick Den Bekker - Nixxes: That's actually one of the reasons not to support GPU decompression because it locks in your compression format, and GDeflate is very CPU-unfriendly. We'd love it if we could use decompression that works on both the CPU and GPU, because they we could make it optional for the user. We therefore decided to use LZ4 which, I think, is very, very fast on the CPU.
Michiel Roza - Nixxes : I think GDeflate is very useful if your game that is mostly CPU-bound and not GPU-bound, because it adds a lot of stress to the GPU. Therefore, we decided to do a very quick CPU-based decompression. In the past, we have done some tests with multiple different decompression types, and I think LZ4 always came on top. It's not the compression that makes the assets the smallest, but the trade-off between disk size and decompression speed was amazing for LZ4, so we've been using that quite a lot in our projects!
Patrick Den Bekker - Nixxes: As well as GPU bandwidth, there are also GPU scheduling issues from using GDeflate, so your frame-rate can become unpredictable... Hopefully we can convince them to support multiple compression types, becacuse at that point it makes it easier for us to opt in or for users to opt in... people can just experiment with what they like best.
Was ray tracing considered for Horizon Forbidden West, like the RT shadows in previous Nixxes PC port Shadow of the Tomb Raider?
Michiel Roza - Nixxes : It was definitely considered, and it's good that you mentioned Shadow of the Tomb Raider. There, we had to do an entire lighting pass to get RT shadows to work. And for this project, with the hours of cinematics and the scope... we decided that the game already looks really good, there's a strong direction here and we really didn't want to mess with it.
Jeroen Krebbers - Guerrilla: Don't forget a lot of the content is alpha-tested trees. I mean, a lot. Of course we have settlements and some hard surfaces, but most of it is really hard to ray trace against, even for shadows. There's a lot of content, maybe 100 square kilometres of content or more, and we'd need to go through the whole game... it's just mind-boggling... obviously having the scalability between PS4 and PS5 meant that we wanted to focus on stuff that would work on both PS4 and PS5, that sadly excluded RT. And it's not an easy addition to the PC version. We really like the tech of course. Watch this space.
One thing I wanted to go back to is PSOs. Interestingly, there's a longer 'burn' at the beginning of the game - 30s on a big CPU and around a minute on smaller CPU. That's reasonable - but what is the PSO process like, how are they collected?
Michiel Roza - Nixxes : It's similar to Spider-Man; we let QA collect all of the PSOs, collect them at the end of the week and merge them into a big database. One extra challenge in this game was that this game uses compute shaders that are mostly unique by tile to generate placements. If these shaders aren't ready in time, they cause streaming issues. To alleviate that, we front-load those specific shaders and that's the shader compilation step you see.
Are you happy with that PSO collection process for Forbidden West on PC - could automation be used as well? And how do you feel about the whole PSO issue for Windows gaming in general?
Michiel Roza - Nixxes : We do have an automated collection, which doesn't catch everything, but does make sure the game is in a playable state and QA won't run into a stutter fest every time we change the shaders... I think PSOs are not a great solution. It's the best we have, but I think something else can be done here. I really like the way Valve is handling it on the Steam Deck... and I wonder if that can be extended to PC as well.
Jeroen Krebbers - Guerrilla: Yeah, it would need a lot of collaboration between Microsoft, hardware manufaacturers and software developers to come to an understanding of how this should work. I've jokingly said like "why do we have GPUs that are so fast and yet we can't compile a shader on it?"
Patrick Den Bekker - Nixxes: Compared to consoles, it's actually a big burden on the development project. Whereas on the PS5 you can build them on a build machine and load them in, execute them and you're done, on PC we really need to rely on vendors and caches to get them compiled, and we spent a lot of trouble making sure they're compiled faster. At some point in the project we had one PSO that took 150 seconds... It's not only the collection, it's making sure they can execute fast enough.
Jeroen Krebbers - Guerrilla: As a developer, the PSO situation is very frustrating. We know that it doesn't have to be as bad as it currently is. And it is really bad. It takes a lot of time and effort, and then you compile the same shader on a million different PCs, right? So there's energy waste and things like that.
Is there anything on the project that you were particularly proud of or that you'd like to talk about?
Patrick Den Bekker - Nixxes: So the goal I personally had for the PC version is that the user experience would be the same as the console, where you just start up the game, start playing and it's all intuitive, as you would expect PC game to work. I think we nailed that one, hopefully you agree!
Craig Leach - Nixxes: People interact with games with a mouse and keyboard interface very differently than they would with a controller, so being able to keep the actual game experience as a whole intact and keep it feeling natural is something to be proud of. I'm also pretty proud of our controller integration; it compares pretty well against what we have on PS5.
Jeroen Krebbers - Guerrilla: Forbidden West is a game we've been working on for a long time, and now getting the chance to show it to a wider audience is something we're proud of. Not everyone at Guerrilla worked on the port itself, but we all put our hearts into the game and getting it out there to a wider audience is amazing. Doing that together with Nixxes has been a very good experience and we'd like to continue that collaboration for sure.