Draft view. Dashed cards are placeholders for footage still to capture; visitors don't see them. Name each capture after its placeholder's code.
2013
Joined TSC Simulation as a mathematics graduate, working on 2D operator training simulators that recreate real control-room interfaces: C and C++ runtime, UI and numerical-methods work, with Python automation alongside.
2015
Moved into the 3D studio as it was set up over 2015 and 2016, and became its technical lead across the Unity product range: architecture, build infrastructure, mentoring and end-to-end project ownership.
2020
oil-linkage-animations
Linkage animations
One of the linkage animations running, slowed down if that makes the parts easier to follow.
My part I built the linkage animations.
2023
Delivered Strawberry Fields solo for a research officer at the University of Essex: an agent-based harvesting simulation, from requirements through to delivery. Completed the ILM Level 3 Award in Leadership and Management.
2026
Thirteen years in, leading the 3D and VR work: digital twins wired to live process simulation; standalone VR on Meta Quest and Pico; immersive training in the browser through WebXR.
Wind Farm
windfarm-terrain-flyover
Terrain flyover
A slow flight over the hillside terrain, recorded from an older clean revision.
My part I built the terrain.
windfarm-inspection
An inspection task, re-recorded
Equipment, controllers and highlighting during an inspection task, from a revision before the bug and the interface redesign.
My part I managed this project and did most of its development.
Three Phase Separator
tps-walkthrough
Walk round the site
A walk round showing the layout, walkways and fences, plus anything else you built in it.
My part The site layout, walkway structure and fences are my models. To confirm: what else here is mine.
Equipment Explorer
equipment-explorer-exploded-view
Exploded views
An exploded-view animation opening out a piece of equipment and closing it again.
My part I wrote the core system the product is built on, and the exploded-view animations.
equipment-explorer-virtual-handles
Virtual handles
Grabbing and moving parts by their virtual handles.
My part I designed and built the virtual handles.
equipment-explorer-labels
Label placement
Labels arranging themselves around a model as the view changes.
My part I wrote the label placement.
equipment-explorer-interaction
Interaction run-through
Selecting, inspecting and isolating parts, ideally on desktop and in XR.
My part I designed much of the interaction logic, from the UX through to the code layout.
Isolations
isolations-lock-order
Lock and tag order enforced
Trying to fit a lock or tag out of order and the app stopping you.
My part To confirm: whether the lock and tag ordering rules are mine.
Hazard Identification
Major Emergency Management
mme-fire-and-gas
Fire and gas pages
The fire and gas pages, captured full screen at 1920 by 1080.
My part I made the fire and gas pages.
Live simulation
live-simulation-link
3D driven by the live simulator
Operating plant in 3D while the process simulator's values respond, ideally side by side.
My part I built the real-time 3D layer and its link to the live process simulation.
Platforms
platforms-one-scenario
One scenario, every platform
The same scenario in the browser through WebXR, standalone on Quest or Pico and on an Igloo multi-projector screen.
My part To confirm: which ports were mine alone; the WebXR and multi-platform work was partly shared.
Icons and graphics
icons-end-user
End-user icons
The end-user facing icons laid out together on one sheet.
My part I created all of the end-user facing icons.
graphics-in-app
In-app and button graphics
A selection of in-app and button graphics, ideally in place on a product screen.
My part I made these in-app and button graphics.
Marketing
marketing-materials
Marketing materials
The marketing pieces you made, one capture or export each.
My part I made these marketing materials.
Interaction design
ux-stealable-selection
Stealable selection
Two users in one session: one holding an item while the other selects it and takes over.
My part I designed stealable selection. Users work together, so one can take over from another, including when a trainee can't let go of something someone else needs.
ux-advanced-options
Advanced options
The advanced options open, and a change in them taking effect.
My part I started the advanced options for developers and advanced users, largely maintained them and proposed many of their settings.
ux-led-exercise-order
Instruction order in led exercises
A led exercise stepping through its first few instructions.
My part I chose the order instructions are given in led exercises.
ux-display-modes
Changing display mode mid-session
Switching display mode partway through a session.
My part I designed changing display modes mid-session.
highview-save-load
Save and load
Saving a session in the Highview Power project and loading it back.
My part I designed the save and load functionality for Highview Power.
ux-fly-mode-landing
Landing from fly mode
Flying, then landing back on the ground.
My part I designed the landing system for fly mode.
Animation and motion
anim-inverse-kinematics
Inverse kinematics
A limb or mechanism following its target through inverse kinematics.
My part I wrote the inverse kinematics.
anim-truck-wheels
Truck wheels
A truck driving, with its wheels turning to match.
My part I animated the truck wheels.
anim-player-motion
Player motion from recent history
A player moving, with the animation following their recent movement.
My part I calculated player motion from recent movement history.
liberty-linkage-animations
Linkage animations for Liberty Steel
One of the linkage animations in the Liberty Steel model running.
My part I built the linkage animations.
Maths
maths-root-finding
Root finding
A graphic of the root-finding work: a method converging, or where it is used in a product.
My part My root-finding work.
maths-interpolation
Interpolation
A graphic of the interpolation work, such as a curve through sampled points.
My part My interpolation work.
maths-shaft-kinematics
Shaft kinematics
The shaft kinematics graphic.
My part I worked out the shaft kinematics, prototyping them in Haskell.
Laser scanning
liberty-laser-scanning
Scanning for Liberty Steel
The scanning methodology: scan positions, a registered point cloud or the steps in order.
My part I worked out the laser scanning methodology.
faro-overview-graphics
Automated overview graphics
An overview graphic produced by the FARO SCENE automation, ideally beside the scan it came from.
My part I automated the creation of overview graphics in FARO SCENE.
faro-flythroughs
Automated fly-throughs
A fly-through produced by the FARO SCENE automation.
My part I automated the creation of fly-throughs in FARO SCENE.
Performance testing
perf-testing-graphs
Automated performance testing
A test run with its in-app graph, then the same results plotted outside the app.
My part I designed and built the automated performance testing and its graphs for review.
Pictures and video are on their way. Switch to the timeline for the story so far.
Beyond the gallery
Systems, tools and design
A lot of my work at TSC doesn't show up in a screenshot. Alongside the pieces above, these are contributions I made across the product range.
- Core systems
- Licensing infrastructure in the 3D products, built on the company's existing licensing protocol
- The settings manager the products relied on
- The repair manager, designed and built almost from the ground up
- The CharacterManager, controlling player and camera movement across output types
- The date and time manager
- The task system's design, which others in the team later added to
- The inventory system, ported into a more modular framework
- Architecture
- The UserInputManager, taking input without window focus when Unity didn't allow it and feeding it through a generic interface to our scripts
- The UserInputReceivers system
- An input rank system
- A context stack system
- Systems for referencing singletons
- Encapsulation in C# and Unity through clear contracts and separate assemblies
- Shared code through SVN externals: first in bulk for reuse, later split up more selectively
- Interaction design
- Stealable selection, so collaborating users can take over an item someone else is holding
- The interaction handles in Equipment Explorer
- Advanced options for developers and advanced users, which I started and largely maintained
- The order instructions come in during led exercises
- Changing display mode mid-session
- Save and load for Highview Power
- A landing system for fly mode
- Animation and motion
- A modular, component-based animation system with decoupled abstractions
- Inverse kinematics
- Truck wheels and player motion calculated from recent movement
- Linkage animations in Oil Pipeline and for Liberty Steel
- Build, testing and tooling
- Automated performance testing inside the apps, with results graphed in the app and outside it for review
- Most of the 3D Jenkins work after its initial setup: scripting, process work, Unity integration, analysis, maintenance, file organisation and performance improvements
- Organising SVN so modular systems stay separate
- Maintaining SVN and mentoring the team in using it
- Scripting in Haskell, AutoIt, Python, C++ and C#
- Maths
- Root finding
- Interpolation
- Shaft kinematics, prototyped in Haskell
- Graphics
- Every end-user facing icon
- In-app and button graphics
- Marketing materials
- Map and 3D model backgrounds for the major emergency management DCS screens
- Fire and gas pages for the same simulators
- Laser scanning
- The scanning methodology for Liberty Steel
- Automated overview graphics and fly-throughs in FARO SCENE