Jamie Buttenshaw

Graphics & Engine Programmer

Download Resume

About Me

Hi, I'm Jamie. I am a final year student at Abertay University, studying Computer Games Technology. I'm particularly interested in graphics programming and engine development. I am a:

• Back-to-back BAFTA YGD competition finalist in 2017 and 2018.
• Winner of 4 distinguished prizes for outstanding performance in my studies.

I specialize in C++ and D3D12, and I excel in linear algebra and other mathematics relevant to game development. I also have a strong interest in fundamental computer science and low-level programming.

I excel in my studies, maintaining straight A grades for every module and having achieved 4 prestigious awards in my time at University so far. Most notably, in 2022 I received the Alexander D G Kydd Prize for being deemed the best second year student overall in the School of Design and Informatics.

I am currently researching advanced Signed Distance Fields rendering and I am looking into advanced GPU-driven data structures and DirectX Raytracing to bring my project to life!

Outside of programming, I love hiking, climbing, and other outdoor pursuits.

jamie.buttenshaw@gmail.com
Jamie Buttenshaw on LinkedIn
Jamie Buttenshaw on GitHub
Jamie Buttenshaw on itch.io

Real-time Rendering and Construction of Signed Distance Fields

Signed Distance Fields in Games

Signed Distance Fields (SDFs) are an alternative representation of geometry to the standard of polygons as used by most games. SDFs have a bunch of unique properties making them useful for constructive solid geometry sculpting tools, deformable and fluid objects, and volumetric effects.

Examples of using SDFs in games include Dreams by Media Molecule, and Claybook by Second Order. However, SDFs haven't seen much use in real-time interactive applications due to performance and memory constraints.

My project set out to investigate a method to utilize real-time modifiable SDF geometry using a memory-efficient implementation!

What Does It Do?

My project builds geometry out of a list of primitive shapes, called 'edits', that can be combined together using addition and subtraction. An object can be built from hundreds of edits.

By reconstructing the object every frame, and animating the edits that make up an object, dynamic geometry can be created! Using smooth addition and subtraction, really cool geometry can be made that would be difficult to achieve using triangles.

Previously, it was not possible to build dynamic geometry from SDFs represented by a sparse structure of discrete volumes of data.

How Does It Work?

The challenge is to build a representation of SDFs that is memory-efficient, but also fast to construct and render. This was done by constructing objects out of 'Bricks' - which are small volumes of space that contain SDF data. Objects can then be built out of up to hundreds of thousands of individual bricks. This means that bricks only need to be built around the surface of the object - making it much more memory efficient!

These bricks can then be rendered using DirectX 12 hardware-accelerated raytracing. When a ray intersects with a brick, sphere-tracing is used to reach the surface of the SDF.

Objects are built using the massive parallel compute capabilities of the GPU. Bricks are hierarchically refined to better approximate the surface. Once the bricks are small enough, they are filled in with SDF data to complete the object. Using the GPU to build the geometry makes it fast enough to use in real-time!

Making It Fast!

Rebuilding objects made up from hundreds of edits and hundreds of thousands of bricks at interactive frame-rates requires lots of optimizations in the construction pipeline.

The most important is edit culling. Not every edit that makes up an object will affect every brick - so it is really important to only evaluate the ones that you need to! This is visualized on the right. Green areas are made out of only 1 edit - red areas are made out of lots.

Lists of edits are built for each brick, so that only the required edits are evaluated. This made evaluation up to 30 times faster!

Find Out More!

The videos section below documents my journey to building my honours project - from beginning to work with SDFs to building the advanced hierarchical construction algorithm for the GPU.

Check out my project on GitHub too!

Videos


Experience

Teaching Assistant

Abertay University

I was a graphics programming teaching assistant for 3rd year students. I help students get to grips with graphics pipelines and shader programming. Communicating complicated concepts to students unfamiliar with the subject was a great learning experience, and I find it very rewarding as well as good practice for my own graphics knowledge.

Research Assistant

Abertay University

For 4 months I was a research assistant at Abertay University, working on a multiplayer XR Sandbox with emerging VR technology, C++, and Unreal Engine 5. This involved plugin development for UE5, native XR development, and multiplayer cross-platform development.

Gameplay and Tools Programmer

Trixel Creative

Alongside my studies, I spent a year programming for the community-driven project Restitched, working on physics, game mechanics, and tools development in Unity with C#.

Work Experience

Blazing Griffin

At 15 years old, I had 3 days work experience at Blazing Griffin, where I did quality assurance and programming tasks which included testing a new level, and investigating and prototyping Unity-Twitch integration possibilities.

Skills


Projects

Developing Large Projects in a Team

