
What Is Volumetric Rendering? Volume Shaders Explained, from Clouds to Explosions
Author: Arndt von Koenigsmarck · Technical review by Sergen Eren · Last reviewed August 2026
Most objects in computer graphics are empty shells. A rendered car, a character, even a mountain is usually just a thin surface wrapped around nothing, because for solid things the surface is all the camera ever sees. But nature is full of things that are not solid at all. Clouds, fog, smoke, fire, dust in a beam of light: you can see into them and through them, and light behaves differently at every point inside them. Rendering these phenomena is the job of volumetric rendering, and the tool that describes how they look is the volume shader. This article explains both, first the ideas and the physics, then the concrete practice inside Redshift, Maxon’s GPU accelerated render engine.
Part 1: Understanding Volumes
What Is Volumetric Rendering?
Volumetric rendering, also called volume rendering, is the technique of computing images from three dimensional grids of data instead of surfaces. Where a normal 3D model is defined by polygons that describe its outer shell, a volume is defined by voxels, tiny cells that fill a region of space, each storing values such as density or temperature. The renderer looks at what happens to light as it travels through all of those cells, which is why a volume can be wispy at its edge, dense at its core, and glowing in the middle, all at once.
The contrast with surface rendering is the easiest way to grasp it. When a ray of light hits a polygon surface, the renderer evaluates the material at exactly one point and is done. When a ray enters a volume, there is no single point to evaluate. The ray keeps traveling, and every stretch of the journey can absorb light, scatter light, or add light. A pixel is a colored square in a 2D image; a voxel is its 3D sibling, a value in a spatial grid. That one extra dimension is the entire story of volumetric rendering, including why it looks so good and why it costs so much.

A simulation of turbulent, swirling smoke was created here. On the top left, the surface of the resulting clouds was visualized using regular polygons; on the top right, a volume shader was used for rendering, which allows, for example, realistic backlighting of the smoke as well as finely graded transparencies and light scattering within the volume.
Here, the camera was moved closer to the simulation shown in its entirety above to schematically illustrate the difference in the calculation. The green grid represents the pixels of the final rendering, arranged in rows and columns. The pixel shown as a solid green area is currently being calculated and is therefore struck by a calculation ray (arrow) from the camera’s perspective, which penetrates the 3D space of your scene. In the case of the simple polygon model (on the left in the image), the ray hits the surface and can gather all the necessary information there (see red marker). In the case of a volume, this point-based information is insufficient, because the calculation ray must gather information—including data on density and light scattering—at many positions within the volume in order to render the smoke realistically.
What Is a Volume Shader?
A volume shader is the material for things that occupy space. Instead of describing a surface, it tells the render engine how the medium at every point inside a volume interacts with light. Almost every modern engine builds this description from the same three ingredients, and Redshift’s documentation offers a memorable analogy to surface materials for each of them:
Scattering is the volume’s counterpart to a diffuse color. It defines how much light bounces off the microscopic particles inside the medium and in which color, which is what makes clouds white and smoke grey.
Absorption is the counterpart to transparency. It defines how much light the medium swallows, which is what makes thick smoke dark and dense volumes opaque.
Emission is the counterpart to incandescence or self illumination. It lets the medium give off light of its own, which is what makes fire and explosions glow from within.
Every cloud, fog bank, or fireball you have seen in a film is some blend of these three behaviors, usually driven by data from a simulation. In Redshift this role is filled by the Standard Volume shader, a physically based volume material for clouds, smoke, fire, and explosions. One small disambiguation for anyone who arrived here from a search engine: there is also a well known GPU stress test called “Volume Shader BM” that borrows the term. That is a benchmark, not a material. This article is about the real thing.
The Physics: How Light Moves Through a Medium
Physicists call fog, smoke, and clouds participating media, because the space itself participates in the lighting instead of leaving light alone until it hits a surface. As a ray travels through such a medium, four things can happen. Light can be absorbed and turned into heat. Light can be scattered out of the ray’s path, which dims the ray. Light can be scattered into the ray’s path from elsewhere, which brightens it. And the medium can emit new light itself. The combined dimming effect of absorption and out scattering is called extinction, and the fraction of light that survives a stretch of the journey is called transmittance. Volume shader parameters are, at heart, artist friendly handles on exactly these quantities.
One more concept does a surprising amount of work: the Phase Function, which is the volumetric equivalent of how a surface material distributes reflected light. It answers the question of which direction light continues after it scatters. Smoke particles scatter light roughly equally in all directions, which is called Isotropic Scattering. Water droplets in clouds overwhelmingly fling light forward, along its original direction of travel. This Forward Scattering is why a cloud between you and the sun has a brilliant silver lining, and why backlit fog glows. Render engines model this with the Henyey-Greenstein phase function, a classic that dates back to a 1941 astrophysics paper, using a single anisotropy value from minus one (Back Scattering) through zero (Isotropic Scattering) to plus one (Forward Scattering). For clouds specifically, Redshift additionally offers the newer Jendersie-d’Eon model, which approximates the true Mie scattering of water droplets and captures a more realistic forward peak than Henyey-Greenstein can.

