Impermanence Major Project Breakdown

Screen1

I finished my Final Major Project yesterday, after a few months of hard work! It’s a first-person puzzle platformer game called Impermanence, where you lead a character through a purgatory world full of souls. You have lights you can shine on normally invisible objects to make them solid. We intended to create complex story arcs for the game, depending on who you were leading and if it was past or future.Screen2

Screen3

I worked with a great team of three artists from the Bournemouth Computer Animation course (Zack Goodrich, Jamie Bell, Kodie Williams), and a fantastic sound designer/ composer Billy Ross. Thalia was voiced by Kristyn Mass. I implemented their work and did all the programming in Unity, made FX, prop assets, lit the level, helped design the game, helped write dialogue and made some sound effects.

Currently I’d like to fix lots of things and add a trailer, but you can see my contribution breakdown for the game as it was handed in:

Continue reading

Group Programming Project – Fire/ Crowd Sim

One of our projects in 3rd year is a C++ group programming project. This forces us to get better at working together with Agile software development methods and merging code using source control.
fireSimScreen01

Our group chose to do a crowd simulation running out of a burning building. You create the building at the start, add walls, doors, agents, an exit and place for the fire to start burning, then the simulation starts. The fire spreads and gets higher, producing smoke, and agents run from it towards the exit. They die if they get too hot. Fire can be put out using the fire engine’s hose, controlled by clicking and holding where you want to aim, but it moves very slowly, providing some challenge to put out the fire where it is most needed. Points are scored for agents that successfully get out.
Continue reading

Realtime Procedural Soundscape – Innovations Project

This project allowed me to research how to go about programming audio and DSP techniques, a field that I have not really looked into before but is so complicated I don’t think I’ll revisit it lightly!

Here’s the final video making of and software artifact:

I used OnAudioFilterRead, a Unity function that allows access to the audio buffer, to generate procedural audio. I explored three primary methods of synthesis: additive, subtractive and granular, although I feel I haven’t scratched the surface of any of them! The hardest thing was organising all the numbers that affect a complex sound; I can see why visual languages such as Pd are useful.

Here’s a detailed report on the process if you’re interested, including some of the code I wrote:

https://www.dropbox.com/s/j3sfbimcfbr5qql/Exploring%20Procedural%20Sound.pdf

Car Customisation Masterclass Project

A project I have been working on in Unity for a few weeks, to give Ghost Games (EA) some ideas about new ways to customise your car in a racing game.

I used Unity3D to write scripts and shaders (over 4000 lines), 3ds Max to UV unwrap the car they had provided (and do environment modelling), and Photoshop to get other people’s sticker images to work nicely.

There are 3 very different algorithms going on for decorating the car:

The most simple is spraypainting – I raycast from the mouse along the view vector when the left mouse button is held down, and record the ray if it hits the car.  When the mouse is let go, I interpolate lots of new rays from the stroke. At every point on the car a ray hits, a circle (textured quad) is placed on the UV coodinates of that point. These are all rendered to a texture and applied to the car mesh.

The robotic “factory spray” is slightly more complex – I have a vertex shader that moves the car vertices to their UV space – instead of position (x,y,z) they are (u,1,v). The world space position is passed to the fragment shader, along with a random point on the car (determined by a particle system emitting from the mesh).  I colour the “UV space” vertices based on the distance between the fragment 3D point and the “paint point”. This mesh is then rendered to a texture. The problem with this approach is UV seams are visible. Some kind of bleeding/ padding would fix this.

The most difficult thing for me was the stickers – I created an entirely new mesh construction class to deal with Unity’s Mesh vertex limit of around 60,000, which the car exceeded. I have a box you drag around the car, and when you click I transform all the vertices in the mesh construction class by the the box’s model matrix. This allows me to cull the mesh easily, by checking which triangles are in the mesh and deleting them (another thing my mesh construction class was made for – Mesh triangle lists are not the easiest thing to work with!). I use the box to redo the UVs in the culled mesh, making them “projected” from the box’s z axis. I got the idea from here: http://blog.wolfire.com/2009/06/how-to-project-decals/

For the “sticking” animation, I have a uniform float in the vertex shader that allows me to lerp between the a plane on the box’s projection plane, and the final positions, using the u coordinate. The vertices are slightly offset from the car’s surface along the normals to prevent z-fighting.

The project’s not due till tomorrow, so I’ll refrain from putting the application or code up for now!