Computer Graphics
Software
CSG
My first ray tracer was called CSG, because it supported CSG. It was unusual in that I opted to support unbounded primitives. Sadly, I seem to have lost all the images I and my colleagues generated with CSG. Some were quite spectaular for their day. Several undergraduate projects extended CSG with amongst other things procedural textures and octrees. It was even used to model and visualise roman archaelogical sites in Canterbury.
Ea
The son of CSG was Ea. This was intended to be a renderer independant language (or library) for describing scenes. It looked uncannily like RenderMan, except not so good! Ea still works, and runs on my PC at home. It supports ray tracing and z-buffer based rendering. Here are some ray-traced images:
|
A model containing loads of snowmen -- the wonders of procedural modelling! Click image for full-sized version. |
|
|
The same model replicated -- the wonders of hierarchical modelling! Click for full-sized. |
|
|
Its Christmas time again. Click image for full sized version. |
TinyRender
The next generation of software was TinyRender. This was my first foray into C++ design and programming and was designed as a teaching platform. It is a traditional z-buffer based renderer which supports different pipelines, surface shaders and more! It turned out to be not so tiny after all. Images to follow.
Tracey
The latest big project is called Tracey. This is another C++ project, but this time the emphasis is on modelling and animation. Tracey contains a ray tracer and an OpenGL renderer. Like TinyRender it has very flexible mechanisms for defining surface shaders. It is possible to either build a form of shade tree using the built-in shader combiners, or if you want to do something special, you can write a DLL shader and plug it in. Here is a progression of shader complexity starting with diffuse, adding specular, then a DLL stripes shader. The next two show the addition of texture space noise and a normal perturbation (bump) shader.
It also has an animation language. The example below was rendered via OpenGL. Click to view animation. Note, that the light source is animated as well as the geometry.