Project Portfolio

  1. MXT, London
    1. Stonehenge VR Visualisation
      1. Environment Loading
      2. Traffic
      3. Artist Tools
      4. Animal AI
    2. Driving Simulator
      1. The Road Editor
      2. Real-time Signs and Signals
      3. Vehicle Simulation
  2. Personal
    1. XOR Neural Network in C++
    2. Ez-Utils
  3. Jam Games
    1. Xanadu
    2. Fall
    3. Numb Skull
    4. HADRON
    5. Chimney
    6. Another Planet

MXT, London

Stonehenge VR Visualisation

This was our immersive experience covering the 22km2 world heritage site around the Stonehenge monument. It contained a free roam and guided tour experience of the environment built using real-world data. This sandbox experience created in Unreal allowed the users to explore the environment in a number of configurations. While standing anywhere in the environment, you can instantly move into the future to view the landscape after the proposed tunnel development. There was also a seasonal configuration for a midday in summer and during the winter solstice.

Environment Loading

One aspect of my work on this project was building a system for handling the loading of environment. With such a significant map size, which requires both long distance view between the monuments of the landscape, while also requiring instant changes in configurations of the environment, the environment provided a challenge (especially in VR).

I developed a system using the World Composition of Unreal Engine 4 to dynamically load a developer configured list of landscape tiles and levels while culling unnecessary tiles for performance. This allowed us to develop the two landscapes for the current and future scenarios.

Traffic

The environment loading system also linked to the traffic system which is present in both time scenarios. As the project was data-driven the traffic was a visualization of measured real-world traffic along the A303. I created the pipeline for taking the PT Vissim traffic, which was two-dimensional, and parsing it into Unreal Engine and matching the vehicles to the virtual environment. Then I created the system for visualizing the over 1200 vehicles, leveraging C++ and Hierarchical Instanced StaticMeshes to maintain performance on VR headsets.

Artist Tools

With two times of day and two environments, one for each time period, there was a great deal of overhead for artist. I created a number of tools to improve their workflows. These included an editor buttons to easily move between times of day while working and scripted actions to allow artists to duplicate their objects and changes between landscapes or easily move objects between them.

A significant part of the landscape details in the Stonehenge environment is fencing and barriers. With such a large amount of fencing present, I created a custom C++ tool for our artists which allowed them to quickly place and customise fences using splines. These fences used Hierarchical Instanced StaticMeshes to reduce the impact on draw calls from the quantity of fencing in the levels.

Animal AI

A small detail (and personal passion of mine) that was added to the environment was animals. When at Stonehenge in real life you will regularly see birds and livestock around. I designed and created AI behaviour for the Sheep, Cows, Crows and Starlings present around the environment. I used Unreal Engine’s Behaviour Tree and NavMesh tools to manage the movements, behaviour and animations of the grazing animals.

However, the starlings required more custom behaviour. They needed to fly in a murmuration and go between a state of flying and sitting atop the stones. Therefore I created a simple system (similar to the start of a primative boid system) which allowed a leader to start a murmuration and fly smoothly between a range of predefined points before returning to their resting places on the stones. Each of the “follower” starlings will attempt to keep within a specified distance of the leader while flying in a smooth manner.

Demo of the starlings flight behaviour

Driving Simulator

This project is a simulator with an immersive driving experience created within Unity involving a Mixed Reality experience with a headset and motion rig. Alongside this driver experience is a real time traffic simulation using SUMO. This setup, along with our analytics suite, allows us to study driver behaviour and biometric data in a broad range of scenarios.

Stages of development of the Driving Simulator

The Road Editor

The core of the immersive environment created for the simulations is a tool for creating realistic roads which are integrated with the SUMO traffic simulation workflow.

This is a large existing C# codebase for a Unity editor tool for generating objects and meshes procedurally while alowing for it to exported into a network to run with SUMO simulations. I am the lead programmer responsible for the development and maintaining of this tool, working closely with other programmers and the artists using it. While working on this tool I have implemented a number of features including:

An action history and undo system, utilising command pattern.

