#include <williamwhitehouse.dev>

-home- -proj- -blog-

Doom: Vulkan

This project delves into low-level game engine technologies and algorithms. With a focus on rendering, physics and Entity Component Systems (ECS).

I created a small C++ game engine with a custom renderer (Vulkan API), and an ECS to manage in-game entities and behaviour. The project focused on how data is stored and transformed between core engine systems while adhering to data-oriented-design principles.

A primitive physics system was written to handle simple collision resolution. My approach involved implementing a version of the Gilbert-Johnson-Keerthi (GJK) and Expanding Polytope Algorithm (EPA) algorithms. My implementation isn't perfect (as noted in the project report), and is something I'm eager to perfect in the future!

Additionally, the project made use of XAudio2, the low-level audio API for Windows. Which was used for basic one-shot audio effects (i.e. gun shots) and the looping background music.

A sample level was crafted to test these lower-level components by demonstrating gameplay systems and mechanics built within the engine. This includes projectile/hitscan weapons, various health, armor, and ammo pickups, interactive doors that require keycards, and a complete game loop complete with a main menu and win/lose states.

Feel free to read my project report which details research, analysis, and areas of future work. Read it here! Below you will find a short playthrough video, and some in-game/development screenshots.


Playthrough video of the final level, demonstrating all gameplay systems.


Doom: Vulkan Doom: Vulkan
Doom: Vulkan Doom: Vulkan
Gameplay Images.
Doom: Vulkan Doom: Vulkan
Debug visualisations of the colliders (green) and trigger (blue) volumes.