Star Citizen swaps DirectX 12 for Vulkan API to ensure cross-platform compatibility

There’s a running joke on the internet that every new thing added to Star Citizen‘s extensive list of “cool shit we can do with our engine” adds another week to the game’s launch delay. Six years in the making, it’s arguable that this joke was based in truth after all, and the list of stuff the game’s engine can do has just gotten longer with a recent announcement by Cloud Imperium that they were dropping support for DirectX 12. Over the weekend, RSI developers from the graphics division of the studio elaborated on why they were ditching plans to support DirectX 12, and move instead to a multi-platform graphics API, namely the Vulkan API developed by the Khronos Group.

Answering a question on the Roberts Space Industries forum, a developer with the username “ABrown_CIG” answered a question about what the developers were going to do for the Linux version of the game, because Star Citizen does not make use of OpenGL at this point. The answer is somewhat interesting:

“Years ago we stated our intention to support DX12, but since the introduction of Vulkan which has the same feature set and performance advantages this seemed a much more logical rendering API to use as it doesn’t force our users to upgrade to Windows 10 and opens the door for a single graphics API that could be used on all Windows 7, 8, 10 & Linux. As a result our current intention is to only support Vulkan and eventually drop support for DX11 as this shouldn’t effect any of our backers. DX12 would only be considered if we found it gave us a specific and substantial advantage over Vulkan. The API’s really aren’t that different though, 95% of the work for these APIs is to change the paradigm of the rendering pipeline, which is the same for both APIs.”

The language used here seems to indicate that the Vulkan version of the game had been settled on as the only supported API moving forward a while ago. Back in 2015, a Gamers Nexus interview with Chris Roberts revealed that at that point, they had put out the game in its current form using the DirectX 11 API, but that they had done work in making the engine portable and compatible with both DirectX 12 and Vulkan. Roberts goes into some detail about the behind-the-scenes work in the video interview:

Refactoring the low-end of the engine [for Dx12] will [also] work for Vulkan. They have similar engines, similar multi-core, multi-threading, multi-job paradigms. It’s not just adding more jobs, it’s also about refactoring some of the pipeline, how you deal with the data, how you organize your resources so you can be more parallel, which is how you get the real power of Dx12 or Vulkan. You can take a Dx11 renderer and make it Dx12 pretty quickly. You’re not going to get the benefit of Dx12 or the Vulkan stuff until you do more fundamental refactoring.

That’s what we’re doing – we’re saying, “we’re gonna do it right so that we’ll really get the performance gains.” That’s one of the things that the German office is leading on, because we’ve got some of the engineers who built the engine in the first place and were involved in the various Dx9 and Dx11 implementations of CryEngine.

From my standpoint, we would like to use Dx12 as well as OpenGL Next, Vulkan – we want to support Unix. Our servers run on Unix, so our codebase works on Unix as well as straight Windows, but the problem we have is we don’t have a graphics driver yet – there’s an OpenGL implementation that was recently released with CryEngine, but it’s pretty early, pretty slow. Then the other problem is we’ve done quite a lot of customization already to the render pipeline, so a lot of the stuff – it’s not a simple plug-n-play, basically. For us, we have this debate about — if we only had Dx12, would we go back and support Dx11 now? I think our tendency would be to more focus on the next level of OpenGL, but that would be after Dx12.”

This likely means that a couple of things have changed for the future of Star Citizen, notably its potential appearance on consoles. Chris Roberts has in the past promised that the game would never appear on a console, but with a DirectX 12 port it had a good chance of showing up on the Xbox Scorpio in the future. There are methods of translating Vulkan code and shader-specific optimisations into something that DirectX 12 and the PlayStation 4’s low-level API can understand natively, so this means that having Vulkan instead of DirectX 12 as a base for their game solves many of the headaches associated with a port.

This also means that Star Citizen‘s promised launch for Linux gamers is still on track and hasn’t been taken off the table yet. Vulkan has incredible flexibility and power for an open standard graphics API (much more so than OpenGL ever did), and even through WINE we can see id Software’s DOOM playing on a Linux installation with almost no performance hit compared to a native Windows install because there’s no need for translating the graphics commands on the fly. Vulkan is the future of graphics APIs if you want a multi-platform title, and the list of supported games is slowly growing longer.

Source: RSI Forums

home_coded: Interview with Richard Pieterse