Thomas Sampson

Portfolio

Note: All the native binary packages found on this page are built in release mode and statically link the Microsoft CRT where possible. I also make an effort to ensure any required dependencies are included in the packages. That said, it’s still a good idea to grab the latest Microsoft Visual C++ 2010 and DirectX redistributables for good measure.

2012

Steel Engine »

SteelEngine is a PSP (Playstation Portable) C++ game engine I wrote from scratch which includes support for rendering, simple physics and 2D collision detection, SIMD vector math, transformations, sfx/music, input handling, network/UMD IO, GUI elements, particle systems, and asset conditioning/packaging. SteelEngine went on to be used by the Steel Minions student studio at Sheffield Hallam University to create PSP Minis titles such as BounceBack.

Downloads: source (available upon request)


CTU

CTU »

CTU is a cross-platform command line task management system, which allows full control and management of text based task lists directly from the terminal / shell. ctu allows tasks to be added, prioritised, listed, sorted, removed and cleared, using an intuative command line syntax. Task lists are stored in a simple and hand-editable text based format, ideal for maintaining and sharing personal todo lists. One of the main motivation of ctu was to develop my skills in unit testing and cross platform development.

Downloads: source

MyEnv

MyEnv »

MyEnv uses a collection of batch scripts to create a fully customised command line environment, harnessed by Console2. MyEnv can be configured to store and deploy all of your user settings for apps like Visual Studio, CMake, Mercural, Sublime Text etc and will automatically add your favourite command line apps (grep, dumpbin, msbuild, make, nano etc) to the path. MyEnv can also be used to add aliases for long winded commands (using DOSKEY).

Downloads: source

MComp GSD Year 4

Procedural Material Tool

Procedural Material Tool »

This project was the main focus of my final year as it acted as my individual or ‘final year’ project.

Downloads: source (confidential)

Perlin Noise Tool

Perlin Noise Tool »

During the lead up to commencing my final year project I was keen to investigate Perlin Noise and its various uses within games and rendering technology. I put together this little application to visualise and tweak the Perlin Noise algorithm in both 1D and 2D. The tool allows you to add a collection of octaves and tweak the frequency, amplitude and phase of each.

Downloads: source

Monty Mole Game Jam Entry

Games Britannia Game Jam Entry »

After being presented with gameplay ideas and artwork from a local college who had entered the Monty Mole Game Jam competition at Games Britannia, local artist Rory McHugo and I were given 7 days hours to produce a playable prototype. After working remotely and occasionally on the game for a few days using Game Maker, we met with the college students at the Games Britannia event in Rotherham who helped us refine the gameplay and put the final touches on the playable prototype. You can read Rory’s account of the event here.

Downloads:

Phyreballs

PhyreBalls »

PhyreBalls is a two player 3D space arcade game similar to asteroids in which two players compete to survive an onslaught of space debree. Phyreballs was written entirely in C++ using the PhyreEngine SDK and runs on the PC, Playstation 3 and Playstation Vita platforms. We were asked to choose three features of the PhyreEngine SDK to incorporate into our game. My choices included custom shaders, shadow rendering, geometry instancing, a custom tool for building asset data, and the implementation of a PhyreEngine patch to add support for full-screen mode on the PC.

Downloads: source

Clockwork Memory Manager

C++ ‘Clockwork’ Memory Manager »

This project involved the implementation and full documentation of a game-related library of our choice, paying specific attention to the usability, maintainability and simplicity of the library’s external interface. I chose to implement a C++ memory management library capable of tracking allocations, providing memory usage statistics and detecting buffer overflow/leaks. I used the Google Test Framework to provide full unit test coverage for the library and used HelpNDoc to thoroughly document the libraries API within a .chm file.

Downloads: source

Industrial Practice Talks

Industrial Practice Talks »

During the final year of the course we were each asked to give a series of presentations on a games industry related topics of our choice, falling into the category of either art, design or technology. The premise of these talks were that we were pitching to/teaching a group of colleagues about a particular ‘up and coming’ topic or technology in order to build our research, investigation and communication skills.

Procedural Asset Generation    Continuous Integration    C++11
Cell Noise    3D Technology    Stereoscopic Game Development    Deferred Rendering

MComp GSD Year 3

BounceBack

BounceBack (PSP Minis) »

BounceBack is a PSP Minis title which began life as a small games prototyping assignment. My main responsibilities involved writing and maintaining the game engine used to build BounceBack, along with a collection of tools and build systems to support the game’s development. I also worked closely with the game-play programmers to implement aspects of the core game mechanics and played a key role in the game’s testing and submission process.
Downloads: source (available upon request)

Post Process Motion Blur Assignment

Post Process Motion Blur Assignment »

For this assignment we were asked to research and implement an advanced graphics technique of our own choice. We were also required to produce a report for the attention of a game studio technical director, advising of the benefits ad implications of the technique, discussing the complexity of adding the effect to an existing game code-base. I chose to implement post process motion blur, rebuilding world space positions from the depth buffer along with the view matrix of the previous frame to generate a velocity buffer. This velocity buffer was used to apply a post-process per-pixel directional blur to the rendered scene.

