CSC Final Project - Zack Ragozzino

Echo is a simple game exploring the echolocation abilities of bats.


intro pic


The purpose of this project was to explore animated shader effects and AABB collisions in a realtime graphics environment.

In the game, the player must rely solely on their echolocation to see in the dark and find the 13 bugs hidden throughout a cave.


WASD - Movement

Left Mouse - Echolocation

The echo effect operates under a cooldown timer and if the player uses it too often the must wait for it to recharge


Collision detection using axis-alligned bounding boxes

An animated echolocation effect using custom vertex and fragment shaders

A first-person camera with 3D movement

Insect models with hierarchical animation for wing movement

A navigatable cave with hidden areas and 13 collectable bugs

Building the assets

map layout

The initial layout of the level using extruded planes in Maya

map lowpoly

The original low poly version of the stage before mesh deformers were applied

map highpoly

The model of the cave used in the actual game. Deformations were applied to the walls to make it feel more "cave-like"

Low poly and high poly versions of the props placed throughout the level

props lowpoly props highpoly

Lessons Learned

- Designing shader effects requires an abstract way of thinking. It's useful to use per-vertex normal directions and a time component to achieve dynamic movement.

- When using AABB for collisions, forethought must be put into building assets. Since colliders cannot be rotated, simpler geometry with vertical allignment is preferred.

- Since AABB are invisible when in-game, it's important to find a way to see them in early versions of your game. I placed cubes at the vertices of each box.

- The fastest way I found to place bounding boxes in a stage was to add keyboard controls for their movement and scaling. (Note: This can still be VERY time consuming)

- Experimentation is key. I achieved my echolocation effect by playing with the implicit circle equation in my fragment shader and modifying different values until I was happy with it.

- Get as many people as possible to play your game. This is the best way to ensure your level design and movement are satisfying and fun.


OpenGL AABB Collisions
Camera movement with key callback (this whole site is a great resource)
Fun facts about bats for kids