Individual Work


Quake 3 BSP loader

The Quake III file format was developed by Id software for their Id Tech 3 engine. The format contains a binary space partitioning (BSP) tree which optimizes the rendering of the virtual world based on where the camera is. In a BSP tree the virtual world is divided by infinite planes, dividing the world in two. This process happens over and over again and creates a tree structure, making traversal of the world in O(log N) time. The file format also contains clustering information, potentially visible sets (PVS) and axis aligned bounding boxes at each bsp node (for frustum culling). Lighting is done by the use of light-maps, which are encoded into the file.

This implementation of the format has all the above features, and it also rendering API agnostic. At the moment it works in both Open GL, and Direct X.

[ Gallery | Video]


Patch Based Terrain

This is a patch based terrain system with dynamic and intrinsic level of detail (LOD) calculations. This project uses the binary terrain (BT) file format as height data, the format is very useful because it can be easily converted into a height map image. The terrain itself is divided into a 16×16 grid, each grid has it’s own intrinsic and dynamic LOD. The intrinsic LOD is calculated using the root means squared algorithm, this gives us a rate of change within the patch. The dynamic LOD is calculated by the distance to the camera. After both LOD’s are added there’s a smoothing pass to ensure that neighboring patches only have a 1 LOD difference. Before rendering the terrain patches are stitched together to avoid tearing.
The patches are inserted into a quad tree for efficient frustum culling, this way we can maximize the amount of triangles we have on screen. The terrain itself has per-pixel lighting, with a normal map calculated from the BT file.

[ Gallery | Video]


UDP Network Game

Simple space shooter with UDP networking. The client updates to the server ten times per seconds, and the server simulates the game to make sure that the input is valid. The player fire rate is five shots per second, and they can wrap around the screen. Any amount of players may connect to the server as long as the username is unique, but they are dropped from the game when they are killed.

[ Video]


Cloth Simulation

Cloth simulation that uses verlet integration and constraint relaxation techniques. The cloth grid consists of mass-less points that are connected by line segments that function as constraints. Each frame physics is integrated using verlet, and five constraint relaxation passes are ran to ensure distances between points are correct.

[ Video]


Phong illuminated, Parallax cube

This project was my first exposure to shaders, both in open GL or Direct X. This cube is illuminated by the phong lighting model, it includes per pixel lighting, specular lighting, tangent space calculations, per pixel normals, and parallax displacement. It’s implemented in ARB for open GL, and HLSL 4.0 for Direct X 10.

[ Gallery | Video]


3D Studio Max Model Exporter

3D studio max (3ds) is one of the best modeling software’s that are out there. Many professional game studios use it, and it’s a great way to get content into my engine. This 3ds plugin exports models, including animations, bone information, skinning, and bone animation to a binary file format which I designed for my engine. Other features also include the exporting of material information, tangent space information, and texture data.
My engine then loads this binary file, and creates all necessary buffers and loads all the resources. Bone animation is done on the CPU by sending an array of matrices to the shader and using the bone weights to calculate final position in the vertex buffer.

[ Gallery | Video]


Particle System

This is a simple particle system that handles various effects such as fountain, fireworks, or debris. Effects are modular and work as functors that operate on a single particle. This makes changing the behavior of the particles simple, and effects can be swapped on the fly. The color of the particles are based on their position, and their model is also a parameter.

[ Gallery ]