Spite (RPG)

SPITE

Game project 7 - RPG

Spite is an action RPG about a monk acolyte returning from a soul-searching pilgrimage to find their monastery and childhood home infested with demon imps.

During the Spite project, I worked a lot with Unity and Houdini. Firstly by creating a lot of level building tools that helped the team create terrain meshes, paint textures and blend between materials and place props and bridges.

Secondly, I was responsible for the asset pipeline going into Unity and out of it. This meant I had to create a lot of unity scripts in C# to handle the smooth setup and handling of version control software and file paths, importing of assets into Unity and automated creation of prefabs. On the export side, I handled the generation of the navmesh and updated the level exporter that had I had created for an earlier project. The most fun and challenging aspect of the export process was figuring out how to export all the assets created by the Houdini Engine plugin out of Unity and into our custom engine in a seamless way that left the assets fully interactable for the level designers. Fortunately, this worked out very well and Houdini became an essential part of the environment creation pipeline.

COLLAPSING BRIDGE

Finally, I was tasked with creating a small setpiece for the game in the form of a destruction event. For this, I decided to destroy one of the many rope bridges that were already placed in the game using the Houdini tools. This posed a fun challenge as it would involve both rigid bodies as well as soft bodies for the planks and ropes respectively.

I created the destruction setup in Houdini and exported the animation as two different vertex animations using textures. One mesh and texture setup for the ropes and one for the planks. I had previously managed to integrate rigid body animation through vertex animated textures in HLSL for our custom engine but since this project required soft bodies as well I had to port that shader as well. After I had got everything working one problem still remained. Since the animation was rather long it didn't fit enough frames in the texture to make it look smooth. I solved this by expanding the vertex shader so that It always sampled the current frames position as well as the next ones. I then calculated the time offset between frames and interpolated between the two positions.