Shadow Mapping:

     Our engine implements a shadow mapping algorithm that supports static as well as dynamic objects. In this algorithm we generate a depth map based on the light's perspective of the entire world. Then in our shader pipeline the geometry is transformed into the light's projection coordinates where we can compare the distance from a texel to the light to a value stored in the depth map. This allows us to tell if a given texel is shadowed or not, and color it accordingly.

Rendering Pipeline:

     Our rendering pipeline uses a combination of frame buffer objects and shaders, coded in GLSL, to accomplish the toon shading as well as edge detection. Toon shading is accomplished by clamping the diffuse lighting component of a texture to a limited range of values that the shader accesses as a 1-D array based on the angle between the surface normal and the direction to the light. Edge detection is accomplished by finding discontinuities within the depth map and the normal map of the scene.

Art Pipeline:

     Our art pipeline is based on the 3-D modeling program Maya, which we use to create the assets used in our game. The level file is exported from Maya using a custom plugin developed by our team. The assets are saved as an XML encoded file that is then imported into our engine as geometry, item locations, bone data, skinning data, and texture coordinates.

Smooth Skinning:

     Our engine takes advantage of the smooth skinning data imported from Maya, this allows us to have multiple bones affect a vertex's deformation over the course of an animation. Our animation clip data is also imported from Maya and managed by the game engine in order to be played back at appropriate times.

Physics Simlulation:

     In our engine architecture there is a dedicated Physics Engine that handles all the physics simulations related, but not limited to, the player. This includes external forces (e.g. gravity), as well as the player input forces that determine movement within the game. In addition to force, velcocity, and position calculations, the physics engine handles collision detection. Axis aligned bounding boxes are used for hit detection between the player and the other game objects (e.g. Orbs, moving platforms, and jump pads). Terrain hit detection uses repurposed ray tracing code; we eminate five rays out from the player model's center (four cardinal directions as well as downwards). These rays each individually hit detect with the level geometry using a BSP tree to cull out unnecessary polygons.

Particle Simulation:

     Our particle simulation is used in a variety of ways. This includes but is not limited to, orbs, clouds, and the dust created by forceful interaction between the player and ground.

Sound:

     We leveraged the FMOD sound engine in order to implement sounds in our engine.