top of page

Department of Astromaterial Acquisition

School - Sep 2019 – Jun 2020

Department of Astromaterial Acquisition (DAA) is a 3d voxel sandbox exploration game.

​

DAA was built using Unity by a team of programmers. My work on the team included:

  • Implemented Inverse Kinematics and procedurally animated enemies using it.

  • Developed behavioral tree for enemy AI.

  • Designed interactions and combat sequences with enemies.

  • Built soundscape using Wwise.

Procedural Animation

I achieved procedural animation by utilizing FABRIK (forward and backward reaching inverse kinematics) to calculate IK (inverse kinematics) to move objects around.
​
FABRIK worked by positioning the last node as close as possible to the goal point, then moving the next node back as close as it could until all nodes have been moved. Then the starting node is moved back to the starting point, and then the next node is pulled back until all nodes have been pulled back. Then this process repeats till either the end node is within a set delta of the target point or a set amount of iterations have passed.
​
On top of using FABRIK for IK, I had two points for each IK object. One point was the target location, and the other was a pole. The target point could be moved around, and the last node in the IK object would attempt to follow the target around. The pole point acts as where the bends should go in a 3d space. It can be thought of as pulling the IK object towards itself as much as possible without moving the last node off of the target point.

inverse kinematics.gif
Spider Tree.png

Behavioral Tree

I made a custom behavior tree framework to control all the enemies in the game. The primary control flow nodes I used for this project are Selectos, Sequencers, Random Selectors, Random Sequencers, and Parallel. More control flow nodes could be easily added, along with leaf nodes to control the enemies.
​
The behavior tree would exist in a file with all the control flow and leaf nodes. Then when the game would start, and the behavior tree would live in memory. Then anytime an object needs a behavior tree, it could be copied to the object for its use.
​
Behavior trees could also use a private whiteboard, where any data could be stored, to communicate with other leaf nodes. There was also a public whiteboard for all the behavior trees to communicate with each other.

Enemys

The behavioral tree and procedural animation come together to create the enemies. The behavioral tree would control the enemy, and the procedural animation system would respond to animate the enemy.

For example, when the spider would walk, the behaviors would move the main body of the spider in a direction, then the procedural animation system would move the legs as it sees fit to match how the main body is moving, as seen in the gif.

Attacks worked similarly, too, where the behaviors would position the enemy and signal the procedural animation system to attack.

Audio

I made all the sound effects for DAA using primary Reaper as my daw. In Reaper, I would adjust the sounds to be more game-friendly, like taking out the high mids to reducing listing fatigue. I also would change the dynamics of the sounds by adding compression, reverb, equalization, layer, and other such techniques.

​

All audio was then implemented into the game using Wwise as the middleware. In Wwise I used features like random pitch that also help reduce listing fatigue. Game parameters were also used to control noises like falling at rapid speeds, and walking sound effects (as the character had no actual feet animated). A state machine was used to control the music, switching from combat to peaceful and boss.

​

Another state machine was used to control the reverb on everything. The game had 3 big cave layers plus a surface layer. As the player progressed deeper into the planet the amount of dynamic reverberation would progressively increase to make each cave sound deeper and bigger within the planet.

​

​

​

bottom of page