Zhaozhong Chen
Zhaozhong Chen

Swirl Explosion FX Breakdown

This shot was created in Houdini 19.5 with Axiom solver. The jet model was created in Maya and Substance Painter. And the comp was done in Nuke with a card background viewed from the 3D camera.

I was responsible for all aspects except for the background photo and the grass and rock models.

I will try to breakdown this shot in detail in this post. If you have any question, feel free to reach out, you can find my contact info in my profile.

*If you don't see the videos below playing, please check the autoplay settings on your browser.

Preparation

This effect was inspired by a scene from the movie We Were Soldiers. This swirly slow motion explosion is what I wanted to achieve.

First, I created a ground plane and the camera animation. After that I made a density ramp in Z direction that fade when getting further from the camera. And based on the density ramp, I scattered my grasses assets on the surface.

I also created a proxy model and scattered with a lower density. This would come in handy for viewport optimization when I went to Solaris and wanted to view all the elements at once.

The rock scatter wasn't that dense and was a noise pattern. The proxies were also prepared for latter uses.

The stage was set, but I still needed the actor. I used a jet model made by myself from before. It was built in Maya, and textured in Substance Painter.

textured in Substance, rendered with Redshift in Solaris
rendered with Redshift in Solaris

To animate it, I made a curve that went through the center of the bombing. And I used a carve node and animated the first U to match my explosions' timing.

I copied my aircraft model to the animated point. I also copied the point velocity attribute from the point to the jet rather than calculating the velocity of the jet post animation to save performance. And then I created my jet collision and collision vel based on that.

collision velocity trail

And then I moved on to prepare the explosion emitters. I drew some curves on the ground surface. I used the z direction to drive the startframe attribute, and then used it to control pyro burst sources' animation timing.

And then I picked the points on the sides and created trail sources, too.

The most important part of this effect was the influence field. It required a swirly velocity field and some sort of suction force to the center in order to create the the look.

I first modeled this taper spiral shape, and assigned the velocity direction to follow curve tangent.

I rasterized the density with relatively big pscale to create a pressure field, which acted as a suction force.

I used a bound of the curves to activate a vector VDB, and used pointcloud open and pointcloud filter to search for point velocity attributes. And I had a volume velocity field by doing this.

And I merged everything together, that's my influence, influence pressure, influence temperature, and influence vel. Everything was ready for simulation then.

Simulation

I wanted to have a slow motion feel to the effect like the reference. so I retime the emitters after rasterization. The volume blend mode was set to advected. But the influence field was hand animated to match the emitters.

In the solver, the only part I touched on sourcing was the way how influence vel was brought in.

changed it from time step to frame step

But there were a lot of settings that needed to be altered in simulation panel. I animated the timescale to match the speed retime from the emitters.

But when we were touching the timescale, all the settings that will affect the velocity of the simulation needed to be adjust accordingly, too. I multiplied all the settings to the reciprocal of the timescale.

Combustion burn, dissipation and cooling rate were set to frame step, which probably wasn't the most realistic interaction for a slow motion ramp effect, but I'm happy with the result.

That's now compare the result of

  1. the real time simulation with 4 sub-steps and retime speed afterwards

  2. simulation with animated timescale

quite a lot of artifacts especially when scatter field was enabled
very different look than the retime one

A lot of the time was spent adjusting the settings as probably every other project. After some grinding and trials and errors, it reached a point where I knew I have to move on.

Rendering

In this shot I had a lot of scattered assets and viewing them were quite slow even though they were packed. So in Solaris, I imported both render assets and proxy assets that I mentioned earlier.

And I used a configure primitive node to set their purpose for proxy and render respectively.

So when I was in Houdini GL viewport it would only display proxy models, but when I hit render, it would automatically switch to full-res assets.

For rendering explosion, I adjusted the scatter source range and masking settings so it had a sharper contrast between emission and volume density. And that matched the reference shot more in my opinion.

And as always I enabled velocity blur for volume render.

I went a little greedy in this render and turned on volume limit to 1. This increase my render time quite a lot but the look was also significantly different.

Compositing

I first denoised the render in Houdini before bringing them to Nuke. I added some glow to the emission passes, and added even more motion blur for the whole thing.

The only thing left was the background. I downloaded a high-res CC0 image of a mountain valley from Google. I then put that on a card in Nuke. I imported my camera fbx from Houdini scene, created a 3D scene in Nuke and scanline rendered the background out with some blur. I then graded a bit before merging it back with my render.

It only took a very tiny portion of the image real estate, but it contributed a lot to completing the sequence.

Final Result

Thanks for reading the breakdown blog. If you have any question or suggestion, please let me know. And if you find this helpful or interesting, please consider checking out my other breakdown, you can find them on my profile. Cheers.

Send Zhaozhong Chen a reply about this page
More from Zhaozhong Chen
Back to profile