This shot was created in Houdini 19.5 with Axiom solver. And the comp was done in Nuke.
I was responsible for all aspects except for modeling and texturing.
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
Before anything else, I spent a good amount of time to make sure my composition is interesting to look at. It's the foundation of creating a good FX shot.
First step to create a believable fire effect, is to create the emitters. I referenced some real life footages to create the emitters, and noised the density, temperature, velocity, and pscale fields.
For background emitters and collision, use a camera frustum volume to optimize you system resource. And don't forget to noise up all the fields as well.
The last step I did before the main simulation is simulating a low-res smoke to act as a noised-up wind field. I could use a static volume with vel field driven by animated noise, too, but axiom is fast enough to iterate so I went for a real simulation in this case.
Fire Simulation
Then it was the time to bring in all the elements prepared above for fire simulation.
There are several keys to create the crispy details.
-
higher timescale (all time dependent micro-settings need to be adjust accordingly, such as disturbance, turbulence)
-
more substeps
-
fire intensity ramp in the shader
Smoke Simulation
I've updated the sim setup, but I'm keeping my old method for the record. It certainly worked as well.
It's more art directable to separate the fire and the smoke. I was using the same emitter as the fire, just re-fit some values of density and velocity. And then I brought in the fire sim; used its vel field to advect smoke velocity.
Here's my updated set up for smoke simulation
- Resampled the fire VDB to a lower-res version. (voxel scale 3x)
- Adjusted the density, temperature, and vel for smoke.
- Simulate the smoke with pull velocity.
In Houdini, and every other 3D packages too, there are always multiple ways to achieve the same thing. At the end of the day, it just depends on what's more intuitive to the artist and what level of art detectability and procedure automation are needed in the pipeline.
Embers
Embers are just simple pop sim with timeblend and particletrail nodes at the end.
Rendering in Solaris
Before setting up rendering stage, I'll make sure the nodes are well organized.
It's simply beautiful that you can have another layer of organization and control on assets, materials, and lighting in Solaris.
To set up the stage, simply import the OUT null from SOP( or create a new SOP net inside the LOP net). And then just set up the material library and render setting override for specific assets; finally, merge everything and drop down your render engine nodes.
For this shot, enabling velocity blur for volumes makes quite a deference compared to default deforming blur.
Using collect node in material builder gives me flexibility when I'm using multiple render engines. It was Karma CPU and Karma XPU in this case. I've tried Redshfit for this project but I prefer Karma's volume shader more.
In houdini 20, the karma fire material for xpu engine is updated to be the same as cpu engine.
To illuminated the smoke with the fire, there are 2 ways to do it, 1st is to enalbe treat as light setting
2nd is more of a cheat for optimization.
I imported the fire simulation and used a volume vop to extract the part where temperature was high enough.
And then converted it to sdf so I could smooth it and erode it.
And then I converted it to mesh and assigned emissive surface material in Solaris; set the visibility to phantom. Now I have a relatively cheap way to illuminate the environment.
Lightmixer node is also a useful tool to control all the lights in the scene at the same time.
I rendered the embers separately so that I could have more control. I set other geometry to holdout and tested the speed and quality for karma xpu and redshift in houdini 20.. Redshift was way faster and quality wasn't that much different so that was what I used. Material setup was quite simple as below:
Since it's all emissive materials and other geometry was all holdout, I turned off global GI for possible faster performance.
Compositing
I used Houdini's built in denoiser and the results are quite incredible. Just needed to enable albedo and N passes in AOV setting.
But after denoising, the cryptomatte will break in nuke. the meta data will be lost as shown below in Nuke viewMetadata node.
It can still be shuffled out, but I don't know why it just won't work with cryptomatte node. So I had to use raw noisy render to extract cryptomatte for masking some of my grades.
I used Apglow from Adrian Pueyo to enhance my emission AOV. I also graded down most of the AOVs and then added a background.
And that's the shot.
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.