Software Development

Software development is actually what I know best. Prior to joining the NCCA I worked at Cambridge Animation Systems developing Animo. Before that I worked for other non-animation software companies, and researched computer architecture.

Most of these apps are available for MacosX, Win32, Irix, freeBSD and Linux(x86) though not all are compiled for all platforms. If there's a particular app you need for your platform, then let me know.

ScreenPad for iPhone(iOS)

This application lets you view your Mac webcam from an iOS device on the local nework. However that's really just the start of it, as it allows you to write MacOS apps which use the touch device as an extension of their own display - drawing, and recieving multitouch info. Simply install the SceenPad app on your iOS device, and then it can talk to any screenPad compatable client.

Movie Size for iPhone

My first iPhone app is a simple calculator to see how much diskspace a movie project is going to need.

A Browser for Plays

A simple app to let you nagivate around theatrical plays marked up with Play.dtd XML. All of Shakespeares plays are available in this format, so I thought it might be usefull to someone.

DMX Lighting

I've recently been working with "real" lighting systems - the sort of things you see at gigs. Here are a few programs that I've written that might be usefull to some people

Photon Map Source Code

Angel uses photon mapping, based on code by Henrik Jensen (from his excellent book). I've decided to release this code so you can use the same code as Angel does to create, store, load and access photon maps. Even if your renderer doesn't support GI, you'll at least be able to access maps created in Angel.

Filter Simulator

I'm currenlty researching how photographic approaches can be applied in computer graphics. This Mac Application allows you to experiement with the effect of various filters on spectral light sources.

CoHabit - Audio Unit Host

This Mac Application allows you configure a set list of Audio units, and set between them quicky and easly during a live performance.

Fast Power Function

When porting Angel to the PS2 I needed to vectorize the power function (used for specular highlights). The resulting Power Function could generate 4 powers using only 7 VU instructions - resulting in a massive speedup.


When developing RenderMan shaders it is common to repeatedly render a trivial scene at low res to observe the effects of the code under development. SLander is a BMRT compatable shading engine which currently is configured to render a simple plane or sphere with a number of attatched shaders allowing the results to be viewed more rapidly than would be possible if full geometry was considered.


It's been a long time making it into a portable form, but the Buffy shader debugging system is now available for download. Buffy allows shaders to be single stepped, and variables to be inspected as the shader is running.


For those that would rather paint than code, Kendra is a basic 3D painting system. Though not exactly Amazon Paint, it allows textures to be quickly positioned on geometry described by rib files, and saved as tiff's for import into a more powerfull 2D painting system.


Angel is a renderer which I'm developing as part of the Buffy project. It's not quite RenderMan compliant, but is close enough for many practical uses.

HDR Tools

They're currently pretty flakey, but I've started writing a few toos for HDR . They're very basic but if you find them usefull, maybe I'll improve them.


Faith is an experimental tool for managing renders, by spliting them into layers.


Inoise Anti-alising shaders is a continual battle. Inoise is a filtered verision of the standard Perlin Noise function, and produces signifigantly better images than simple frequency clamping.


Mental Ray's core rendering engine is excellent, but its API's are difficult to work with, and have limited support. Ethel converts Rib files into Mental Ray compatable MI files, allowing Mental Ray to be mixed into a RenderMan based production pipeline.


RenderMan allows procedural pritives, where an external program can be called mid-render to generate additional geometry for a scene as it's needed. HaRM demonstrates how this can be used to invoke Houdini on the fly, and extract objects from hip files as required by the scene, rather than generating rib code for all primitives a-priori.


New in PRMan3.9 is the RiBlobby functions, allowing metaballs to be evaluated at rendertime. While this is relativly well documented in Pixar''s Application note #31, and appears to be well designed and thought out, the actuall RIB syntax is more than a little intimidating, effectivly being machine code for a virtual dataflow machine. Edmonds is an assembler for this machine, taking a human readable description of the required object and producing the required RIB description of the object..


Houdini's CHOPs are an excellent framework for creating interactive work. However while they provide good realtime control over the 3D parts of Houdini, there is no simple way to control the replay of pre-rendered sequences. Risch addresses this by allowing CHOPS to act as a jog wheel for an image replayer running on a remote machine.

3D Stereo Imaging

Of course the universe is only 2D but by combining pairs of images we can create an illusion of the theoretical so called "Z" axis...


Leph is a basic two pass mesh warp/morphing tool.

Gamma Calibration

Many systems do a very bad job of gamma correcting images for display, and most users consider Gamma to some kind of magic (if they've head of it at all!). Here's some advice on gamma management, along with some tools to help you get the best from your display.


Shell script is great for mucking around with frame sequences. However one thing that is tricky is generating padded frame numbers. I therefore write a C Program so I could easily pad numbers with leading zeros.

Pixmap Library

Virtuarly all these apps are based on the NCCA Pixmap library. I've passed this on to a few people, who keep hassling me for upgrades and ports, so I've uploaded some of the libraries. They include routines for loading and saving tiffs and jpegs, drawing of lines, triangles, and quads, Zbuffering, resampling and simple windowing.

Arduino Mumblings

I've been playing with some Arduion boards, and while I've not done anything neat with them yet, they are pretty cool. Here are some usefull bits I've figured out so far...

Synthesising a Hammond

This has nothing to do with graphics, but it sounds pretty nice... How to make a dead sampler sound like a B3.

Ian Stephenson.
DCT Systems
NCCA,Bournemouth University