Serializing the network to a custom XML .mxt file type, made easy for developers with custom attributes.

Efficient traffic routing using Breadth-First Search algorithm.

Real-time Signs and Signals

To allow for great diversity in scenarios I was responsible for creating the system managing runtime variable traffic signals which affect the SUMO traffic simulation.

This required adding to the network code used in communication between the Unity project and the SUMO traffic simulation (written in Python). These modifications would allow the changes in the complex signage to be sent to the other connected clients and traffic rules to the simulation.

Vehicle Simulation

Another area of my work on this project was in the accurate simulation of the feel of driving. I worked on creating accurate driving feel and force feedback through the motion platform based on the simulated driver vehicle rigidbody.

This system involved connecting the Unity simulation with the ForceSeatMI API. Additionally I created safety features to register when the simulated rigidbody’s motion, wheel contact or collisions were unsuitable for a driver to experience and stop motion matching between the two systems.


Personal

XOR Neural Network in C++

A remake of a university project for my Modern Computational Techniques module, involving training a neural network of my design to produce the behaviour of a 3-input XOR gate. The task was to rewrite it in C++ from the original Fortran for the assignment.

I created a version when I first left university as a way to practice C++, which is documented in this blog post.

I have recently come back to the project with my now 4 years of C++ experience which I documented in this blog post.


Ez-Utils

While working on a lot of game jams in Unity, I have found myself repeating a lot of implementations of some utilities for games.

From this I had the idea to make my own utilities package which I can include in Unity projects using Git submodules.

See this blog post for more details about whats included and the git repo.


Jam Games

Xanadu

Xanadu is a grid-based strategy roguelike made in Unity, submitted for the 7DRL jam.
As an oracle you can see your enemies moves before they make them, use this to create a plan and execute it in time with your foes. Battle your way through a grassland containing a range of enemies.
This was spawned out of my interest in implementing the Command design pattern and a twist on the typical “your turn – my turn” tactical games.

Check out the demo in browser:
https://ezra-mason.itch.io/xanadu


Fall

Autumn has come and its your time to rake the leaves from your Gnome Home or risk being buried in them all! Another 3D game, in the style of A Short Hike. Made in Unity for the Great Autumn Game Jam 2021 (placed 10th out of 167 games).

Check out the downloadable demo :
https://ezra-mason.itch.io/fall


Numb Skull

Smack your bouncy skull through an obstacle filled dungeon with aesthetics and gameplay inspired by A Short Hike. My first 3D game, made in Unity for the Brackeys Game Jam 2021.2 for the theme Let There Be Chaos (placed 54th out of 1,741 games).

Check out the demo in browser:
https://ezra-mason.itch.io/numbskull

Source: https://github.com/Ezra-Mason/NumbSkull


HADRON

A game made in Unity in a week for the Brackeys Game Jam 2021.1 (placed 2nd overall out of 1890 entries). Fight a bombardment of particles as a lonely hadron made up of three quarks. Each acts as your bullets and fuel your powerful dash but you can’t last long without them, as you are Stronger Together!

Check out the windows demo:
https://ezra-mason.itch.io/hadron

Source: https://github.com/Ezra-Mason/hadron

Postmortem of the project:
https://ezramason.com/2021/03/05/hadron/


Chimney

Over the winter holidays I found out about the Great Winter Game Jam, a no pressure, month-long jam run by Firith Studios. Naturally being an avid fan of game jams I decided to use the idea of Santa dropping down chimneys as a theme for a Downwell inspired arcade game centered around procedurally generated levels.

This was my first foray into procedural level generation which was fun to learn. Happily, when this game was played on stream and by others it was noted that the levels didn’t feel obviously random which is what I want from this kind of system.

A windows build is available for download at:
https://ezra-mason.itch.io/chimney


Another Planet

Made for my second ever game jam the Beginner Circle #3. This WebGL game made in Unity focuses on flinging a moon through the dangers of space to find a new home planet.

Playable in browser at:
https://ezra-mason.itch.io/another-planet