In each of these renderings, the same cloud was rendered, illuminated from behind by the sun. The only change is in the anisotropy setting of the volume material. From left to right, the values used were -0.9, 0, and 0.85. The positive anisotropy value in the rendering on the right clearly shows how the rays are refracted more toward the back of the cloud volume, making more sunlight visible at the less dense edges of the clouds.
Inside the Standard Volume Shader: A Developer’s View
For readers who want to look under the hood, here is how Redshift’s developers themselves describe the Standard Volume shader. Internally it is a close relative of the Random Walk Subsurface Scattering in Redshift’s OpenPBR and Standard Surface materials. Subsurface Scattering simulates light wandering through a finite, uniform medium like skin or wax; the Standard Volume shader applies the same thinking to a heterogeneous medium whose density varies at every voxel. The parameters map onto each other almost one to one: the Subsurface Color corresponds to the Volume’s Scatter Color, the Subsurface Radius corresponds to the Transparency Color, and the Subsurface Scale corresponds to the Volume’s Depth control (see next figure).

The graphic compares subsurface scattering (left) with volume rendering (right). While subsurface scattering simulates the scattering of light within a volume enclosed by a polygonal surface (such as wax, skin, milk, or marble), a volume shader simulates properties such as density and light emission due to temperature within a space that is not defined by polygons (such as flames, fog, smoke, or clouds).
During rendering, Redshift ray marches through the volume, sampling voxel by voxel as the ray traverses the medium. The density grid it samples is simply a scalar description of how many particles exist at each voxel versus empty space, independent of any color. The scatter color is the albedo of those suspended particles, the color of light they reflect back. The anisotropy controls send that scattered light forward, backward, or evenly in all directions, using Henyey-Greenstein by default or Jendersie-d’Eon for cloud like water media.
The transparency color is the most interesting part. It is an artist friendly encoding of the mean free path, the average distance each wavelength of light travels through the medium before being extinguished. The red, green, and blue values each represent the travel distance of their wavelength, and the Depth parameter multiplies these 0 to 1 values into real distances, measured in centimeters and aware of your scene scale. Because different wavelengths are absorbed at different rates, light that travels far enough through such a medium ends up tinted with the opposite of the transparency color, once the other wavelengths have been exhausted. This is exactly the physics that makes deep water blue, and it is why a subtle transparency tint gives volumes a natural, organic depth that a flat scatter color cannot.
Ray Marching, Multiple Scattering, and Why Volumes Are Expensive
Marching through voxels answers how a renderer reads a volume, but the real cost lives in how often light changes direction inside it. If the engine simulates only one bounce, called single scattering, thin media like light haze look fine, but a dense cloud renders dark and lifeless. Real clouds are bright because photons bounce dozens or hundreds of times inside them before escaping; a thick cumulus cloud reflects up to 90 percent of the light that hits it. Simulating this multiple scattering means following each ray through many additional bounces, and every added bounce multiplies work. That is the honest reason volume rendering has a reputation for being slow, and it is also where GPU rendering and clever approximations, which Part 2 covers, earn their keep. Modern engines soften the cost further with denoising, although volumes are notoriously harder to denoise than surfaces, because the helper data that guides a denoiser, such as surface normals, simply does not exist inside a cloud.

