Caustics are light patterns formed when light passes through materials like glass and water, they are difficult to render accurately and quickly. I developed this project as part of one my university modules, Advanced Technologies, with a five-week timeline to create a prototype. As such, I chose to focus on the accuracy and developed a Monte Carlo path tracer.
Monte Carlo path tracing is a technique for simulating the interaction of radiation in a scene. In 1986, James T. Kajiya described an adaptation of this technique called the rendering equation.
Monte Carlo path tracers, due to their stochastic sampling method, suffer from a lot of noise in the images produced. One way to reduce this noise is to use importance sampling , which uses Probability Density Functions to cause light to scatter towards more important parts of the scene, like lights. Caustics are made sharper by small light sources, however this increases noise as without importance sampling rays are very unlikely to hit the light. By using Importance Sampling the level of noise can be reduced significantly.
To simulate the interaction of light within the body of the water, Henyey–Greenstein Phase Functions are used in this project to simulate volumes. Phase Functions are used to describe the angular scattering of light by a material and can be used to evaluate how light is scattered by a medium.
Below is a scene showcasing all the elements of the final raytracer:
My dissertation is an investigation into voxel games and how different volumetric data structures can be used for optimisation. Voxel terrain has been used to produce unique games such as Minecraft or Teardown . However, storing the topology can be challenging as naive methods like using a 3D array requires a lot of memory and scales up quickly as the amount of topology increases.
This is where the optimisation techniques come in. First I implemented a Sparse Voxel Octree structure. Octrees are a spatial data structure that splits the space into 8 “Octants” these Octants have 8 more Octants, this means that large regions of empty space can be reduced to just one Octant. To search the tree, the query point is compared to the origin of the Octant to find out which side it lies on. However, Octrees have a few drawbacks, searching the tree requires a lot of computation compared to an array look up. They also cannot compress identical regions of space and have to be very ‘tall’ to represent fine details.
Volumetric Dynamic B+ Trees (VDB) do not suffer from these same issues, it uses a lot of very clever techniques to make look up and insertion of topology instant. Firstly, topology is stored as a series of bit masks which allows for bit-wise operations that are much faster than arithmetic operations. The tree also supports different amount of children at each node that means that the tree can remain ‘short’ whilst still being able to store lots of detail. Finally, the structure of the tree means that it can take advantage of the CPUs caches meaning traversing the tree is incredibly fast. I’m glossing over a lot of the cool stuff it does for brevity but if your interested checkout Ken Museths paper.
Here is a quick video I made for my viva presentation that visually explains how this project works:
Smoothed Particle Hydrodynamics is a method for simulating fluid dynamics. It uses discrete particles to represent the water, each particle has a density, pressure and velocity. Each particle has a ‘Smoothing Kernel’ that describes its field of influence on other particles, this is then used with equations to calculate the density and pressure of each particle, the resultant velocity is then modified by a viscosity function to make the fluid act like water.
This project was also part of my Advanced Tech module for university and I wrote a simple DirectX renderer with Instanced rendering to allow it to draw lots of particles efficiently. The final prototype can simulate 64,000 particles at 30fps on the CPU.
This project was another 5 week prototype for Advanced Technologies, and we were tasked to create a system for destroying a mesh at runtime. The system I developed could slice complex concave meshes using undirected graphs along with the Ear-Clipping algorithm.
The user can draw a line across the screen, analogous to a sword swing, which would then be turned into a plane. Using the plane, each triangle of the mesh is compared and moved depending on what side of the plane it is on. If the triangle intersected the plane, the intersection points on each edge are calculated and new vertices generated. These new vertices are then added to the undirected graph, and once all triangles of the mesh have been compared the undirected graph can be used to create the loops need for the Ear-Clipping algorithm. To find the loops, an arbitrary vertex on the graph is selected and using the neighbour of each vertex in the graph a loop is found when we arrive back at the starting vertex. If any vertices remain unvisited then the mesh must be concave and another loop can be found. These loops are then passed to the Ear-Clipping algorithm to create meshes to cover the holes created.
Below you can see a Torus sliced with this method.
Cyberus is a three-player competitive beat matching game designed from the ground up for Cyber Security week at the University of the West of England (UWE)! Players use Elgato Stream Deck XL’s to match colours in time with the beat to defend their devices from incoming spam emails.
The game was a hit, with over 1,900 people attending the Cyber Security 2022 event. A diverse range of students from various academic disciplines, along with numerous faculty members, eagerly tested their musical aptitude in Cyberus; with some regularly returning to set new highscores!
It was the first full game developed by us at Manifold Games! I worked on developing the core beat matching mechanics, which went through many iterations, and VFX. The game had a unique design challenge as each block are words from a spam email that turn into blocks in each players lane, the blocks then head to the players ‘spam box’ which fills up with miss timed beats. The most significant challenge was creating a system that would work seamlessly with the unusual input device of the Stream Deck while ensuring the beat matching game felt fluid and responsive.
Infiltrators Arcade was a Sequel to the previous years ITS Cyber Security game. Contracted by The Foundry we were tasked with re-imaging the game and making it local multiplayer.
In Infiltrators Arcade you must work with your teammates to sneak into a corrupt organisation and steal their data before you are discovered! Use each character’s unique skills to develop different strategies and see how far you can get.
Duel is a 2 player competitive duelling simulator. The game was created during the global game jam 2022.
Locked at either sides of the screen players must face each other in deadly combat, scale the platforms, contend with an ever shrinking level, all whilst dodging their opponents attacks.