email: tom @ mira.nu

Team Portfolio

resume

home

 
Real-Time Physically-Based Dynamic Sound

Term 5 Focus Study

This focus study will explore the potential to generate sound effects based on the physical properties of an object.

These sounds will be based on the oscillations of a soft-body after a world collision

A soft-body will be simulated with a system of interconnected vertices with spring-mass damper systems.

Eventually, the soft body will be simulated as a solid mesh with internal forces using tetrahedral mesh generation.

Currently in Progress and slated to be finished in June 2006


Download Technical Design Document

 
Virtual Acoustics

Term 3+4 Focus Study

My Focus study during these terms is in the field of Virtual Acoustics. To demo this research, I am implementing an accoustics renderer in the Quake II game.

First and N-th sound reflections, pictured to the right.
green - first order rays
red - occluded first order rays
blue - n-th order rays

If a first order ray is occluded from the player, then it is reflected against the BSP geometry until either it is visible, or a defined distance is reached.

Real-time per-texture EQ dampening

Distance Related Delay processing.

Delay is calculated by distance the sound travels through reflections,
and EQ curves are determined by the textures the sound rays bounce off of.

click here for more images

click here to download a demo video
(18 MB WMV)

click here to download a lower quality demo video
(6 MB WMV)

 
Level of Detail Terrain Rendering

 

A 1 million vertex terrain grid is split up into 1024 mini-grids

Each grid is rendered with a level of detail based on its distance from the viewer and the amount of detail in the grid. (Distance-based and Detail-based)

To avoid defects due to detail levels, stitching is done to fit triangles from two different detail levels together.

Smoothing is done to ensure there are no conflicts between detail and distance-based calculations


click here for more images

 
Quake BSP Loader

 

A quake BSP loader was integrated into my framework.

Translation of BSP geometry to vertex-index mesh

Raw texture and lightmap loading

BSP tree traversal for VIS for PVS and ray casting

Frustum culling against leaf node volumes


click here for more images

 
A* path-finding

 

The terrain grid from the Level-of-Detail assignment was used to test and visualize an A* implementation.

The height value of the terrain is used as the weight for a path. Water is flagged as impassable.

In this picture, the colored grids mean:

red - "closed" path

green - "open" path

blue - chosen path


click here for more images

 
TOMscript - custom scripting language

 

A custom integratable or stand-alone script language.

Language was designed ground the up, starting from a BNF grammer definition

For this I implemented everything from scratch:

  • Lexical Analyser
  • Parser
  • Code Generator
  • Run-time Interpreter


click here for an example script

 
Rigid Body Simulation

 

A single rigid body is simulated on a spring tether.

A gravity force is applied to give the simulation "yo-yo-like" qualities.

The attachment point on the cube is adjustable.

This demonstration was an assignment to learn how to apply torque forces to a rigid body, and integrate the orientation to simulate rotation.

 

 


 

 
Spring-Mass Damper Systems

 

A series of spring-mass damper system is applied to four particles to hold them in a cube configuration.

This simulates rigid-body motion, and also demonstrates simple soft-body physics

The cube can collide with walls and other particles as well as have the spring constants modified to demonstrate the properties of the spring system.


click here for more images

 
Character Animation and 3DStudio MAX Exporters

 

This asignment was in two parts. First, we learned the 3DStudio MAX API to export a mesh and character animation out to a file format of our own design. We then wrote an importer for our own engine framework to read in and display the animation.

The assignment was our first heavy-duty exposure to the usefulness of Quaternions. We also used a vertex shader to compute the slerp-ed vertex positions. We did this in both API's: GL and DX.

The art was provided by Guildhall students.

click here for more images

 
Bump/Normal Mapping

 

This assignment was to teach us the concept of bump/normal mapping and concepts of using the Fixed Function Pipeline to combine textures and use the texture channels to achieve special effects. These concepts were then carried over into teaching us shaders.