This series of images compares the effect of different Volume Trace Depth settings on the rendering of a cloud containing a cylindrical light source. From left to right, the values 1, 5, and 31 were used for Volume Trace Depth. It is important to note that the scattering strength in the volume shader must be high enough for the intensity of the scattered light within the volume to be visible.
OpenVDB: The File Format That Holds the Smoke
Volumes need a way to travel between the software that simulates them and the engine that renders them, and the industry settled this question years ago with OpenVDB. Originally developed at DreamWorks Animation, open sourced in 2012, honored with an Academy Award for technical achievement, and now maintained under the Academy Software Foundation, OpenVDB is the de facto standard for storing volumetric data. The Redshift documentation offers a perfect one line summary: “OpenVDB files are to volume rendering what EXR files are to HDR images.” Where an EXR stores pixels, a VDB stores voxels, and it stores them sparsely, so the vast empty space around a wispy smoke plume costs almost nothing on disk or in memory.
Inside a VDB file, voxel data is organized into named grids, which Redshift calls channels in shading contexts. The names are conventions rather than rules, but the usual suspects are density, a unitless value describing how many particles fill each voxel and therefore where the volume has substance, temperature for the heat that drives fire emission, velocity for motion blur, and occasionally a color grid for pre painted volumes. Channel names are case sensitive in Redshift, which has cost many artists a confused minute. Where do VDB files come from? Simulation tools such as Houdini, the real time fluid simulator EmberGen, and Cinema 4D’s built in Pyro system all export them, and there are excellent free sources for practicing, including the famous Walt Disney Animation Studios cloud data set and free VDB packs from JangaFX.
Volume Rendering in Redshift
The Building Blocks
Redshift splits volume rendering into a small set of tools, and knowing which one to reach for is half the workflow. Heterogeneous volumes, meaning anything with varying density such as clouds, smoke, fire, and explosions, are loaded through the Redshift Volume object, which reads a VDB file or an animated VDB sequence and shows a bounding box or a point cloud preview in the viewport. The look of that volume is then defined by the Standard Volume material. Homogeneous volumes, meaning uniform media such as atmospheric haze and fog, do not need voxel data at all: the Redshift Environment object fills the scene, or a height limited layer of it, with a scattering medium. This is also the tool for volumetric lighting, the beloved god rays that make light shafts visible in dusty air. Finally, a dedicated Clouds object generates entire procedural skies, with a fast mode that renders the cloud deck as a clever background and a fully volumetric mode in which a skyscraper or an aircraft can pierce the cloud layer and be lit by it.

Here is an example featuring a glass window illuminated from the outside. Without atmospheric simulation of the surroundings, the rays of light between the window and the floor remain invisible. Thanks to the Redshift Environment object, fog or a visible atmosphere—such as that caused by high humidity or dust particles in the air—can be simulated. As a result, the rays of light become visible even between objects.
One practical constraint deserves a plain statement: volumes must fit entirely into GPU memory. They are the one asset class excluded from Redshift’s out of core system, so a gigantic VDB that exceeds available VRAM will abort the render rather than slow it down. Keeping simulations only as high resolution as the shot demands is not just a speed decision, it is a memory budget.
Standard Volume Essentials: The Settings That Matter
The Standard Volume material has two personalities. Used on its own, with grid names typed into its channel fields, it runs a specially optimized fast path and behaves like a classic, easy volume shader with well tuned presets for clouds, smoke, and flames. Used with input nodes attached, it becomes fully programmable, letting you drive density, color, and temperature with procedural noises, remap grids, and even displace voxels for extra detail. For a first session, the built in fields are all you need, and four groups of settings do most of the work:
Volume channel and Density. The channel field names the VDB grid that defines the volume’s shape, almost always density. The Density parameter multiplies it and sets the overall thick or thin character of the medium. Type the grid name exactly; channels are case sensitive.
Scatter. Color and Scale set what the volume reflects and how brightly. The Anisotropy Mode chooses the phase function: Henyey-Greenstein with its minus one to plus one slider is the all rounder and the right choice for isotropic smoke, while Jendersie-d’Eon is the cloud specialist that models light passing through water droplets.
Transparency. The Transparency Color and Depth implement the per wavelength travel distances described in Part 1. Darker means thicker, brighter means thinner, and any color tints the volume with its opposite at depth, shadows included. Subtle saturation goes a long way here; set Depth in relation to the real world size of your volume, since it is measured in centimeters.
Emission. For fire and explosions, point the emission channel at the temperature grid and choose Blackbody mode, which converts temperatures into physically correct colors and intensities on the Kelvin scale, from deep red around 3,000 K to white and blue white beyond 9,000 K. The alternative Color mode hands you a gradient instead, the classic black to red to yellow flame ramp, for art directed fire that ignores physics on purpose.

