Echo is a simple game exploring the echolocation abilities of bats.
IntroductionThe 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.
Controls
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
Features
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
The initial layout of the level using extruded planes in Maya
The original low poly version of the stage before mesh deformers were applied
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
- 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.