Project Gallery
Videos and additional information for my work, as well as some screenshots. For more in-depth breakdowns, each project will have a dedicated blog post created for it!
Racecar Crashers
This game was made as part of my final project of the Masters year at university, entirely in C++ using my own engine architected using the native PS5 SDK for rendering and resource management - complete with robust creation tools such as a data-driven level editor and high-performance Entity Component System.
The game was built in 12 weeks, part-time while juggling an additional module, and lead to the founding and formation of Trajectile Interactive - a small indie studio that is hoping to publish on the PlayStation Store in the near future through Sheffield Hallam University’s in-house studio: Steel Minions.
Find all our links here if you’d like to support Trajectile as we move forward!
Real-Time Upscaling Analyser
This application was made as part of my Masters dissertation, entirely in C++ using the DirectX 12 MiniEngine provided by Microsoft’s DirectX Graphics Samples as a foundation. This decision was made due to the effects of upscaling, and especially DLSS in particular, being much more visible in advanced scenes with high graphical fidelity.
The app allows for real-time toggling between native rendering, DLSS (and all of it’s quality modes), and Bilinear Upscaling (multiple input resolutions supported). This facility was key to the qualitative experiment, which required human participants to evaluate the effects of each technique across multiple surfaces within the Sponza scene.
More detail coming soon in a blog post! You will also be able to find the full paper available to read there.
Physically Based Rendering - Real-time BRDF Analyser
This application (and assosciated research) was made alongside Racecar Crashers. I recieved an 89 (high distinction first) for the deliverable and research conducted, synthesising both academic and practitioner sources to deliver a short lecture on the theory behind Cook-Torrance and BRDFs.
The app allows for real-time toggling between lighting models, particularly Blinn-Phong and Cook-Torrance. There is lots of room for future improvement, with upcoming work involving implementing alternative terms for each of the CT model terms (NDF, Fresnel, and Geometric Shadowing) aswell as alternate BRDFs such as Burley’s Diffuse model and the Oren-Nayar microfacet model.
More detail coming soon in a blog post! You will also be able to find the full lecture available to read there along with an annotated bibliography.
Parallel Programming - Vulkan & Compute (GPGPU)
Completed just after the SIMD project, as my dissertation was wrapping up. These snowflakes are created entirely in the pixel shader through clever discarding of pixels around a large point! It also sports a fixed-timestep update for the cohesion collision model, used to simulate the way snowflakes clump together as they reach the ground.
The app significantly modifies the Vulkan base engine provided by my lecturer to allow for easier and more dynamic creation of pipeline layouts and descriptors, allowing for effective offloading of processing to the GPU via compute shaders. It additionally resolves collision within these shaders, carefully avoiding data-races where they are prone to occur.
Parallel Programming - Vulkan & SIMD
This project was complete alongside my dissertation in a parallel (heh) module. The task was to take a base particle system that ran horribly (literal slideshow) and improve its performance through the use of data-oriented design and SIMD intrinsics.
Additionally, research was carried out into additional SIMD tricks that contemporary game developers use, with GDC talks being used as a primary source of reference. One of these was attempted but actually resulted in a slower update loop compared to using a more efficient data layout and using regular sequential logic!
Multi-threaded and Pooled Particle System
This artefact was made as part of an investigation for an assignment in my Effective C++ module in my Bachelor’s year at university. It is again made entirely in C++, this time using a simplified Direct2D wrapper. The investigatition centered around different threading methods, namely the STL implementation of std::thread and Microsoft’s PPL library for hardware concurrency.
The app additionally supports a bit of physics simulation in the form of circle-circle collision in order to better stress the threading system. Both the threads and particles are pooled for increased performance, with explicit care taken through the use of mutexes and locks to avoid data-races and ensure thread safety.
Slippery Samurai
This game was made as part of my final project of the second year at university, entirely in C++ using my own engine built with DirectXTK.
I created a particle system, animation system, node-based menu system and much more for the game that I’m still proud of. This is a rough demo version that has since been improved as I intend to fully flesh out the game and release it!
Tempus: Land of Ruin
This game was made as part of my final project of the second year at university. I dove deep into Unreal C++ for the first time, writing almost all of the code without blueprints. I also investigated Unreal’s level streaming system to create the effect seen in-game where you can time-travel to different versions of the level.
The time travel mechanic is used to solve puzzles as you traverse the level. I also created all the particle effects seen in the game from scratch using Niagara.
Unreal Stealth - Inworld API Research
I created many things for this project, in addition to a written literature review and project proposal. Dynamic enemy patrolling - with multiple patrolling methods (linear, looping, reverse); gradual detection via sight sense and world-space UI that slowly fills; a sound sense that could detect running, jumping, and distractions thrown by the player. I also implemented a dynamic takedown animation utilising Unreal’s motion warping plugin and a custom material shader to highlight key objects in the world.
The goal was to connect Inworld’s API to utilise an LLM to drive behaviour tree actions - for example, guards would dynamically learn about the distractions that the player was using, and then adapt and instead of falling for the distraction the next time, they would try and seek the source. It was designed to lead into my Master’s dissertation, but Inworld unfortunately went private during the development of the project, and the LLM features were unable to be implemented.
Robobit
This game was made as part of my final project of the first year at university, and won a prize at the end of year showcase. I learnt how to create AI using the NavMesh system in Unity, and honed my C# skills on this project.
I created a cool combo system, power-up system, and a unique UI display system for the game that I’m still quite happy with. I also made the music and SFX for this game!
Classic Snake C++
This game was made with SFML using C++, and in a way it served as my first foray into engine work as I created a state-machine to allow for different game states.
There isn’t much going on mechanics-wise in this one, its the simple Snake we all know and love. One interesting thing I did under the hood was create a basic game state manager using smart pointers, as I had never really delved into modern STL until this project.
Screenshots