Rendering of a burning torch, with the flame and smoke depicted at different temperatures (from left to right: 0, 3,000, 6,000, 9,000, and 12,000 Kelvin). This adjustment can be made later using the Redshift Volume Standard material without having to resimulate the scene.
Instead of relying on a physically accurate distribution of color and brightness values based on the simulated temperatures, you can also use custom color gradients and standard color adjustments within the volume material to customize the rendering of smoke and flames, for example, as desired.
Making Volumes Look Real: Multiple Scattering in Practice
Part 1 established that dense volumes come alive only with multiple scattering, and Redshift exposes this as a render setting called Volume Trace Depth, together with a requirement worth memorizing: volumetric multiple scattering works with Brute Force global illumination. Raising the trace depth from its default transforms a cloud from a grey mass into a luminous, believable object, at exponentially growing render cost. Forward scattering clouds benefit enormously from more depth; isotropic smoke shows diminishing returns much earlier; emissive fire gains beautiful internal light spill as its glow illuminates the smoke around it.
Redshift also offers three shortcuts that experienced artists reach for before cranking the trace depth. The first is Extinction Falloff, which approximates the effect of hundreds of additional bounces by gently reducing extinction with each real bounce. Its default value of 0.2 is a deliberate sweet spot, and in the documentation’s own cloud test it produced a brighter, more realistic result while rendering faster than the same scene without it. The second is Anisotropy Falloff, its natural companion, which lowers the anisotropy a little with every bounce so that deeper rays scatter more and more isotropically. This mimics a classic insight from radiative transfer known as van de Hulst’s similarity principle: in highly multiple scattering media, different combinations of scattering albedo and anisotropy produce a nearly indistinguishable appearance as long as the bulk transport properties stay the same. Since evaluating anisotropic scattering is expensive, relaxing it over the bounces both simulates high order scattering and makes the volume cheaper to render. The third is Shadow Density Scale, a classic cheat that lets light penetrate deeper into the volume without changing its silhouette, faking the brightening effect of multiscatter at a fraction of the cost. A well balanced volume usually combines a moderate trace depth with these helpers rather than brute forcing depth alone.
From Pyro to Pixels: The Cinema 4D Workflow
If you work in Cinema 4D, you do not need external software to produce volume data, because the built in Pyro system simulates smoke, fire, and explosions natively. The workflow is pleasantly short. Any object with a Pyro Emitter tag starts producing a simulation, and the Pyro Output object collects its channels, typically density, temperature, and velocity (an introduction to Pyro simulations can be found here in the Cinema 4D documentation). From there you can render directly, or cache the simulation to a VDB sequence and load it back through a Redshift Volume object, which the documentation recommends as the memory friendly route for production. The shading side is almost automatic: the bundled Pyro Volume presets for the Redshift Standard Volume shader arrives with the density grid wired to scattering and the temperature grid wired to blackbody emission, which are precisely the two connections that turn raw simulation data into rendered smoke and fire. Motion Blur is the one step artists tend to forget. Because a VDB sequence is a series of frozen snapshots, Redshift reads motion from the velocity grid; enter velocity into the Volume object’s Velocity field and raise the Velocity Scale until the blur matches the energy of the simulation, and do not be shy, values far beyond 1,000 are normal.

