Hi, I'm Jamie. I am a final year student at Abertay University, studying BSc(Hons) 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 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.
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
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!
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.
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!
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!
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!
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.
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.
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#.
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.
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
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
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
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
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
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
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
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
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
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:
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.