Skip to content

Volume FX

Volume FX are real-time 3D volumetric effects rendered via GPU ray marching. Add fire, smoke, fog, ice, rain, and other atmospheric effects to your compositions as compositor layers.

Volume FX layers generate a 3D RGBA texture from either a procedural preset or a VDB file, then ray-march through the volume each frame. The 4-channel texture encodes:

ChannelPurpose
RDensity
GTemperature / Heat
BFlame / Fuel
ADensity (for alpha compositing)

The material determines which shader and compositing strategy is used for rendering.

MaterialShaderDescription
AutoLegacyAuto-detect from VDB grid contents (default)
EmissiveEmissiveEmission only — fire, lava, embers. Samples temperature channel for blackbody color ramp
ScatterScatterScattering only — smoke, fog, clouds. Uses Beer-Lambert extinction
CombinedCombinedEmission + scattering — explosions. Hot core emits, cool shell scatters
PropertyTypeDefaultDescription
temperature_scalef321.0Blackbody intensity multiplier
PropertyTypeDefaultDescription
albedo[f32; 3][0.8, 0.82, 0.85]Albedo color (neutral smoke gray)
extinctionf321.0How quickly light is absorbed
PropertyTypeDefaultDescription
temperature_scalef321.0Blackbody intensity multiplier
albedo[f32; 3][0.8, 0.82, 0.85]Albedo color
extinctionf321.0Extinction coefficient
emission_thresholdf320.3Temperature cutoff: above = emission, below = scattering

Volume FX layers expose these parameters on the compositor layer:

PropertyTypeDefaultDescription
volume_presetstring"fire"Preset name (see VFX Presets)
volume_densityf320.8Overall density multiplier
volume_brightnessf321.0Brightness multiplier
volume_speedf320.5Animation speed
volume_stepsu3232Ray march step count (higher = better quality, slower)
volume_materialVolumeMaterialAutoRendering material (see above)

Particle volumes use a GPU particle system with additional controls:

PropertyTypeDefaultDescription
particle_presetstring"fire"Preset name
particle_densityf320.8Particle spawn density
particle_speedf320.5Particle velocity
particle_spreadf320.3Spread radius
particle_turbulencef320.2Turbulence amount
particle_sizef320.05Individual particle size
particle_brightnessf321.0Brightness multiplier
particle_fadef320.5Fade-out rate
particle_depthf320.5Depth extent
particle_stepsu3232Ray march steps
-- Add a fire volume FX layer
pl.cmd("slot:add", {
name = "Fire Effect",
source = {
type = "volume_fx",
volume_preset = "fire",
volume_density = 0.9,
volume_brightness = 1.2,
volume_speed = 0.6,
volume_steps = 48,
volume_material = { type = "combined",
temperature_scale = 1.3,
extinction = 0.8,
emission_threshold = 0.25
}
}
})
-- Add a smoke layer with scatter material
pl.cmd("slot:add", {
name = "Smoke",
source = {
type = "volume_fx",
volume_preset = "smoke",
volume_material = { type = "scatter",
albedo = { 0.7, 0.72, 0.75 },
extinction = 1.5
}
}
})
-- Add a particle volume
pl.cmd("slot:add", {
name = "Ember Particles",
source = {
type = "particle_volume",
particle_preset = "ember",
particle_speed = 0.8,
particle_turbulence = 0.4
}
})

Volume FX parameters are automatable via CC mappings with the vfx. prefix:

CC RangeParameters
vfx.*Volume density, brightness, speed, etc.
pv.*Particle density, speed, spread, etc.
  • Ray march steps — 32 is a good balance. Increase to 64 for quality, decrease to 16 for performance.
  • Resolution — Volume FX render at canvas resolution. Lower canvas size improves performance.
  • Material choice — Scatter-only is cheapest; Combined is most expensive.
  • Multiple volumes — Each volume FX layer adds a full ray march pass. Use sparingly.