Large Scale Fire with Phoenix FD


By Hammer Chen, Kristin Ivanova

In the previous post, we saw how to create a small-scale fire. In this article we are talking about large-scale fires. A large-scale fire can be a ground fire, a wooden house on fire, or maybe fire in an explosion. Let's explore how to create realistic large-scale fire with Phoenix FD.

Fire is very tricky to make in CG. In the previous article, we have introduced the VRayDistanceTex to alleviate artifacts at the fire root. That is, by using a VRayDistance texture to modulate the fire opacity. In this article, we are going to give more tips & tricks for creating convincing fire.

First of all, let's talk about how the fire is emitted. Take a ground fire for example, we can use a simple plane (with shell modifier on top) and vertex paint to mask the fluid source. To avoid getting one big chunk of fire, paint the vertex color with smaller areas. This way we can create a more natural form of the flame.

Secondly, Phoenix FD Turbulence has a great effect on the overall motion of fire. For example, below we compare the dynamics of a flame without Phoenix FD Turbulence and with Phoenix FD Turbulence. See how the flame looks dull without Turbulence.

Fire simulation without & with turbulence

The turbulence we are using here has the following parameters set: size is set to 10.0 m. Since the plane that emits the flame is 3x3 m, we can safely assume when setting up the Phoenix FD Turbulence, that the recommended size is approximately three times the size of the emitting source.

The outgoing velocity of the source is 6 m, and the Phoenix FD Turbulence in this case is 2 m, which is about one-third of the source's. These are some good reference values to set up Phoenix FD Turbulence. The Rate of Change is set to 2, so that the fire changes faster.

This is our source settings. Set the Emit Mode to Source Force and Smoke to 1.0. Enable the Fuel option with value of 1. Outgoing Velocity is set to 6.0m. Temperature is set to 2200.

Let's take a look at the Fuel section. 

First, the fire we create here is fuel-based. The advantage of a fuel-based fire is that we can control the ratio of smoke to fire through the parameters of the Fuel rollout. For example, we can increase the Smoke Threshold to 1.0, so that the smoke doesn't appear too early, and also decrease the Smoke Amount to 0.5, so that there isn't too much smoke. Note that the amount of fire to smoke ratio is also essential for a realistic flame.

Now let's look at the Dynamics settings. A slightly lower value for Gravity is needed to keep the fire from getting too high. Time Scale is set to 0.7  to make the fluid slightly slower, thus aesthetically pleasing. Cooling affects the length of the fire and allows for more color variation (this requires a proper Color Gradient in the Volumetric Shading, which we'll explain later). Smoke Buoyancy is set to 1.0  to separate the fire from the smoke. Randomize is used here to make the fluid simulation a bit more uneven and interesting. We set Conservation Method to PCG, unlike the Direct Smooth + Backtrace method used in the previous small-scale Fire tutorial. This combination is more suitable for large-scale fire simulations.

Next, let's take a look at the Volumetric shading. If we render with the default volumetric shading, as you can see, the details in the highlights are completely over-exposed and the smoke seems too thick.

To solve the problem of overexposure, we adjust the color gradient and curve. The vertical value of the curve is lower at high temperatures and higher at low temperatures, ensuring that the fire details are preserved. The range from low temperature to the highest goes from black to dark red, red and orange. The position of the gradient point in relation to the curve is very critical. Sometimes the point needs to be nudged for an optimal look. The smoothness of the curve and the distance between different colors on the gradient have profound influence on the final appearance of the fire. However, there is no ultimate correct curve/color gradient for fire, all depends on preferences and environments.

Now let's take a closer look to the right half of the curve, that is below zero. This segment contributes greatly to the detail of the fire (indicated by white arrows).

However, sometimes we don't need the details described above, we just want the image overexposed on purpose. For example, in this night scene of a burning car. We move this control point of the curve upward (it was below zero), and at the same time, we increase the Fire Multiplier to 20.0 to produce a convincing fire shading at night time.

Here is the same scene during daytime. Notice the point at the curve below zero. The Fire Multiplier is set to a lower value compared to the night time scene. The curve and the gradient are slightly different from the ground fire settings previously mentioned, so further tweak of the settings is possible depending on different scenarios.

The downside of using Vertex Paint as a mask for Fire/Smoke source: the fire is emitted from the same spot. Here we introduce another technique: using a procedural texture as a mask for the source. The Cellular texture will do the work  and we can animate its Z offset, so we get an animated mask. 

As shown in  the video above, the animated mask makes the fire emit from various places, producing more convincing fire in motion.

The image above is using the same fire settings plus some color correction in Photoshop. 
(3D Model by Lien Ying-Te)

1. To alleviate the artifact at the fire root, use VRayDistanceTex to modulate the fire opacity.
2. When painting vertex as a source mask, go for many small areas instead of one big chunk.
3. A Turbulence force is good for fire movement.
4. Adjust the fire curve and gradient to retain details in the hottest region.
5. Tailor volumetric settings for different lighting scenarios.
6. Use animated procedural texture as fire/smoke source.

The quickest way of learning is by playing around with the sample scenes. Here we provide few scene files for you to download. Enjoy :)