Personal Work
Outside of my educational and professional obligations I like to work on projects which present interesting challenges.
Shard Engine / Dead By Destiny (C++ / HLSL / Direct3D / Newton / Getic)
What began as an aborted attempt at an ambitious collaborative project became my largest and longest-running software project to date. The Shard Engine has become an ongoing project in which to prototype engine features as I read about them, each of which has then been expanded and fully integrated into the engine.
Primary features include:
- HDR rendering and fullscreen postprocessing
- BSP environments loaded from Zalsoft Getic
- Newton-based physics simulation
- Basic Lua scripting support
- Custom shader/material system
- XML-based game object declaration
Shard Engine Map PreProcess (C++ / HLSL / Direct3D / Getic)
One of the ongoing problems with the Shard Engine after allowing it to load Getic BSP was that the lightmaps Getic generates are low dynamic range and generated according to an unknown lighting algorithm, causing non-lightmapped objects to stand out starkly. The solution was to create an intermediate tool to replace the lightmaps.
Relief Mapping for Half Life 2 (C++ / HLSL / Source Engine)
During the development of Cerebral Corrupt, I happened to read Fabio Policarpo's paper on Relief Mapping. As a potential feature for our game I created a derivative of Half Life 2's standard object shader which performed Relief Mapping before the usual texture and lighting steps. Asset production schedules and shader model issues prevented it from being useful in the team project, but the demo itself was pleasing and gave me a very interesting education in Source's unusual approach to shaders.
2D Physics Engine / Starship Sumo ( Java )
Out of a desire to try out a language other than C++ and a growing interest in physics simulation due to working with the Newton API, I decided to attempt to make a small game using realistic physics behaviour that could be embedded into a web page. The engine uses simple Euler integration and treats each object as a collection of convex polygon hulls, except for point objects which are treated as a special case.