This scene is a few simple objects, and a few not simple objects with normal maps applied and rendered with a shader...in both API's; GL and DX. We used HLSL and the GL assembly language to program these effects.

 

click here for more images

   
Hermite Spline Reparameterization

 

Over the course of a few weeks of class, we explored the world of Numerical Methods and their usage to solve implicit and otherwise difficult problems.

This demo is the result of that exploration. Pictured here is my old terrain map from previous assignments, along with two splines that weave and undulate throughout it. The camera follows the red spline, and stays fixed on the red ball, which travels on the blue spline.

The splines are calculated at startup, and reparameterized so that the points along the spline have an even distribution, so that the objects do not slow down along the sharp curves.

Reparameterization is a process that involves computing the arc length of a spline segment using numerical integration, and then finding the root of the equation determined by the desired distance between points on the curve.

click here for more images

 
Scenegraph with View Frustum Culling

 

The concept of a hierarchial scenegraph was introduced. Cube entities are inserted into the scenegraph and made to rotate around each other, demonstrating the benefits of a hierarchial system.

Each level of the hierarchy is given a bounding volume that contains all child elements of the level. These bounding volumes (represented by the wireframe spheres) are used to perform collision checks against the view frustum to determine drawability. If the object is outside the frustum, it is not drawn. This again demonstrates the usefulness of a hierarchial system in draw optimizations.

click here for more images

   
Height Map and Billboards

 

A height map is read in as a raw binary file of height information and is applied to a textured grid to create terrain. The terrain detail is further enhanced by using multi-textures in the Fixed Function Pipeline.

Trees are generated at random points on the grid and rendered as oriented and textured quads with alpha for transparency.

   
3DS file loader

 

This assignment taught us how to read a 3D model in from a file and render it correctly.

This is a gun from my Team Project, Blood Ritual.

The art was done by Keven Penrod, another student at the Guildhall.

 
Agent: Automaton

Term 1 2D Software Game Project

In the first term here at the Guildhall, the first major project is to create a tile-based 2D scrolling game. From scratch. It was the first complete game I have ever written, and I think it turned out pretty cool!

In this game, you play a robot, who needs to find his way to the boss on the level, and take him out. There are multilple weapons to get, and other robots to shoot. This game was inspired by Robotron 2084, so you may notice some similarities, like the independant movement and firing controls.

Download it here

 

click here for more images

 
Pinball on Titan

 

Our final exam was to create a pinball game using our Dynamic Particle simulator.

Very simple and ugly, I added the image of the landscape of Saturn's moon Titan...cause I'm a geek.

 

 

   
Dynamic Particle Simulation

 

This assignment was to simulate particles in a system with different variables.

The variables are: mass, material, gravity, air resistance, friction and a force field.

Different methods of numerical integration are also demonstrated, Euler, Velocity Verlet and 4th order Runge-Kutta.

This is kind of fun to play with. Download it here

Keys:
Ins/Del - adjust size of particle
PgUp/PgDown - adjust numerical integrator
Home/End - change material
F1,F2,F3,F4 - toggle forces
Click and drag the mouse as a slingshot

 

   
Agent: Automaton Level Editor

 

An assignment in software dev class was to create a level editor for our game project.

This was done in C# as a personal excercise. This editor proved invaluable in creating the game.

 

 

   
Dynamic Collisions

 

This assignment was written on the spot in class, using our existing collision-detection functions. The collisions are dynamic in that they are evaluated using the Minkowski Sum, in Configuration Space. This is a precursor to the Dynamic Particle assignment, and the collisions do not behave realistically since mass is not figured into the equation.

 

 

   
Bilinear Filtering

 

In addition to all of our other image processing functions, we were to also implement Bilinear Filtering. This function was used in Agent: Automaton to resize the parallax layers dynamically on load.

 

 

   
WMD Sweeper

 

Our first assignment in software development, meant as a crash course in Win32 programming, was to re-create Mine Sweeper, verbatim. The art concept credit goes to: David Vargo.

Download it here