Real-time Ice Shader Development

I developed some shaders with Cg in Unity3D free for my specialist project. Here is the final result:


I enjoyed this project, as I got to do lots of research into technical papers and books on topics around real-time shader development – from parallel programming in CUDA to Pixar’s physically-based rendering to Maths and Physics text books to the game engines in use for the upcoming PS4. In fact I probably read over 1000 pages and wrote under 1000 lines, including various experiments along the way.

brdf22D BRDF Shader

I implemented the shaders in Unity 3D free using the Cg language. All models and textures were created in 3ds Max, Zbrush and XNormal, apart from Unity’s internal terrain system and stock cube maps.

Unfortunately, I was unable to implement a lot of features that I wanted to (sub-surface scattering, self-shadowing) because Unity Free does not allow render to texture. I might have chosen a different engine at the beginning had I known this. Otherwise, Unity was a great tool, very easy to pick up, with excellent support.


Art Compilation Gallery

I was asked to put together some art for an interview, so trawled through the last couple of years and picked some bits and pieces. I’ll try and keep this page updated with sketches and paintings in the future.

3D L-Systems Programming Project

I only had about 2 weeks to program this from start to finish, after having designed it in about the most complicated way I knew how: classDiagram

It came together in the last 30 hours (non-stop)! Here’s the interface when you start it – it’s modular so you can customise the positions of the controls and log, use multi-monitor setups etc. Currently it only works on Linux.


The program lets an artist create 3D L-Systems – self-similar branching structures – using recursive Production Rules applied to an Axiom. There are a few characters that affect the shape – move forward, turn, branch off etc, and other characters become variables that you can define.Screenshot

The live update means any time you change anything in the contents box, the whole system will be updated. This can cause the program to hang if you try to put iterations at 50 for example, but means the artist has instant feedback and can quickly learn the effect of the character he is changing or adding. You can watch the growth of the system with a slider, which is real-time even for complex structures.


Continue reading

BeatSprint Music Game – Group Project


This game is a side-scrolling platformer with one action: jump! You choose music from your hard drive, and the level is generated for the length of the song. The mood and pace of the music dictates the difficulty (more beats per minute means more obstacles to jump over).

After a summer learning theories on making games (a short-lived attempt at creating one is visible at my smuggler game blog), I jumped at the opportunity when my uni started allowing our course to pitch a game, rather than an animation, for the group project. I spent 2 weeks getting together a music visualisation demo in Qt and C++, and with a few hasty concept designs, my pitch was enough to get the idea chosen!

We were randomly assigned group members – I had no idea who any of my three team members were (of course I know them well now)! Everyone had clearly defined roles, mine being the leader and game/ engine programmer. After some research into engines, without much of an idea of what the game would be, just that it was a side-scrolling platformer that reacted in some way to music that the user could choose, I decided on the Angel 2D Engine

Some of the engine architecture was very confusing to me (a relative newcomer to C++, and writing games) – there were four destructor-like functions one could call per pointer to an object! I spent a long time on bugs caused by my wrong assumptions about how the engine “should” work. Also I didn’t have a debug build, which I didn’t realise I could do!

The project was 4 months long (along with other assignments) so I learned a lot in that time, both through programming, and being taught in lectures and tutorials.  It felt like every new thing I learned in maths or programming could be almost directly applied to the game. I decided a month before the project’s deadline to restart all the engine programming, switching development OS to Linux (an OS I had barely used) which gave me a lot of motivation to work hard, fast and well. I was still writing the development tools for the artists to add their work a week before the deadline! I taught myself skills that I needed quickly, such as how to write a shader in GLSL in a day, then writing the music-dependent sky shader in a couple of hours.

I knew my personality did not make me a natural leader before starting the project, but after making quite a few mistakes, I learnt an awful lot about managing a team, and getting them working efficiently. Since we were a group of introverts, strung together, communication was in short supply, and at times the project suffered for that.

Here is a link to the executable and source code (unfortunately, it only works in 64-bit Linux at the moment. If I have the time and inclination I might make it multi platform later):

Here are some gameplay videos (having chosen some songs that are distributable under the creative commons license – I don’t want to get in trouble for copyright infringement). Also I had to cut the songs down due to my video recording software breaking after a minute every recording:

AlexBeroza – Purple Nurple

Super Sigil – Thunderlizard at the Art War

cdk – Look to la Luna

djlang59 – Drops of H2O

Jack Bzowski – Art Director
Tom Beaufoy – Programmer (Beat detection, OBJ animation)
Tongqi Ou – Artist


Well I finally got round to putting together a showreel, perhaps 2 months later than I should have. It only took a few hours, once I had the rendered material! I used Premiere and After Effects, which were slow and buggy with 720p video, with which I’ve not worked before.

Projects in order of appearance (more info on each should be available on this blog, at least, shortly!):

1. BeatSprint
In second year, we have to do a group project. This is the first year they have allowed games. I pitched the game idea (which evolved over the first few weeks), and thus led the team. I also did most of the programming, in C++ and OpenGL (with a bit of Lua and Python). My team were: Tom Beaufoy – Programmer, Jack Bzowski – Art Director and Tongqi Ou – Artist. The user chooses a song and has to press only one button, to jump over the oncoming obstacles, which are generated to the beat of the music. The sun sets over the alien city, and foreground landscape is procedurally generated over the length of the song.

2. Charlotte the Necromancer
A character I created in a couple of weeks for a competition, using 3ds Max, Zbrush, Photoshop and Xnormal.

3. Billybob hits the Gym
Animation assignment, entitled “I Wasn’t Expecting That” and lasting 15 seconds. The Maya character/ rig was provided by my lecturer, Jahirul Amin. The environment I did to learn Maya’s lighting and procedural texturing (having come from 3ds Max).

4. Iron Man/ Audi
Modelling Assignment. This was mostly to learn Maya. 2000 quads each, for the Iron Man, and Audi R8.

5. Countryside generator
Scripting assignment. Done with Maya and Python. My first programming, so there are no classes or any more advanced concepts (maybe a lambda function or two but Python’s good at that!), and it’s very buggy. I’m quite proud of some of the procedures!

6. Billybob fall loop
Done for the same assignment as 3.

The music was pROgraM_vs._Us3R by morgantj, and is distributable under creative commons. The full song is available here:

Please get in touch if you like my work or would be interested in employing me.
Thanks for watching!