Documentation / Node reference / mat nodes

mat/Volume

Renders a VOLUME object as marched smoke, cloud or fire.

Volume

Draws a volume by stepping a ray through it and accumulating what it passes, rather than by shading a surface, which is why it can hold smoke and cloud that have no skin to shade. The density it marches is a POINT attribute read straight off the VOLUME geometry, so there is nothing to bake and no texture to wire. An optional second attribute carries colour, either tinting the smoke or making it glow for fire. The params split into three groups: what is marched, how the light scatters inside it, and what shadow it casts.

Parameters

Name Type What it does
attribute AttributeName Which POINT attribute on the volume holds the density to march. Everything the material draws comes from this field: where it is 0 the ray passes through untouched.
colorAttribute AttributeName An optional VECTOR3 POINT attribute holding a colour per voxel, used as colourFieldMode says. Geometry without it falls back to the colour param alone.
colorFieldMode UInt8 TINT · EMISSIVE What the colour attribute means. TINT multiplies the scattered light, so the field colours smoke that is still lit by the scene. EMISSIVE adds it as light the volume gives off by itself, which is what fire and explosions need, since those are not lit from outside.
emissiveIntensity Float How strongly the colour field glows in EMISSIVE mode. It scales the light the volume adds by itself, and does nothing in TINT mode.
color Color The volume's own colour, multiplied into every sample. With no colour attribute present this is the only thing tinting the smoke.
densityScale Float A multiplier on the density attribute before it is marched. Raise it to turn a thin wisp into thick smoke without touching the geometry, lower it to see through a dense field.
stepSize Float How far the ray moves between samples, in world units. Small steps read the field faithfully and cost more; large steps run fast but band, which shows up as visible shells through the smoke.
maxSteps UInt32 The hard ceiling on samples per ray. It is what stops a large or dense volume from costing without limit: a ray that hits the ceiling stops early, which shows as the far side of the volume being cut off.
absorption Float How much light the volume swallows rather than scatters onward. 0 is pure scattering, which reads as bright cloud, and raising it darkens the interior toward soot or heavy smoke.
shadowSteps UInt32 How many samples the march takes toward each light to find out how shadowed a point is. This is the self-shadowing that gives a cloud its shape. 0 turns it off and leaves the volume evenly lit and flat.
shadowDensity Float How strongly the density blocks light on the way to a light source, separately from how it looks to the camera. It is the dial for deepening or lifting the volume's own shadow without changing its apparent thickness.
anisotropy Float Which way light bounces inside the volume. 0 scatters evenly in every direction. Positive values push it forward, which is what makes a cloud glow when it is between you and the sun. Negative values push it back toward the light instead.
powderStrength Float How much the edges of the volume darken. Real thin smoke lets light through at its edge and looks darker there than the simple model predicts, and this restores that. 0 leaves the edges as the model gives them.
scatterOctaves UInt32 How many rounds of scattering to approximate. 1 is single scattering, where light bounces once and leaves. More rounds spread light deeper into the volume and soften the interior, which is what thick cloud does, at proportional cost.
saturationThreshold Float The accumulated opacity at which a ray gives up early, because what is behind it can no longer show through. Just under 1 saves most of the work inside a dense volume with no visible change; lowering it further starts cutting the interior short.
shadowCastMode UInt8 OPACITY_THRESHOLD · DITHERED How the volume writes into the shadow map. OPACITY_THRESHOLD registers a hit once the ray has accumulated enough opacity, giving a hard silhouette of the dense core. DITHERED varies that threshold per fragment with noise instead, and the receiver's filtering averages the result into a shadow that tracks the density.
shadowOpacityThreshold Float The accumulated opacity at which the caster march counts as a hit, in OPACITY_THRESHOLD mode. Low values make thin wisps cast a full shadow, high values only let the dense core cast one. Hidden in DITHERED mode, which uses noise instead of a fixed threshold.
transparencyMode UInt8 AUTO · OPAQUE · MASK · BLEND Whether this material is drawn in the opaque pass or through order-independent transparency. AUTO decides from the material itself, which for most materials means its colour alpha below 1. OPAQUE always draws in the opaque pass and ignores alpha entirely, which is what you want for a material whose alpha is incidental. MASK draws in the opaque pass but throws away fragments below alphaCutoff, which is what hard-edged cutouts want: they still write depth, so they occlude each other correctly. BLEND always goes through transparency, which is the only way to get soft texture alpha to show, since nothing on the CPU side can inspect the texels.
sides UInt8 FRONT · BACK · BOTH Which side of each triangle is drawn. FRONT draws the outward-facing side only, which is what a closed mesh wants: its inner surface is hidden anyway, so drawing it is wasted work. BACK draws the inward-facing side, for a surface seen from the inside such as a skydome or a box the camera sits in. BOTH draws either side, which is what an open single surface needs: a cutout leaf, a sheet of cloth, or a plane the camera can walk around, all of which disappear from one side under FRONT. The shadow pass follows BOTH so an open surface still casts a shadow whichever way it faces the light, and draws FRONT otherwise.

This page is generated from the engine, so it describes the release you can download. The same text is in the editor's Help panel next to the node itself.