In this seventh tutorial of the series on fire and smoke with the Fluid simulator in Blender 4.5, we’ll see how to use Voxel Attributes, described in the previous tutorial, to modify fire and smoke materials for rendering.
This tutorial is part of a 10-episode mini-series on the basics of Fire and Smoke in Blender 4.5. For the complete list of episodes, click here.
Video Transcript
Hello everyone! In this seventh tutorial of the series on fire and smoke with the Fluid simulator in Blender 4.5, we’ll see how to use Voxel Attributes, described in the previous tutorial, to modify fire and smoke materials for rendering.
In the scene I’m using for the first example in this episode, the fire emission comes from a Vertex Group of the object with the Fluid component set to Inflow Fire. The Domain of the simulation encloses only the upper part of the burner, since that’s where the flame develops.
Speaking of emission from a Vertex Group, if the emitted flames are not visible, the issue may be related to the Domain resolution. With resolutions that are too low, and therefore Voxels that are too large, the Voxels containing the emitting vertices might be considered empty and fail to emit flames. So try increasing the Domain resolution.

With the default settings, the initial flame will be very low, even invisible from a side view, but by now we know several ways to adjust its appearance. For example, we can act on the initial velocity of the Inflow object to give the flames an upward push, or on the Domain’s reaction speed to make the flames taller. Regarding the type of flames produced by this burner, they can vary in both turbulence and color. To obtain a fourth-type flame, with almost no turbulence, I lower the Vorticity value in the Domain’s Fire section to 0.
As a last change before moving on to defining the Material, I’m adding more vertices to the emission Vertex Group and limiting the Timeline animation to the last 100 frames of the simulation, that is, when the flame is already well developed and stable.
OK, let’s move on to defining the Material! I’m setting the 3D side view directly to Rendered mode with the World background Strength set to 0, so at first the preview will be black. In an Image editor on the left I’ve placed a reference image, while in the center I have the Material editor with the Domain, which has a Principled Volume node.
As we know from previous tutorials, increasing Emission Strength and assigning a uniform color to the Emission Color field gives us a very disappointing result. We’ve seen how to use Blackbody, but now it’s really time to learn how to use the Emission mode.

From the previous episode, we know that the fluid simulator stores information for each Voxel. These data can be retrieved using Attribute nodes, by typing the attribute names in the appropriate field. However, volumetric materials have a dedicated node called Volume Info, which provides these attributes as output sockets.
By connecting the Flame output or the Temperature output to the Emission Strength input, the appearance of the flame changes dramatically! The Flame output provides better interpolated values compared to the Temperature output, which also makes the Domain resolution more evident.
For this reason, I’ll use Flame.
The Flame and Temperature outputs can also be used for Emission Color, especially if we place a Color Ramp node in between. This way, we can change the flame’s color at different points based on the information contained in the Domain Voxels.

I’m using the Flame information for the Color Ramp and therefore for the Material’s Emission Color parameter. At this point, the task is to define the color and transparency levels of the Color Ramp’s stops. For this, you can use Blender’s Color Picker to sample colors directly from the reference image.
Keep in mind that the colors of the various stops can also include transparency levels, which are very useful for the outer parts of the flame, where you often see a semi-transparent region before the boundary, which is more opaque.
You’ll also need to carefully choose the interpolation between the Color Stops.
Among these options, the most extreme is Constant, which switches abruptly from one Color Stop to another. It isn’t very realistic but can be used for more artistic representations.
If this tutorial on Materials seems short, it’s only because we’re building on the information and parameters we studied in the previous tutorials.
At this point, we already know enough to start defining different flame shapes through the Fluid parameters of both Domain and Flow objects, and their visual appearance using Blackbody or Emission, with the various nodes provided by Blender.

Don’t limit yourself to the setup I just showed you. Experiment with other Material nodes as well. For example, you can add a Math node set to Multiply or Power to modify the Emission Strength, altering the information coming from Flame. Moreover, the parameters of these nodes can have keyframes, so you can animate the flame’s intensity through these nodes by changing the Material, without having to adjust the Fluid component fields of the simulation.
Before wrapping up this tutorial, let me show you how I created three Inflow objects with three different colors inside the same Domain. The result isn’t perfect, but I’ll use it as an opportunity to demonstrate another use case for nodes. In particular, the Color Ramp.
As we know, the Material must be defined at the Domain level, because it is generated from the Domain’s Voxels. This means we can’t assign different Blackbody nodes to the Inflow objects inside it.
However, one of the fields of the Inflow objects is Smoke Color, defined in the Inflow panel.
This color can be retrieved in the Domain Shader through the Volume Info node, specifically by using the Color output.

Using this field as the Factor in a Mix Shader node, we can assign different Principled Volume nodes to different Voxels depending on the smoke color defined for them.
But the Mix Shader alone would simply blend the two Shaders fifty-fifty, so we need to use a Color Ramp with a sharp separation between the colors coming from Volume Info.
To achieve this, I set the interpolation method to Constant.
I then assigned three different colors to the Color fields of the three Inflow objects: white, gray, and black, from left to right.
The first Color Ramp separates black from the other colors. Black corresponds to 0, so it is sent to the first Shader input of the first Mix Shader node, which in this case is connected to a Principled Volume node with a red Blackbody Tint.
I’m also enabling Denoise in the 3D preview to better define the color of the elements in Rendered view.

The second Shader input of the Mix Shader is connected to a Principled Volume node with a blue Blackbody Tint. So, at this point, if the smoke color is black, we get a red Blackbody.
If the smoke color is not black, we get a blue Blackbody.
Next comes another Mix Shader node, which takes as input another Color Ramp, set specifically to Constant with a Color Stop placed right at the midpoint of the ramp.

In this case, if the smoke color is between black and gray, the first Shader input of the second Mix Shader is used. That Shader was the result of the earlier distinction between black and gray, so the final color will be either red or blue.
If instead the smoke color is between gray and white, then the second Shader input of the second Mix Shader is used. This input is connected to a Principled Volume node with a green Blackbody Tint.
So, the object with white as its Smoke Color will be rendered in green.
Of course, this isn’t the only method you can use to create fiery spheres with two or three different colors, but I wanted to show it as an example use case. As I mentioned earlier, the separation is not perfect, so I encourage you to suggest tweaks or alternative setups in the comments if you find others!