Downloads: source

Shadow Mapping Assignment

Shadow Mapping Assignment »

This assignment involved using simple shadow mapping techniques to cast real-time dynamic shadows onto a non-planar terrain. As part of the assignment we were also required to draw the shadow maps for each caster on-screen, and have the whole scene (including shadow maps) exportable to an external .X model.

Downloads: source

Collision Detection Assignment

Collision Detection Assignment »

This assignment involved the simulation of multiple spheres falling onto a height-map. This involved implementing a library of sphere, ray and plane intersection tests and working with barycentric co-ordinates, swept volumes and the minkowski difference calculations. All collisions had to be resolved correctly with no sphere/plane or sphere/sphere intersections allowed. The final application is also capable of stacking spheres such that they come to a natural looking rest upon the heightmap.

Downloads: source

AMKCO Website

AMKCO Website »

This is a website I put together for my dad’s machine knife manufacturing company. I built the site from scratch using XHTML/Javascript/JQuery and Photoshop. The briefing for the website was to focus on simplicity and to respect the existing branding and colour scheme of the company.

Links: 

MComp GSD Placement Year

Placement Presentation

Placement Presentation »

Towards the end of my placement I was asked to give a presentation to a visiting lecturer covering all aspects of my placement including the work carried out on each team. This presentation details the projects I carried out on the Debugger, Compiler and Tuner teams respectively.

Downloads: 

Beyond The Green Button

Beyond The Green Button (Guest Lecture @ SHU) »

Whilst on my placement at SN Systems I was asked to return to Sheffield Hallam University to give a guest lecture to the second year students on my course, on a topic of personal interest. Throughout my first two years at university there was little focus on how native C++ applications are assembled and debugged. As I was working on the PS3 toolchain team at the time, I decided to put together a presentation which detailed all the steps which occur when using the ‘green button’ in Visual Studio to build and run a solution. This presentation covered topics such as; Translation units, executables, static libraries and dynamic link libraries, the pre-processor, assembler, symbols and symbol scoping, name mangling, compiler optimisations, dead-stripping, PE/ELF layout, program sections, the program loader, and some basic debugging tips.

Downloads: 

MComp GSD Year 2

Syphon – DirectX Game »

This group assignment involved the planning and production of a playable 3D game, written entirely from scratch in C++ using the DirectX 9 SDK. Our original idea was to implement a fast-paced puzzle game similar to the hacking game founding in BioShock, but implement these mechanics in 3D, and so Syphon was born. Syphon is a 3D puzzle game where the player connects concrete pipe segments to ensure sewage can be safely channeled out of the level. Our game included 3 themed levels complete with scenery, skyboxes, animations, BGM and SFX. 3D meshes were modeled by the artists in 3DS Max and imported into the game in .X format.

Downloads: source

3D Math and Rendering - Assignment 2

3D Math and Rendering – Assignment 2 »

This assignment was an extension of the previous assignment and involved writing a software fragment rasteriser to manually shade a polygonal patch using different lighting models and material properties. This involved manually implementing the triangle setup, scanline traversal, interpolation of vertex data and lighting configuration, invoking a cpu fragment shader to determine the colour of each pixel drawn to the screen using the OpenGL glVertex2i method. Flat, Gourad and Phong lighting models were implemented as cpu fragment shader functions.

Downloads: source  

3D Math and Rendering - Assignment 1

3D Math and Rendering – Assignment 1 »

This assignment involved writing a basic software renderer written in C++ using only the OpenGL glVertex2i method to render the wire-frame/un-shaded representation of the scene. This project involved manually implementing techniques such as back-face culling, viewport clipping (using the Cohen-Sutherland algorithm), manual generation of tansform/view/projection matrices and support for multiple cameras/viewports. I also extended the assignment to parse and render Wavefront object files (.obj).

Downloads: source  

Connect4

Network Multiplayer Connect 4 »

This assignment involved using python along with the pygame library to create a simple game. The main objective of the assignment was to select 3 features of the python / pygame libraries and utilise these in a playable 2D game. I chose to focus on the threading, networking and rendering functionality exposed by python/pygame to create a networked game of the traditional Connect4 board-game. After discussing different approaches a threaded client-server system was implemented whereby one of the players could act as the game server.

Downloads: source

NGC Optimisation

Nintendo Game Cube Optimisation Assignment »

This assignment involved taking an un-optimised skeleton application which rendered a 3D scene on the Nintendo Game Cube and using various optimisation techniques to improve performance. The optimisation process was guided by heavy use of the SN Systems NGC Tuner application in order to identify and understand bottlenecks and pipeline stalls within the application. Techniques such as branch-prediction, re-writing hot code in assembly language, register allocation optimisation, loop-unrolling, constant-folding and out-of-order execution were used to ensure the application could run comfortably at 30fps.

Downloads: 

Advertisements