Skip to main content

Vroom

A racing-focused engine made by a team of 7 at BUas

Cover image for Vroom

Image Credit: Donna Weerdenburg

Details

Grade: 7.2

Version: v1.0

Language(s): C++, HLSL, PS5 Shaders, Python, GitHub Actions YAML

Engine: BEE

Developers:

NameRole
Ayush BhardwasEnging & Tools Programmer
David BoydGraphics Programmer
Donna WeerdenburgGameplay & Phyics Programmer
Guus RosGameplay & Physics Programmer
Patrick VreeburgGraphics Programmer
Quillan WielhouwerEngine & Tools Programmer
Tygo van GorpGraphics Programmer

Overview

This project was my third project in Year 2 at BUas. I was put in a team of 7 people to make an engine that could make a racing game. As a team, we made and engine in which we made two distinct demos with some distinct features.

Editor

Editor

Features

Engine & Tools
FeatureCredit
Basic engineBUas Lecturers & Quillan Wielhouwer
Filesystem IOAyush Bhardwas
ScenesAyush Bhardwas
Scene graphQuillan Wielhouwer
PrefabsAyush Bhardwas
Editor menusQuillan Wielhouwer
PackagingQuillan Wielhouwer
SplinesQuillan Wielhouwer
FMOD Studio AudioPatrick Vreeburg
Physics & AI
FeatureCredit
Arcade vehicle controllerGuus Ros
Drifting (Arcade controller)Guus Ros
Car-to-car collision (Arcade controller)Guus Ros
Jolt vehicle controllerDonna Weerdenburg
CheckpointsGuus Ros
Item pickupsDonna Weerdenburg
Spline-based AIQuillan Wielhouwer
Graphics
FeatureCredit
DX12 PBR RenderingDavid Boyd
PS5 PBR RenderingPatrick Vreeburg
DX12 in-game UIDavid Boyd
PS5 in-game UITygo van Gorp
Post-processing pipelinePatrick Vreeburg
Motion BlurDavid Boyd
Shadow mappingPatrick Vreeburg

Maro Kart

This Mario Kart-inspired demo features spline-based AI, a custom arcade-like vehicle controller with drifting and item pickups.

Trackman

This Trackmania-inspired demo features an in-game level editor with a Jolt-based vehicle controller.

My contributions

GitHub CI pipeline

Since some of this is under an NDA, I cannot show images here.

To assure that all code added through PRs work on a clean clone of the repo, I added a CI which included linting through clang and build tests for both PC and PS5. I also did some optimisations to assure that the CI build does not take ages. The steps I took to optimise the CI can be seen in the table. The times were recorded on my local machine through building the engine in Debug with the msbuild CLI.

ChangeTime on my machine
Baseline43s 850ms
(CI Only) /Z7 + removed /RTC1 + removed /JMC40s 070ms
PCH with all file includes optimised33s 280ms
Turn off /bigobj for engine35s 370ms
(CI Only) Turn off PDB generation on Debug32s 490ms
(CI Only) Add /UNITY29s 740ms

Post-processing pipeline

The post-processing pipeline for Vroom supports some basic effects built into the engine and the option to make your own HLSL shaders. The user-defined shaders make use of Dxc and DXIL to runtime compile and link the HLSL shader to the post-processing pipeline. The video below is relatively old, but the workflow has not changed much from this throughout the project.

Shadow mapping

I used a simple 3x3 Gaussian PCF filter on a cascaded shadow map to add shadows to the engine. This was my first time ever doing shadow mapping, so this took a while to get right.

FMOD Studio integration

Through the use of the ECS and the engine’s trigger box system I made a system for interfacing with FMOD Studio banks. In the engine I expose some components to interface with Studio.

Voxel Debugging
Associates in .bank and .bank.strings files to the scene
Voxel Debugging
Allows for playing a sound or triggering an event on engine-defined triggers
Voxel Debugging
Allows for modifying parameters on colliding with a trigger box

In Maro Kart these components and a custom system for example modulate the sounds of the car based on the speed of the associated car

Maro Kart car sounds

Speedlines (Maro Kart)

These give the player a false sense of speed. The faster the car goes, the more opaque the lines become. I also added the option to specify frames and some parameters regarding the random shifts in position, scale and opacity

Speedlines