Background
This short game was the final project for one of my Fall 2022 classes, Extended Reality Technology. My partner Nathan Boisvert and I were inspired by Iron Man VR and we decided to make a similar game where the player takes the role of the Norse god Thor.
Roles
My role involved creating the landscape and the destructible elements. All of this work was done using Houdini, Unity and C#.
Nathan handled all the hammer and player movement/attack systems, as well as an enemy wave system that did not make the final cut of the game.
About
Within the game the player is able to control their movement using their hammer, Mjolnir. They can throw their hammer and have it return to them, summon the power of lightning to cast down on Earth, or use point the hammer in the direction they’d like to fly.
The environment is filled with destructible meshes that explode based on the direction they are hit from (front, back, left, right). Meshes were found on the Unity Marketplace, and the system was created using a combination of Houdini, Unity’s animation system, and C#.
Destruction (Houdini)
Destruction was handled using a custom Houdini HDA. The logic of the tool goes as follows:
1. ) Users would input a mesh
2. ) Mesh would be shattered using a Voronoi Fracture
3. ) A directional hit would be simulated from four different angles
4. ) From the output you would have a fractured mesh with four animations
The time it took to complete these simulations would vary by mesh complexity. The mesh in the video was around 3500 triangles, and took less than a minute between input and output.
Destruction (Unity)
Directional hits where assigned by using collision boxes as animation triggers. Each mesh had four collision boxes, corresponding with each hit direction. When the hammer collided with a box, it would trigger the corresponding animation. This was done using a combination of Unity’s animation system and C#.
Performance
Performance was on the front of our minds when developing for VR. To maximize the amount of destructible objects within the scene, and to allow for the seamless destruction, we had to use some interesting approaches.
In the final version of the game, two meshes were loaded in for each object. The original mesh and the shattered one. When hit the mesh renderer for the shattered mesh was toggled on, and the original mesh’s was toggled off.
Although this approach did increase load time, it meant that there was no delay between switching between meshes when they were hit.
After meshes were destroyed a five second timer began. After this timer ended the meshes would sink through the ground, where they would then be culled from the game.
Through the combination of these approaches we were able to mimic directional destruction with a large amount of in-game objects, all while maintaining a steady frame rate for the VR headset!