The left part of the image illustrates the first step in creating or loading a volume simulation. In our case, we used the Pyro simulation in Cinema 4D to generate an explosion cloud and saved its animation as a VDB sequence. This allows the simulation to be reused in other projects at any time and also makes rendering more memory-efficient. The images on the right outline the following steps: setting up the Volume Shader to control color and emission, lighting the simulation, correcting the colors, and adding visual effects such as glow or motion blur. All of this can be done directly in Cinema 4D and Redshift or in post-production, depending on the desired pipeline and whether, for example, integration with other renders or live-action footage is still required.
Volume Troubleshooting Checklist
The volume renders black or invisible: check that a grid name is entered in the channel field with exact spelling and case, and that at least one light has a volume contribution above zero.
The volume looks noisy or grainy: raise the light samples first, since lights dominate volume noise; scattering heavy media need more samples than absorption heavy ones.
The volume looks blocky: the simulation resolution is too low. Shader remapping can soften it, but only a higher resolution cache truly fixes it.
The render aborts with an out of VRAM error: the VDB does not fit in GPU memory. Reduce simulation resolution, trim unused grids from the cache, or split the effect.
The cloud looks flat and grey: raise Volume Trace Depth with Brute Force GI, keep Extinction Falloff at its 0.2 default, and lower Shadow Density Scale slightly before pushing depth higher.
The fog washes out the whole frame: reduce the Environment object’s Scattering value drastically; even small values are powerful.
FAQ: Volumetric Rendering and Volume Shaders
What is a volume shader in simple terms?
A volume shader is a material for space filling media such as smoke, fog, clouds, and fire. Instead of coloring a surface, it tells the renderer how every point inside a volume absorbs light, scatters light, and emits light, usually driven by simulation data stored in voxel grids.
What is the difference between volume rendering and surface rendering?
Surface rendering evaluates a material at the single point where a ray hits a polygon shell. Volume rendering follows the ray through a 3D grid of voxels and accumulates light interactions along the entire path, which allows semi transparent, internally lit media that no surface can imitate.
What is a VDB file?
A VDB is the industry standard file format for volumetric data, built on the open source OpenVDB library that originated at DreamWorks Animation. It stores sparse voxel grids with names like density, temperature, and velocity, and it is exported by tools such as Houdini, EmberGen, and Cinema 4D’s Pyro system.
What is a voxel, and how is it different from a pixel?
A pixel is one colored square in a 2D image. A voxel is one cell in a 3D grid, storing values such as density or temperature at a position in space. Volume rendering computes 2D pixels by simulating light through millions of 3D voxels.
Why are my volume renders noisy?
Volume noise usually comes from lighting. Lights need enough samples to resolve their contribution inside a scattering medium, so raising light samples typically helps more than raising overall quality settings. Scattering dominated volumes such as clouds need noticeably more samples than thin absorbing smoke.
How do I render realistic fire?
Use the temperature grid of your simulation to drive emission in Blackbody mode. Blackbody emission converts physical temperatures into correct fire colors and intensities automatically, glowing red around 3,000 Kelvin and shifting toward white as temperatures rise. In Cinema 4D, the Standard Volume shader already offers suitable presets for many volume simulation systems and automatically enters the corresponding names of the voxel grids.
How do I create god rays?
God rays are volumetric lighting: visible beams created when light passes through a thin scattering medium. In Redshift, add a Redshift Environment object, enable a small amount of scattering, and give the scene a strong, partially blocked light source such as sun through a window. The beams and volumetric shadows appear naturally.
Why does volume rendering take so long, and how can I speed it up?
Volumes are expensive because rays are sampled at many points along their path and can scatter many times inside dense media. To speed things up in Redshift, keep simulations only as high resolution as needed, use a moderate Volume Trace Depth, leave Extinction Falloff at its default, lower Shadow Density Scale instead of adding bounces, and let the GPU and denoiser do the rest.