Professional Work

Current Work

I'm currently working for Frontier Developments on their recently announced project, Elite: Dangerous.

Coaster Crazy

I only worked briefly on Coaster Crazy, coming in at the end of the project to help iron out performance problems and fix a backlog of bugs. I also spent some time trialling rendering tech such as light-rays and motion blur, to assess its feasability if the game was ported to higher-performance platforms in the future.

Kinectimals Mobile

Kinectimals Mobile was an unusual project from my perspective, working in a much smaller team than previous games, using mostly off-the-shelf production tools and libraries, and with a lead platform (Windows Phone 7) that doesn't permit the developer to write their own shaders.

The primary challenge throughout development was to deliver animals that were recognisable as being the same fluffy creatures that, in Kinectimals, consumed a sizable chunk of the XBox 360's rendering power. This began with a pre-production experiment to see whether the original shaders could be ported iPod Touch, whether enough could be cut out of them to run at an acceptable framerate, and just how bad it would look. After those experiments were complete, I then worked on the technique that we eventually used for all platforms, which involved using a mesh of perpendicular fins to lay down a furry silhouette of the animal into the scene's alpha channel, and rendering over that with an extruded copy of the animal's base mesh.

When I wasn't busy firefighting all the unpleasant edge cases that our fur rendering caused, I found time to write the fin mesh generator for our Unity/iOS port as well as a set of very cheap shaders for our to free up rendering time for the animal, and a particle renderer for our XNA platform that produced similar behaviour to Unity's built-in particle systems when given the same parameters. For both platforms I wrote screen blur/tinting effects, and a component to progressively render more dirt into the animal's fur texture as its stats deteriorate.

 

Kinect Disneyland Adventures

After working on Kinectimals I was briefly involved in the prototyping and early production phase of Kinect Disneyland Adventures. During that period I created a shader to project cartoon-style eyes onto a surface along the axis of a supplied animation bone, and a skin shader that emulates the behaviour of blur-based subsurface scattering effects while avoiding the memory overheads that would entail (since the effect was needed for a large number of park guests). I worked on integrating SpeedTree's shaders into our rendering architecture and modifying them to match the look and feel of the other ingame objects, as well as a feasability study into switching the project from forward to deferred rendering.

 

Kinectimals

I joined Frontier Developments as a graphics programmer in January 2009 to work on Kinectimals. It was an interesting project, stressful given the time constraints and uncertainty of being a launch title for a new piece of hardware, but the focus on high-quality graphics meant I really got an opportunity to learn and experiment with new techniques.

Features I had a primary role in creating include the grass system (and its compilation tool) which uses a depth-and-direction texture to allow arbitrary objects to squash it down and have it slowly spring back up. I also worked on the sand/mud footprints, which modify the ground's surface normals with a decal-like effect that uses a trapezoid lookup texture to avoid having to access the underlying geometry (as it was unavailable). Besides that I worked on the analytical antialiasing method we used to render whiskers, cursor trail effects, sea and snow shaders, and a collection of smear and spatter effects for when the animals interact with the camera.

Besides that I was also involved in profiling and optimising problem scenes that were taking us below the framerate goal, liasing with artists and animators to make necessary shader variants and to troubleshoot content problems, and generally making a nuisance of myself all over the office.

 

Barcrest Games

From October 2007 to October 2008 I worked as a software engineer for Barcrest Games. My main responsibilities were programming state machine based game interfaces including their resource management and display, and constructing independent logic classes based on spreadsheets and overall gameplay documents. Secondary aspects of the work included updating older games to current standards, prototyping new feature types or payout behaviours, and setting up logging for legal purposes. While there I learned a lot about large-scale engine design and the benefits of maintaining a well-tested library of common code. I was also introduced to version control, automated build servers and the values of robust error logging.

Games in which I was primarily involved were: