How God of War Ragnarök was ported to PC
Scaling beyond PS5, avoiding shader compilation stutter and plans for RT.
God of War Ragnarök arrived on PC this week, offering a newly upgraded version of the PlayStation hit with a raft of graphical upgrades and new PC-specific features. To mark the occasion, Alex Battaglia spoke to Matt DeWald, lead producer at original developers Sony Santa Monica, and Steve Tolin, technical director of PC port developers Jetpack Interactive.
This far-ranging interview includes plenty of technical insight into the port, including how the game was designed to scale well beyond the console versions, while avoiding common PC bugbears like shader compilation stutter and inefficient usage of modern hybrid CPUs. As always, the interview below has been lightly edited for length and clarity.
We'll have the Digital Foundry breakdown of the PC port soon - look out for that early next week. Unfortunately, we didn't quite have the time required with the review code to complete our coverage for the game's launch - but what we can say is that Jetpack Interactive and Santa Monica Studio have delivered a strong port here. We'll have more to say soon, along with those all-important optimised settings.
Digital Foundry: So when did the project to start porting God of War Ragnarok begin?
Matt DeWald: Yeah, so we've been working on it for about 18 to 24 months now. The majority of it before Ragnarok shipped was just getting the engine up to snuff on DX12. Once Ragnarok shipped fully, that's when we were able to fully transition over and start the true porting process. Then when Valhalla finished, that's when we were able to pull in all that content as well and wrap it up here. So a little bit between 18 to 24 months.
Digital Foundry: The first God of War game on PC was a DX11 port, while Ragnarök is DX12. What was it like porting everything you had to DX12?
Steve Tolin: We did DX11 for the first game because that gave us the results we needed at the time, but we knew in the background that moving to DX12 was what we needed to do, for all the performance gains that we wanted to achieve. Shader Model 6 and DX12 Ultimate kind of fulfilled the promise of what DX12 always could be, so that was the flip-over point where it became worth it.
Digital Foundry: You mentioned DX12 Ultimate specifically, which added things like a new shader model, VRS, DirectX ray tracing, as well as mesh shaders. What exactly from DX12 Ultimate and the new shader model did you really want to take advantage of to port God of War Ragnarok?
Steve Tolin: Bindless resource management was the biggest one. We now go as wide as possible on the CPU for generating command lists. The resource pool handling is better, it's more console-like. Before Ultimate and that shader model, there was still a legacy transition part which wasn't quite what it needed to be. Resource management and timeline management for DirectX, getting everything to VRAM and being on cue and ready is the whole thing with a PC game, right?
Digital Foundry: Speaking of resources, DX12 has explicit compilation of PSOs, and it's my bugbear on PC. I hate it when it doesn't work and you get shader compilation stutter. I'm only early on, but I've noticed zero frame-time spikes during my playthrough, which is what you want to see. What exactly are you doing for PSOs?
Steve Tolin: Do we only have 30 minutes? [laughs] We're in the same camp as you - we use the #StutterStruggle hashtag the same as you and we take it to heart, because it's not something we want to see in our games.
The biggest issue and hurdle for a lot of that is that you need to have a full representation of all of your runtime render passes and everything offline, so that you can run all your materials through it to generate all the permutations for everything and then catch everything that's done.
Very early on we decided not to just have QA play the game and accumulate PSOs that way, then ship some pre-known set and hope in the wild that players don't look off into a corner. We did the full build offline and created the PSOs offline, so all of the data is known beforehand in the pipeline for us, and it took us a substantial amount of time to get that right.
Digital Foundry: Ragnarök is both a PS4 and PS5 game, and it's easy to notice the differences in install sizes for each platform. How are you handling asset compression and decompression for PC?
Matt DeWald: One of the things that got called out with our spec sheet is just the size of the game - and it's a really large game in fairness, it's all of Ragnarök plus all of Valhalla plus all of the patches that we released since launch.
But on PC, we lack dedicated hardware for decompression, so we looked at multiple decompression metholodologies and systems that we could use. We just didn't find one that would benefit us on the performance side or the stability side, because there have been stability problems with certain decompression technologies. So we just chose to use up more disk space, because disk space is relatively cheap these days. It does take a large amount of space, but it's much better than having a poor experience because the decompression stalls you out or causes frame hitches or other things.
Steve Tolin: There is more compression on assets in this game than the last game. It's just that on some of them we chose, like Matt said, to use more disk space rather than more CPU overhead.
Digital Foundry: The original God of War was a PS4 game, so it was relatively easy to fit even the high-res textures into a 6GB GPU. Ragnarök is a PS5 title, and a lot of PC GPUs are only 8GB - so how did you keep within the VRAM budgets of mainstream GPUs?
Steve Tolin: We knew we had to be more scalable on this one, in the previous game our lowest setting was 4GB, now it's 6GB. We just need more for render targets, especially with higher resolutions, but now we range up to 20 or 24GB - I'm sure next week there will be 32GB!
For DX12, we've had a mantra around here, which is we need to be a good PC citizen. We ask for a lot of VRAM, and the OS tells us "well, you've got to tap back a bit - you're streaming, you're launching another game, those Chrome tabs eat up a lot." So we react a lot to that, but we use up as much as we can. We use more than on the PS5 version, if possible. That was a lot of work, I have to give a shout-out to Arn for this especially.
Digital Foundry: Does that mean that the game will, based on the available VRAM, automatically scale texture quality and streaming maps to fit within the pool?
Steve Tolin: Kind of! There's a cache that's involved, so it's the size of the cache that scales, so it's trading off between how much we're streaming off of disk rather than off of a RAM or VRAM cache.
In terms of porting graphical quirks, the last time we talked, you mentioned how the particle system was unique and a challenge to port to PC. I'd love to know if there was anything like that this time around, as well as how you ported the very peculiar cube map tracing that was done on the PS5's quality mode.
Steve Tolin: That was Kyle, who did all the particles in the DX11 version, and it was a complete rewrite for DX12. Thankfully, the lessons learned from that initial port and the DX12 APIs being more modern and having better memory management allowed it to be a lot simpler.
Matt DeWald: For the cube map reflection stuff, we tried to get DXR working properly with that, but we just weren't able to do it, so that's falling back to just basic cube maps in that area. What we realised is that due to the number of reflective surfaces and overall environment, ray tracing is most noticeable in the one scene that Stephen McAuley called out in his GDC talk [around 23:00 in the Realm Between Realms. Given the time of the project, we've pushed that to the side for now. We're hoping to get to that post-launch if we can get DXR working the want we want it to.
Digital Foundry: How does the game scale beyond the PlayStation 5 version? Previously we talked about LOD distance, shadow distance, shadow resolution.
Matt DeWald: It scales up in a couple of those same things where we can increase numbers, like the number of rays, and we looked at doing even more than in the original God of War. We were already working on Ragnarök at that time, so we could pull in some of the features the team was working on, so we weren't able to do that this time. Because we already support base PS4 to PS5 in quality and performance mode, we felt we had a breadth of settings and could tweak the numbers for PC: texture size, sampling numbers, resolution of volumetric fog, any of those things.
Digital Foundry: For the enhanced (32:9) aspect ratio, was that a huge art pass to get it working?
Matt DeWald: Yeah, that was a ton of animation work, because we have a lot of controlled camera movements, not just in cinematics, but in what we call GPMs, gameplay moments where the camera is controlled. Obviously the animators hack a lot of stuff to warp people into positon or move things around, so by going to 32:9, we more than tripled the amount of work we had to do to fix up all of those moments and cinematics and identify all of the points where characters aren't fully animated because they weren't supposed to be on-screen.
And for the HUD, is it more malleable now?
Matt DeWald: It still has limitations; we have multiple modes and it'll stretch to the screen or stay centred. We had to provide three modes - 32:9, 21:9 and 16:9, plus 16:10. PC has that wonderful thing where everyone has custom configurations and you have to figure out how it works on all the different setups. It's a lot of work because a lot of game is built bespoke for a single platform, and it's a closed environment, so once we open it up for PC, it's a lot of work. Shout out to Mike, the programmer on the UI side, for doing a lot of that work.
Digital Foundry: The first GoW game on PC defaults to "original" settings, based on those used for PS4/PS4 Pro, while Ragnarök defaults to medium. What settings are closest to PS5's performance and quality modes?
Matt DeWald: Low is close to base PS4, with a few things changed because PC doesn't have unified memory and our CPU is not necessarily as powerful, going up to ultra which is PS5 quality mode.
Digital Foundry: Is async compute used in the DX12 version of the game on PC?
Steve Tolin: Async copy queues for resources, and then compute jobs all the time, everywhere, everything.
Digital Foundry: What's something you really enjoyed working on for the Ragnarök port?
Steve Tolin: I think there's three things we hit: taking full advantage of DX12 - going fully multi-threaded, getting PSOs working smoothly, and the final thing is CPU topology. Cores aren't cores anymore, caches and cache clusters make more of a difference than you might think. We reorganised where our work gets done for a large performance boost. It's all the Intel Hybrid Detect stuff. That's important, more teams and games should be looking at that.
Matt DeWald: Mine's going to be more boring, but it's that it's great working on a project where you have a great starting point. Ragnarök is a great product and I'm really proud of the team working on that, so porting something over that's already in a good state is a lot easier. Also the fact that we were able to deal with such a small team - we're still working with Jetpack who did the last game, and it's still just four guys over there. We're doing this with four engineers, plus some internal support from animators, QA folks and a handful of people with subject matter expertise. I'm always proud of what the team is able to accomplish in a short amount of time.
We're super excited for people to play the game. It's a whole new audience that gets to experience it. We get to see all the crazy stuff people put together, it's always fun.
I also love watching videos of you guys doing tech analysis, because for us it's like "oh, we didn't think about that. Why didn't we do that? Can we do that in a patch?" I'm just really excited to get this out the door and see what the reactions are and see what we can do to make it even better.