Since 2022, I’ve worked professionally as a graphics and VFX programmer at Cloud Imperium Games, contributing to AAA engines like StarEngine. Prior to that, I gained professional experience at Bulkhead Interactive, working with Unreal Engine 4 in gameplay and systems programming. Alongside my professional work, I’ve dedicated several years to personal projects focusing on physically-based rendering, atmospheric scattering, and procedural terrain systems. My expertise includes C++, HLSL, Direct3D 11, and GPU optimizations.
I am eager to bring my skills and passion to new challenges as a Graphics Programmer.
A large-scale space sandbox Game Engine built from scratch in C++ using DirectX 11, the Starlight Engine supports large-scale maps encompassing a solar system with planets, moons, stars, quadtree-based planetary terrain LODing, double-precision world-space coordiantes, atmospheric rendering, HDR rendering and tonemapping, all built on a general-purpose base engine capable of expediting the development of space sandbox games. Source code access can be granted upon request.
The Starlight Engine is designed to handle all the necessary back-end requirements to create large-scale space simulation games, from the rendering of planets and stars to physics interactions and higher-level logic handling. It's heavily data-driven, with almost all features working out of user provided data, allowing far greater flexibility and opening the door for modding support.
Planetary terrain is generated on the fly for new or subdivided patches, creating heightmap and normal data used in later rendering passes. A splat map encodes elevation, temperature, and humidity, driving heightmap noise selection and a biome LUT that determines local detail textures and colors, allowing for a wide variety of terrain types, including oceans, continents, smaller islands, mountain ranges, hills and flatlands.
The engine also includes an Editor that allows convenient viewing and modification of engine data. It supports file browsing for most asset files, texture previewing, a functioning console that displays stdout logs and accepts console commands (extensively used to toggle features on and off), a sidebar to control relevant scene and environmental state, and miscellaneous debugging stats. Entering Play Mode shifts camera control from the Editor to the game’s active logic.
Playable binaries can be provided upon request. Please note that these have not yet been extensively tested on different hardware configurations.
A spacecraft simulation prototype that implements a fully interactable holographic cockpit, quadtree-based planetary terrain generation, atmospheric rendering, and much more.
Set in an infinite procedurally generated galaxy, the prototype allows you to jump between systems and travel at a high speed within a solar system. Up to any number of planets may generate in one system, and different star classes will give off different lighting at different intensities.
The ship's systems include a logarithmic radar, which plots the location of every celestial body in the solar system, a system map with the ability to target a planet or star, a polarizing filter to allow for on-the-fly changes to how much light should make it through the cockpit window, a flight assist system that changes the flight model of the spacecraft from a simplified, point-and-fly system to a more complex but flexible one, and a hyperdrive and supercruise system combo that allows for jumps within the solar system and between solar systems.
While the supercruise system simply locks your ship's controls and physically accelerates it to a maximum speed of 200km/s to cover a predefined distance, the hyperspace jump is currently a simple scripted sequence that deletes the previous system's contents and starts generating new data. The hyperdrive system has a simple powering system that requires a baseline power to be delivered to the system. This power can then be routed to the supercruise subsystem via a gate situated to the right of the hyperdrive module.
The entire ship HUD is rendered in its own separate layer, then rendered additively to the main screen after some post-processing (tint, chromatic aberration, glitching/artefacting) effects are applied. This allows for full flexibility when it comes to the rendering of the HUD, as it is independent of the world's geometry in as many ways as is required. Atmospheric rendering is done via a post-process effect and uses a precomputed optical-depth map to calculate the scattering values for each pixel on the screen - this is then added to the base pixel colour to create the atmospheric glow tint. As the atmosphere is rendered additively the darker areas would inevitably show some of the background stars, to get around this issue the skybox is dimmed dynamically as the camera enters the atmosphere to complete the illusion.
Occasionally, jumps may be interrupted by Stellar Phenomena, such as black holes. While these don't provide any functionality in their current state, they will present a source of danger and opportunity: flying near them may grant a major boost to any particular ship system, but falling into one will result in certain, irreversible death.
A flexible and adaptable asset for the Unity engine that easily integrate seamless world portals into any new or existing Unity project. Currently on sale on the Unity Asset Store, it features a highly customisable and expandable portal system, support for multiple cameras / points of view, recursion (portal-in-portal views), and experimental VR support.
Portals can be placed anywhere, will correctly cull any object in front of them, and can be smoothly traversed in any situation
Portals can be seen within portals, creating an "infinite tunnel" effect, up to a specified depth
Velocity is preserved when traversing portals, as well as the angle of entry and the relative position on the entry portal. Physics is handled completely within the asset and utilises Unity's Rigidbodies - any Rigidbody can transit through a portal seamlessly and, if one exists, will have any of its meshes duplicated and mirrored on the destination portal. Collisions are handled automatically, portals placed in front of walls will still be smoothly traversable and obstacles placed in front of exit portals will collide with anything attempting to traverse the linked portal.
Effects can be toggled on or off, and custom textures can be used to provide distortion effects or alpha/blending masks. A disabled effect is never used, and the shader features linked to it are not compiled, to preserve performance. Portals can be set up to only be visual, with no physics, or to only act physically, without any visible gates. The bulk of the rendering process is handled through a single RenderTexture per portal, and a set of portal cameras that are rendered manually when needed. OnPreRender events are captured by the portals are the internal cameras are positioned to prepare for rendering. The choice of OnPreRender guarantees that the portals will have refreshed by the time the main camera has finished rendering the scene.
A passion project of mine for a space game set in an infinite randomly generated universe. Your spaceship is equipped with a warp drive that can jump from solar system to solar system, and each jump a new random planet, set of moons, set of planetary rings and features are generated and replace the previous system's contents.
The warp sequence is seamless, with no actual loading screens - the warp animation is there simply for immersion and visual reasons, and can be set to be of any length. The game is mostly a proof-of-concept at this stage as it does not have many interactive mechanics aside from the ship's controls, however I plan on expanding the game into a more active experience. Built using the Unity engine.
Spaceship controls are realistic, with the ship being able to move in a different direction from where it is pointing. A sense of scale was portrayed through clever camera tricks - a slower camera renders the background planets before the normal active camera renders the foreground, player, and UI on top of it. This allows me to easily alter the speed of the spaceship within the system, and allows it to reach into distant planets without running into floating point imprecision issues.
The warp tunnel is simply a scripted sequence of actions that delete the current system's contents and generate a brand new system using new parameters. The warp tunnel itself is an inverted cylinder with simple scrolling UVs and a few tricks to give the illusion of the tunnel flashing in and out as the ship reaches warp speed. The warp sequence can - and normally is padded out by an arbitrary amount of seconds, to give a more authentic feel of reaching for a distant system.
A game in which you take the role of a mage with the power to shoot an ice spell and a fire spell. These spells can alter the environment in many ways, such as by freezing or burning objects or by activating specific switches and elements that can help you progress.
This is a university project for our Team Project module, and was made in collaboration with other students, both programmers and artists. I have taken responsibility for developing the back-end of all the game's features and most of its mechanics, as well as for leading the programmers team and splitting tasks and responsibilities to ensure the creation of a cohesive and robust final product.
The objective is to reach the top of this world, in which a treasure is stored. Puzzle elements are scattered around and integrated with the environment, obstacles need to be overcome creatively.