VKDoom

From DoomWiki.org

VKDoom
Standard ZDoom
Codebase GZDoom
Developer(s) Magnus Norddahl (dpJudas), Nash Muhandes
Initial release 0.9 (2023-07-15, 13 months ago)
Latest release 0.9 (2023-07-15, 13 months ago)
Development status Active
Written in C++
Target platform Cross-Platform
Available in English (United States)
License GPLv3+
Website vkdoom.org
Source Repository

(Git)

GitHub

VKDoom is a fork of the GZDoom source port focused on modern computers by Magnus Norddahl (dpJudas) and Nash Muhandes. VKDoom follows GZDoom's feature set, but enhances it with new technologies, such as raytraced lightmaps and ray-tracing hardware powered dynamic light shadows. In addition to these, it employs a revamped version of GZDoom's Vulkan renderer (based on the Vulkan API).

History[edit]

VKDoom was created out of a need to move the GZDoom codebase to a more modern API by Norddahl, and a desire by Muhandes to incorporate new rendering techniques into GZDoom. Whilst GZDoom supports Vulkan for rendering, it still heavily relies on the OpenGL API, with Vulkan used as an additional backend, rather than a defacto one.

As detailed in a post on the Doomworld forums, Norddahl stated several reasons to fork:

I forked it for several reasons.

There's the technical reason. GZDoom supports multiple backends and the abstraction doing this was limiting me in what I wanted to do with Vulkan. If I dropped the other backends I wouldn't have to port all of them to an updated design. I wanted the backend to better support mesh building, command buffers on worker threads and a more complex shader pipeline system. This has performance improvements for both high end and low end, but the catch is that old pre-vulkan GPU hardware can't tag along for the ride. Graf (Zahl) has expressed interest in eventually merging this back into a future version of GZDoom.

Then there's the other reason. My GPU have RTX cores and I want to have fun with them. In GZDoom just even mentioning them on Discord would get certain users to complain loudly since they didn't have the hardware. So I decided, fine, you can have your way and I'll go do my thing in a different port tailored for me and what I find fun. By naming it VkDoom I create a very easy way of explaining why old computers won't work with it. :) So it won't fill a similar role to QZDoom. I also still haven't 100% decided yet if I actually want to do a release. That's why there has been no announcement of this project. 

VKDoom is closely connected to Muhandes's game Disdain. Having previously experimented with lightmaps using a custom GZDoom build (and an earlier, CPU-based implementation of ZDRay), Nash contacted Magnus about his ideas to advance ZDRay to a usable state. As the then-current iteration was stuck in a separate branch in the GZDoom codebase, the decision was then made to create a new fork. Norddahl augmented the lightmap generation by moving it from CPU to Vulkan using either rayqueries or a shader-based version using storage buffers. Because of this, a Vulkan card is mandatory, requiring Vulkan 1.0 at least for the shader path.

ZDRay is developed alongside VKDoom to enable support for lightmaps in Ultimate Doom Builder. It serves as an extension of ZDBSP.

Future developments[edit]

  • As VKDoom is kept in sync with GZDoom and retroactively pushes back to that codebase, eventually GZDoom will inherit much of the technology on display in VKDoom.
  • VKDoom is used as the codebase for Disdain, a retro shooter in its VKDisdain engine fork.

Features[edit]

  • All features from latest version of mainline GZDoom (ACS, ZScript, ZMusic etc)
  • Vulkan based renderer:
    • Raytraced baked lightmaps (produced from ZDRay)
    • Raytraced dynamic shadows
  • Support for the DEHEXTRA standard
  • Unreal Engine 1 style light coronas
  • Modified defaults as per community feedback (like None - Linear texture filtering and more optimized defaults to better represent the IWAD games - full list here https://github.com/dpjudas/VkDoom/commit/896102c1793e565cb9832d4b2ecc5edf0e41a5c6)
  • Hitbox rendering with r_showhitbox
  • Alternate mouse cursors for the IWAD games
  • ZScript extensions related to save games and automap access
  • New MAPINFO property NoAutoSaveOnEnter, and a CHANGELEVEL_NOAUTOSAVE flag for ChangeLevel (both ZScript and ACS) - that disables the hardcoded saves when entering a map

External links[edit]

Source code genealogy
Based on Name Base for
GZDoom VKDoom Active