Dealing destruction, explaining the process behind destroying buildings from Houdini to UE4
Hi Everyone, I’m Richard, a baby real-time VFX artist. I’ve been building effects for game engines for about 5 months now. I’ve got a good grasp of all the fundamentals but found that I’m at a point now where I need to step up my game. That is why I’m starting this blog. From now until I inevitably forget this exits and stop updating it, I’m going to be delving into various effects I think are cool and deconstructing them.
2 years ago I was in my final year of university planning out what I was going to do for my final year project. I wanted to make some characters. I had the idea of doing a freeze frame of the 3 musketeers clinking beer steins together, and if I had time, with a bar brawl erupting in the background. However, I got scared away and retreated into my comfort zone of modelling buildings and environments. Instead of my musketeers, I made what was supposed to be a super realistic street from the 1920s, this was where I learnt that it doesn’t matter how comfortable with a subject you are, if you’re not passionate about something you’re not going to do a good job on it. Through a combination of poor planning and an ever-increasing scope, the project turned into a bloated ugly shell of what it was supposed to be. I’ve seen a lot of artists go back to pieces of work they did a long time ago and redo it. Improve it even. I’m not an environment artist, I didn’t continue to develop that skillset after university, so I can’t go back and turn it into the photorealistic beauty it was meant to be. What I can do, however, is give it a “memorable retirement”. In this blog, I’m going to take one of the buildings and use Houdini to simulate it getting hit by an air strike and being decimated. I’m then going to put that simulation in UE4. This blog is mainly about Houdini so the steps here should work with any other game engine.
Here’s what I’m covering:
1. R&D Wrecking Roberto
2. R&D Pulverizing Pillars
3. R&D Wasting Windows
4. Preparing the Model and Fracturing
5. Simulating an Airstrike
1. R&D Wrecking Roberto
Before I do anything, I need to learn how to actually destroy things. I’m using Houdini to drive the main simulation and will then move on to putting it in engine. My first experiment was to destroy Roberto the rubber toy pre-set.
I experimented with 2 methods of fracturing it. One using copied planes with a mountain modifier and slice Booleans, and one using Voronoi fracture with a density attribute. The Booleans didn’t work out as well as I wanted them too, so I’m going to focus on the Voronoi fracture.
To get this graph I dropped a geo node into the object graph. Inside the geo, I spawned a rubber toy node. I used an RBD(Rigid Body) paint node to paint on my density attribute.
The usual way to break something is to scatter points over the surface and plug that into the Voronoi fracture node. The VFracture node generates an even fracture throughout the model. By painting in that density attribute, I can make the scatter node put more points in certain areas. If you look at the above two images you can see, there are more points around the head area where the red is. When this gets put into our fracture node it will make more splits in the head area and fewer splits along the body.
To finish the simulation, I used the fractured RBD shelf tool to make it a rigid body object, popped in a ground plane and simulated it. This led to the pieces collapsing into a pile of rubble. After assigning a material to the interior group that the Voronoi node creates, I used the RBD to FBX ROP (Render Operator) node in the output graph to render out something I can put into the engine. Keep in mind when doing this, if you don’t assign a material to the interior the engine will crash when you import it.
When it gets put into UE4 it will make 4 content items. The skeletal graph (This is where you would put sockets for particle effects), the physics object that deals with collisions, the mesh (this is where you assign materials and what you would use in blueprints) and the animation (this is your damage simulation).
2. R&D Pulverising a pillar
In Houdini 17, SideFX released a new node called the RBD Material fracture node. I wanted to see if I could use that to make more realistic fractures by specifying the materials of what I’m breaking. To test it out I made a 1,3,1 cube and connected it to the material fracture node. I had the node set to concrete and after messing with the settings for a while I got a fracture that I was looking for.
The pieces for this have a much more interesting shape than the Voronoi fracture and that’s down to some of the settings in the node that lets me control the noise of the lines. I like my concrete to be a little jagged. The material fracture node makes the object with glue constraints already set up so when I’m turning it into a rigid body object, I need to use the RBD glued tool rather than the RBD fractured tool I used for Roberto. I used a sphere with a velocity to ram into the pillar to break it and rendered out the simulation with the RBD to FBX node.
I quite like the material fracture, I think it gives the destruction a nice shape and I’m very happy with how easy it is to set up. Or so I thought.
3. R&D Wrecking a Window
Now I had a pipeline to destroy something and get it in engine, my next step was to use a model from the environment. I got a window mesh from my old files and dropped it into Houdini with a material fracture. The problem was that the mesh was built how you would build a mesh in the environment. Which meant that all unnecessary polygons were deleted. If the viewer wouldn’t see something it got deleted. My mesh looked like this from behind.
So when I dropped the RBD material node on top it looked like this:
This monstrosity is what happens when a program tries to guess where to put geometry. Not only does this mean that we can be safe from being replaced by robots for the foreseeable future, but it means we need to spend some time processing the mesh for Houdini. In 3DS Max I separated the glass planes from the frame and extruded them into mini cuboids. I filled in the back of the frame and I added the header and footer meshes from the environment. Just to make the window look better.
I also made sure to reset the Xforms on each piece as that was causing Houdini to crash a lot. I split them into 3 separate meshes and used 3 separate material fracture nodes. My original intention was to use the concrete setting on the header and footer, the glass setting on the glass and, the wood setting on the frame.
However, the wood setting didn’t work on my window frame. I think it’s because the wood setting is meant to work on smaller pieces that look more like planks than full structures, so I had to settle with a concrete that had a lot of splits in it. In the end the final fracture looked like this:
With that setup, I used the RBD glued tool to turn it into a rigid body and let the simulation go.
Which looks goddamn beautiful, and great if we were getting hit by an earthquake, but we’re simulating a war zone, this won’t work for us. What I want is to simulate a grenade being thrown into the window and exploding. To set that up I used a small sphere animated to go into the window and then a larger sphere animated to go into the window and smash it. However, while the material fracture makes a glue constraint for itself, it stops the simulation taking glue constraints from anywhere else. Which means when I use the glue adjacent tool to glue the window to the ground plane, like I would with a Voronoi fracture simulation the dop network doesn’t recognise it and only goes with the network made from the fracture node. That leads to some interesting results when the sphere hits the window.
I tried using an attribute wrangle to stop this, but it didn’t actually work for me. What did work was taking out the fracture glue network from the dop network.
What happened was that both of the glue constraints made a glue network. The one labelled glue_geo1 came from the RBD fracture node, glue_groundplane1 came from when I tried to glue the ground plane in manually. When I removed the nodes for geo1 it started to work how I’d expect.
Once I tweaked the simulation to get it where I wanted it, I imported it into UE4 using the methods I talked about previously. I also found out that this process keeps any previous material groups your mesh had before it got imported into Houdini which I was extremely happy to see. My final result looked like this:
So what did we actually learn from all this?
Reset the xforms and make sure the models aren’t hollow and have some thickness
When using the RBD material fracture node disable the glue nodes it puts in the dop network and make your own with the glue adjacent tool
Only use the wood material on plank shaped objects
Use an RBD paint node to specify where you want more splits on a model
Those lessons are going to help a lot when we take down a whole building.
4. Preparing the Model and Fracturing
When building the stores, I used a very modular heavy workflow. This means that rather than fixing an entire store I had to fix up 6 or 7 smaller meshes which although that seems like a lot is actually very straightforward and much easier than fixing a whole building.
Overall there were 11 meshes. Most of which just required extruding the border and capping. I didn’t worry too much about the interior UVs as they won’t be very visible.
When I finished configuring my modular pieces, I put them all together and exported an FBX for Houdini. I made sure to sort out my material groups for the engine while I was in Max just to make things easier later on. Pink is glass, grey is wood, red is concrete, blue is roof tiles, and green is brickwork. When I got the model into Houdini I decided to use the Voronoi fracture method to fracture my building. Mainly to keep things simple.
As I mentioned earlier this is set in an English town getting caught in the middle of the blitz and getting hit by airstrikes. Now there aren’t many close up videos of buildings getting hit by air strikes out there, and when you search for WW2 airstrike footage on YouTube it loves to recommend videos of a beautiful Swedish man telling me Hitler did nothing wrong and I’m beta cuck boy. So, I’m having to take some creative liberties. When you read through accounts of people who lived through the blitz, they would often say how not all bombs exploded and how live bombs were buried in the rubble. This implies to me that bombs don’t explode straight away, they would penetrate building first, and then explode. At least that’s my thought process for this.
In the RBD paint node, I painted a patch on the roof. That is going to be where the bomb penetrates the roof. I’ve also painted a strip around the top of the bottom floor. That’s going to reflect where the bomb explodes. I’ve also painted on a higher density on all the windows to show that they are a more fragile material.
I finished it off by using the RBD tool from the shelf and the glue adjacent tool to hold it together.
5. Simulating the airstrike
I’ve found there are two ways you can simulate explosions in Houdini. Use a force of some kind. (One video I saw used a magnetic force.) Or ram an object into it and let gravity take care of the rest. Force-based explosions wouldn’t work here because I use the glue adjacent modifier to keep everything together and forces aren’t strong enough to break the glue. instead, I'm ramming some objects into it. I started out by experimenting with a large sphere crashing into the roof.
It gave me a good idea of where I’m going but it wasn’t what I wanted. My next experiment was to use a smaller capsule to drop into the roof and 3 spheres on the second floor to smash out the window slightly after. This implies the bomb being dropped into the roof and then exploding halfway through the building.
This simulation is taking place in a very densely packed street too so I want to make sure that the rubble doesn’t go off in random directions, so I put in two giant rectangles to act as blockers. They are the buildings on either side of the store.
Once I had my simulation ready, I added a material group for the inside of the parts and used the RBD to FBX rop to export the building. Luckily, it’s not that big of a model so it shouldn’t take too long export.
That 7 is hours not minutes. This was taken halfway through the export, the whole thing took just under 14 hours, the FBX file was just under 1GB and had around 14,000 bones. This is why it’s important to set up material groups before importing into Houdini. Once it was in the engine, I hooked it up to a blueprint that destroys the building from a mouse click and this is my final result.
When it’s been put into the level it looks like this:
To finish the effect off I would need to add dust clouds raining down and fire exploding through the windows. However, that will have to wait for another day.
Overall, this was a very therapeutic project to take on and something I’m very glad I got the chance to revisit. I figured demonstrating destruction in Houdini was an important thing to cover as it’s one of those subjects that has a lot of information scattered in many different places. I’ve tried to collate as much of it here as I could and hopefully, I was successful in that endeavour. I’m going to be revisiting this in the future one last time to put in all the particle effects that destruction of this scale deserves.
Hopefully, whether you are brand new Real Time VFX artist, or you’ve been doing it for several years there was something here that helped you out. If you do find any creative uses for the things, I’ve talked about here please email me a gif at – RichardVFXfanmail@gmail.com or tweet me @stokes_richard. I’d love to see what you can create.
I’m going to wrap up for the year here and will be returning in a couple months with some show stopper pieces. I’ll be posting a wrap-up blog soon that will have a showcase of the effects from the last few blogs as well as some statistics from the last few blogs, where the best traffic comes from, that sort of thing. I would like to sincerely thank everyone who takes time out of their day to read these. They are an absolute joy to make and I sincerely hope they are a joy to read as well. Happy holidays everyone, I’ll see you in 2019.