Erwin Smeenge talked about how he made a destructible building in Houdini and Unreal Engine, discussed the workflow, and shared some useful tutorials for beginning VFX Artists.
Hello, my name is Erwin Smeenge, and I am currently studying International Game Architecture and Design at Breda University of Applied Sciences in the Netherlands.
I have been passionate about art and games since I was a kid. I always loved delving into the fantasy worlds and get completely lost in games lore while also be amazed at the art.
After I graduated high school, I started my first Game Art-related study at Deltion College in Zwolle. I became passionate about 3D art rather fast during this study. Learning 3D modeling, coding, texturing and working with an engine. During this study, I also did a one-year-long internship at Wolfdog Interactive where I worked as a 3D Generalist on the game Skyworld.
After graduating from Deltion I wanted to learn more and become better. This motivated me to apply to game architecture and design at Breda University of Applied Sciences (BUas) where I currently study.
Path to VFX
During my first year at BUas, I started getting a growing interest in more technical aspects of game art. Learning Houdini was a big part of this.
The moment I knew I wanted to become a VFX Artist was during my second year when I had a project that allowed me to focus full-time on researching VFX. In this block, I explored Niagara and Blueprints in Unreal. I discovered during this block I have a lot more fun solving technical problems with visual results, so I decided to set my focus on VFX. This also made me return to Houdini while setting up small projects/studies for myself and I was amazed by the possibilities. I especially enjoy working with RBD and Vellum.
Breda University of Applied Sciences
Currently, I am in the 3rd year of my study In this year we work in multidisciplinary teams on a game project for the entire year. I am part of the outsource team as a VFX artist. The outsource team is an option you can choose to provide multiple game teams with requested effects or offer solutions that could help improve their game project.
The overall structure of the week is divided into four project days and one workshop day where you get to attend, lectures and workshops. Or go to specialized learning communities (guilds).
Concept Destruction Rigs
I was working on some personal research and getting to know more of the possibilities of RBDs in Houdini when a sudden idea came up. This idea was a workflow to split an object into destructible clusters to then be reassembled back in Unreal Blueprints. With destruction being a big part of my focus this year I thought this was an interesting idea.
In the beginning, I already was convinced that my best option for this was the use of skeletal meshes because of the bone information I would get in Unreal. When Pairing destruction simulations with bones, I get a similar amount of control and interactions as for example a rigged character or other animated meshes. Once I started researching animation Blueprints, I saw the potential control I would get if I could integrate the destruction simulation with this.
For my first iteration, I set up a simplistic building generator to then fracture and divide into clusters, which I then simulate with the RBD bullet solver. Initially, I wanted to export the clusters separately each being their own unique asset to then be puzzled back together In Unreal Blueprints.
While this worked using the RBD to FBX node in Houdini it gave quite a mess in the engine with all the skeletal assets. It also did not give the amount of control I wanted and required me to do repetitive Blueprint actions to activate the clusters.
So back to Houdini I reworked the pre-RBD workflow. I discovered the Labs Building Generator SOP and made some meshes in Blender to set it up. With this new building, I needed to reconstruct the clustering and fracturing workflow as fracturing this building entirely was not optimal.
So, First I needed to determine and split the areas that I want to destroy. Instead of using Booleans, I ended up grouping the packed geometry. This worked for smaller modular objects right out of the box. However bigger surfaces needed an initial fracture to make the holes a bit more realistic. Then I split the cluster groups and cleanup the initial fracture using the fuse, Labs Dissolve Flat Edges SOP, and Clean SOP nodes.
The clusters then get fractured based on their material ID which each have their own fracture procedure. Before setting up constraints I add a ring around each cluster.
In the RBD simulation, the ring is set to inactive but does have glue constraints. This ring serves as a container for the clusters that keep the pieces in place before the impact collision objects hit, while also creating a fitting puzzle piece to merge back to the static building.
The rest of the RBD simulation itself involved mainly tweaking constraint and force values.
With this new simulation ready, I researched converting this to a Rig. But before that, I needed to clean up the simulation a bit as each packed piece is equal to a bone. To do this I used the Labs Destruction Cleanup SOP. This SOP identifies and combines pieces that can be treated as one in the simulation.
Because the rings around the pieces are set on inactive, they would get merged into one piece. This allows me to easily split it from the simulation and merge it back to the main building. Together with the glue clusters, this reduced the bone count drastically.
After cleanup, the RBD is ready to go into the Rig creation process. In this process, the rest geometry, a capture rig, and an animated rig are created.
these parent bones then get connected to a ‘pelvis’ which is the center of the entire static object. This bone also has all the static meshes skinned to it. Then finally I connect this pelvis bone to the root.
Using the intrinsic data of the packed geometry was helpful in this process to keep the transforms correct for the rig.
In this workflow, two aspects are most important: The name attribute and the polylines created between the bones. These two aspects control the hierarchy and the bone names of the rig. After setting up the skeleton I use Rig Doctor SOP and Capture Packed Geo SOP which is part of the new KineFX toolset to set up the rig.
Importing in Unreal works the same as any other skeletal mesh. To test out the animation I could simply add the animation asset to the skeletal mesh in the scene.
To split the simulation, I use Animation Blueprints. In this Blueprint, I blend multiple state machines where each state machine resembles a cluster. Within this State Machine, there is a transition rule that checks an array of names is equal to the cluster parent bone. If this rule is met the animation of that cluster can play.
The control Blueprint serves as a data transmitter. It stores the valid cluster bones in an array and from there out can access these bones.
In the construction Blueprint, I use these bone locations and some vector math to create procedural splines towards the clusters. these splines are used to create a path for the rockets. This was extremely helpful when iterating upon the simulation because I did not have to replace the splines manually for each iteration.
I think setting up this communication pipeline was the most difficult challenge of this workflow. And it took multiple iterations to get this working smoothly.
Currently, I am exploring multiple ways to apply the method I worked on. I came up with a prototype that shows that destroying building clusters is not the only thing you can do with this workflow.
The overall destruction simulations in both the building clusters and this workflow are prebaked but they can be partially manipulated within the engine, like inverting it or changing its speed. where this current workflow shines the most is the control on when and what part of the simulation should play.
I still want to explore and test out multiple scenarios. For example, adding animation stages, creating the splines during game events, or combine it with the animation with Physics Assets in Unreal.
I want to thank 80 Level for the opportunity to showcase and share my work. This project has been a very good learning experience for me, and I still want to continue working on it to expand and check its limits. Furthermore, for future projects, I want to continue exploring the different Houdini dynamic solvers as well as extend my Blueprint knowledge in Unreal.
For anyone new to Houdini dynamics or Houdini in general I would recommend starting simple and expand from there. Exploring YouTube channels like Bubble Pins, Simon Houdini, and Entagma helped me out greatly to learn and understand Houdini.
You may find these articles interesting