For about a year I volunteered as a member of Trixel Creative to help develop their game Restitched. I worked with a team of up to 20 others to develop Restitched using Unity and C#.

Through this project I gained invaluable knowledge about team work and collaboration, especially regarding good practices for programming and source control on a larger scale. I worked on game mechanics, tools development, graphics programming, and other areas.

 View Project
 View Steam Page

Using Compute Shaders to Generate Intricate Terrain

I developed a procedurally generated world as a coursework project. The world features extensively customizable heightmap-based terrain generated using gradient noise, cellular automata, and compute shaders. It demonstrates a huge landscape to explore that is dynamically created on-the-fly as you explores.

The goal of this project was to create a customizable and interesting world that can be edited and explored in real time. This project was created using C++ and Direct3D 11.

 View Demo On YouTube
 View Source on GitHub

Exploring PBR Rendering and More with D3D11

This project is a deep-dive into graphics programming with C++ and Direct3D 11. I conducted extensive individual research into PBR lighting and materials, which visually set my project apart from my peers. I also researched and implemented many other features, including dynamic tessellation, pre- and post-processing effects using compute shaders such as tone-mapping and bloom, and various shadow techniques.

 View Demo On YouTube
 View Source on GitHub

From Framework to Game Engine

I developed Crystal Caverns as a final coursework project for my first year of university. Notably, it is created using my own advanced framework built on top of the SFML library. I went excessively above and beyond to significantly challenge myself, foraying into areas that I wouldn't covered at university for several years to come.

SFMLEngine has a variety of systems, including resource management, ECS, custom shaders and 2D lighting, physics, collision systems, and more. See the README for details on the features of SFMLEngine.

 View Crystal Caverns On Itch
 View SFMLEngine On Github

Architecture for an Animation Engine

I built Animix as a 4th year university project. It is a 2D and 3D animation engine, with a primary focus on 3D skeletal animation. It is built with Abertay University's game framework 'gef'. It features a neat state machine system, where the state machine can be described in JSON; including all possible states, blend trees to produce poses for each state, transitions between states, and parameters to control variables within the blend tree. I put a significant focus on practicing good software design and making good use of C++ to build this project.

 View Project On GitHub
 View Demo On YouTube

Simulating the Studio Experience

Continuance is a game made in UE5 where the player uncovers the story behind a strange world by playing mini-games to collect puzzle pieces.

This project was produced as part of the Abertay 'Professional Project' module, where I worked with 7 others to fulfill a brief in an environment designed to simulate a real-world game development experience. We were lucky enough to work with The Chinese Room, and it was a challenging but rewarding experience to work as a team to produce a narrative-driven game.

 View Project On Itch
 View Trailer On YouTube

Graphics Programming Basics... and Beyond

This project was a demonstration of fundamental graphics programming techniques using the legacy fixed-function OpenGL pipeline.

However, I pushed myself to test my knowledge of graphics programming by implementing portals, using stencil buffer magic, depth buffer trickery, and a good dose of matrix maths. I also include advanced demonstrations of procedurally generating and rendering shadow volumes.

 View Demo On YouTube
 View Project On Github

Where It All Began

Stealth is an atmospheric 2D platforming game about evading guards in a dark warehouse. I made this in 2016-17, at the age of 14. Stealth was my entry in the 2017 BAFTA YGD competition, in the 10-14 year old category. I was one of 10 finalists in this category. Stealth is built using Python and Pygame.

It was with this project I really got excited about game development, and it truly sparked a passion for programming that I've followed ever since.

 View Project On Itch
 View Project On Github

A Bigger Challenge.

Tim's Adventure was my second entry in the BAFTA YGD competition, in 2018. It was one of 10 finalists in the 15-18 year old category. I built this also using Python and Pygame, and it's an adventure game about a world of Jelly Bean characters.

After having a great experience the previous year, I was excited to try my luck a second time. This time I had even greater goals, both in terms of game design and development, which significantly pushed me forward as a programmer.

 View Project On Itch
 View Project On Github

Education

University of Abertay, Dundee

Sept 2020 - May 2024

Bachelor of Science in Computer Games Technology

Computer Games Technology dives deep into game development, covering crucial areas such as mathematics, computer architecture, software design, and graphics programming.

I achieved a grade of an A or higher in every single module, and have been awarded the following prizes:

Greenfaulds High School, Cumbernauld

August 2014 - March 2020

SQA Qualifications

From my time in school I achieved 5 A's at Scottish Higher, as well as 4 Advanced Higher A's in Maths, Mathematics of Mechanics, Physics and Music.

I also ran the school's code club for 4 years, where I gave students their first taste of programming and game development with Scratch.