Articles

How to Create Photorealistic Smoke and Haze in a CGI Scene

ARTILABZ™

ARTILABZ™ gives you unlimited access to all Houdini courses, 3D assets, simulation files, textures and tools. updated every month.

Everything You Need to master Houdini.

01

Premium Houdini Tutorials

Full access to every course — fluid simulation, procedural FX, brand visuals and more.

02

Monthly New Content

Fresh tutorials and assets added every month — your library grows with you.

03

Instant Access to Everything

The moment you join, the full library is yours — no drip-feed, no waiting.

04

Project Files Included

Every tutorial comes with the full Houdini scene file — open every node, learn every detail.

FROM 14.99€/MONTH

Includes one exclusive complete course

The exclusive course — a full production tutorial you won't find anywhere else, never sold alone.

Best Seller
Most Loved
Tutorial Camera Rig

ADVANCED CUSTOM CAMERA RIG

ANIMATION · CONSTRAINTS · CUSTOM UI

BUILD A FULLY CUSTOM CONSTRAINT-BASED CAMERA RIG IN HOUDINI WITH A CUSTOM UI PANEL. DESIGN FLEXIBLE SYSTEMS FOR PRECISE, CINEMATIC CAMERA ANIMATION ON ANY PROJECT.

€29.99

Freebies
Free Studio HDRI Pack box by Artivoxa showing 60 studio lighting setups with softboxes wrapped around the packaging

Studio HDRI Collection

ASSETS · EXR & HDR · 60 HDRIS

DOWNLOAD 60 STUDIO HDRIS CAPTURED IN A REAL PHOTO STUDIO. LIGHT YOUR PRODUCT AND BEAUTY RENDERS LIKE A PHOTOGRAPHER — SOFTBOX, LANTERN, STRIP AND GRID SETUPS, READY FOR ANY RENDERER.

FREE

How to Create Photorealistic Smoke and Haze in a CGI Scene

Have you ever rendered a scene only to find the smoke flat and lifeless? You tweak density, play with steps, but the photorealistic smoke and haze you imagined never materialize.

Getting realistic atmospheric effects can feel impossible when you’re deep in a Houdini DOP network. Complex controls, endless parameters, and long render times leave you second-guessing every setting.

What if there was a clear workflow that guides you from a basic emitter to a believable CGI scene? By breaking down each phase, you can stop guessing and start dialing in the right values.

We’ll walk through crucial steps: setting up your volume source, choosing correct shading, optimizing lighting and render settings. You’ll see how to balance simulation detail with practical render times.

This introduction outlines the journey. If you’re comfortable with node-based workflows and basic simulation concepts, you’ll soon have the tools to craft convincing smoke and haze without endless trial and error.

What references, photographic tests, and technical goals should I define before starting?

Before you dive into a Houdini simulation, assemble a targeted set of real-world examples to guide density, turbulence, and lighting. An accurate reference library helps you analyze how smoke billows, fades, and reacts to different backlights. Collect high-speed captures, time-lapse sequences, and stills under varied conditions to inform your decisions on scale and detail.

  • High-contrast backlit smoke from a single light source
  • Diffuse environmental haze under soft natural light
  • Fast-moving smoke bursts showing sharp edges and fine vortices
  • Color shifts near hot sources or cold diffusion

Conduct small-scale photographic tests using a fog machine or incense stick. Vary camera settings—shutter speed, aperture, ISO—and record how exposure affects edge definition. Photograph with and without backlighting to isolate scattering vs. absorption. These tests become your physical analog for lookup tables, density falloff curves, and phase function parameters when shading your photorealistic smoke.

Finally, set concrete technical goals in your DOP network. Define your simulation’s domain size and volume resolution early: choose a voxel size that balances fine vortices against memory constraints. Establish target simulation duration and frame rate to align with plate footage. Outline the necessary AOVs—density, temperature, velocity—to export for compositing. Clarify your VDB workflow for fast caching and iteration. With references, tests, and goals in place, you’ll maintain artistic control and technical consistency throughout your pipeline.

How do I set up a reliable Houdini simulation workflow: emitters, domain sizing, solver choice and unit scale?

Begin by organizing your DOP network with a clear emitter and container relationship. Use a Pyro Source SOP to define emission shape and velocity, then feed it into a Pyro Solver DOP. This separation lets you tweak emission intensity independently from solver settings, maintaining procedural control.

Define your scene’s unit scale in the Preferences → Hip File Options before layout. Consistent units ensure that physical values such as buoyancy and viscosity behave predictably. A 1 unit = 1 meter scale is common for atmospheric sims.

  • Emitter size: Match the real-world object scale to control mass generation.
  • Emission rate: Express in density per second; adjust in Pyro Source’s density and vel channels.
  • Velocity fields: Use noise or turbulence to break uniform flow at source.

For domain sizing, enable Dynamic Grid (GasResizeFluid) in Pyro Solver. Set safe margins—10–20 voxels—to avoid clipping fast-moving flows. Static grids can be used for small, localized smoke, but dynamic grids preserve memory and scale automatically for large plumes.

Choose between the Gas and FLIP solvers based on density dynamics. Gas solvers excel at light, billowy smoke with fine vorticity controls, while FLIP handles heavy interactions like liquid entrainment. For pure smoke, stick to Gas; switch to FLIP only when coupling with fluids or debris.

How do I add believable multi-scale detail and physically driven motion (turbulence, vorticity, buoyancy, temperature)?

Realistic smoke relies on layered scales of motion. Start with a coarse simulation for broad shapes, then up-res and inject fine noise. In Houdini’s Pyro Solver, enable turbulence on the Noise tab and adjust the frequency bands. Higher resolution grids capture multi-scale detail while lower bands shape the volume’s core.

  • Gas Resize Fluid Dynamic: adapt grid to density bounds
  • Gas Disturb: add procedural swirl
  • Gas Turbulence: control noise amplitude and element size

To drive buoyancy, emit a temperature field from your source. In the Pyro Solver’s Buoyancy Lift and Temperature Diffusion settings, link the temperature field to upward acceleration. Use lower diffusion to preserve sharp thermal gradients, producing realistic rising plumes.

Enhance small eddies with vorticity confinement: activate it in the solver’s Effects tab. Increase the confinement gain to amplify rotational curls without blowing out your sim. Together with micro solvers, this delivers that familiar “smoky” break-up at edges and keeps the motion physically driven.

How do I build photorealistic volume shaders and choose render settings for clean, efficient results?

Achieving photorealistic volume shaders requires balancing shader complexity with optimized render settings. In Houdini you’ll connect density fields to scattering and absorption channels, then adjust sampling rates and step sizes per renderer. This section breaks down critical shader parameters and renderer-specific strategies to keep your haze and smoke crisp without skyrocketing render times.

Key shader parameters to tweak: density mapping, scattering, absorption, anisotropy and emission

  • Density Mapping: Use a Volume Sample VOP to remap your pyro density between 0–1. Apply a Fit Range node to control falloff; compressing high values avoids overly opaque cores and preserves detail in low-density wisps.
  • Scattering Coefficient: Controls light diffusion inside the volume. In Houdini’s Principled Volume, start around 1e-3 m–1 and tweak per light intensity. Too low yields flat smoke; too high looks milky.
  • Absorption Coefficient: Opposes scattering by darkening volume interiors. Match absorption to density mapping to simulate realistic light loss. Use color ramps keyed to density for artistic control over hue shifts.
  • Anisotropy (Phase Function): Governs light directionality. Values near 0 scatter uniformly, +0.5 simulates forward scattering common in fog. Adjust anisotropy to soften edges or emphasize highlights.
  • Emission: Adds self-illumination for glowing smoke or fire. Plug a temperature field into an Emission Ramp in the Pyro Shader. Control falloff with an inverse temperature curve to avoid blown-out cores.

Renderer-specific tips: Karma XPU/Mantra vs third-party (Redshift/Arnold) volume considerations

  • Karma XPU: Use the native Volume Shader with adaptive step size. Enable “adaptive volume step” in the render properties to auto-adjust ray marching based on density. Set max steps to ~200 for complex sims.
  • Mantra: Employ the Principled Volume shader. Lower “Volume Quality” jitter to 0.5 for faster convergence, then raise “Pixel Samples” under ‘Render’ to clean noise. Use stochastic sampling to reduce firefly artifacts.
  • Redshift: Connect your VDB to an RS Volume. Decrease “Raymarch step length” to 0.1 for detailed smoke; if noise spikes, enable “Adaptive Volume Sampling” and increase “Min Samples” to 4. Use deep EXR for post haze control.
  • Arnold: Use aiStandardVolume. Tweak “Volume Step Size” to balance detail and speed; default 0.1 often works, but complex sims need 0.05. Increase “Volume Shadow Step” to match for consistent shadow density.

How should I light scenes with smoke and haze to convey depth, rim light and volumetric shadowing?

Lighting volumetric smoke in Houdini starts with understanding how rays interact with density. A strong back or rim light accentuates wisps by grazing the volume, while a softer fill preserves form without flattening haze. Use Mantra’s volume lighting parameters and light linking to control each light’s contribution to the smoke, ensuring contrast and depth.

Begin with a narrow-angle spot or distant light positioned behind the smoke. Enable “Light Volume Scattering” on the light and increase the scattering coefficient in your Pyro Shader so that rays highlight trailing edges. Set a high intensity but quick falloff to avoid over-illuminating the mid-densities. This creates a crisp rim that reads against dark or midtones.

  • In the light node, turn on Volume Samples Scale to refine noise in the scattering
  • Adjust the Phase Function toward forward scattering (value ~0.8) for a more natural look
  • Use Light Exclude Groups to prevent this backlight from affecting ground or fill-lit areas

Next, add a broad-area fill—an environment or sky dome light at low intensity. Link it only to geometry, excluding volumes. This maintains subtle illumination inside the smoke where the rim light doesn’t reach, preserving silhouette contrast. Optionally, add a soft spot with wide cone angle as a volumetric fill, tuned to about 20–30% of rim intensity.

For convincing volumetric shadows, enable ray-traced shadows on key lights. In Mantra settings, increase Volume Shadow Samples to reduce artifacts, then balance performance by lowering Render Volume Step Size. In your Pyro Shader, tweak the shadow density multiplier to intensify dark cores where smoke occludes light, reinforcing layers and spatial separation.

Finally, reinforce depth with distance-based fade. Use a Volume Ramp VOP or the shader’s Fog Color Ramp to tint further smoke toward a background hue. This gradient falloff mimics atmospheric perspective, guiding the viewer’s eye through the scene and underscoring the volumetric lighting setup.

How do I optimize sims and renders, output useful AOVs, and composite smoke/haze into plates or CGI scenes?

Begin by right-sizing your pyro simulation: use the Gas Resize Fluid Dynamic SOP to crop the domain around visible smoke, lowering voxel counts. Adjust voxel size for a balance between detail and speed, and enable adaptive time stepping in the Pyro Solver to avoid unnecessary sub-steps. Cache each stage—density, temperature and velocity—into separate VDBs for faster iterations.

In your render settings, focus on volume step scale and scattering samples. With Mantra or Karma, set a conservative volume step to avoid noise, then increase scattering count only where breakup appears. Enable motion blur via velocity vectors exported in the sim. Limit render bounds by linking the volume’s bounding box to the camera frustum to skip off-frame voxels.

  • AOVs to export: density, emission, temperature, velocity, z-depth
  • Use deep EXR or multi-layer EXR for per-pixel depth and velocity channels
  • Tag each pass in Mantra’s Extra Image Planes or Karma’s LPEs

For AOV setup in Houdini, add Image Planes on your ROP: density as f32, temperature normalized to [0-1], velocity as vector. In Karma, write LPEs like “C(volume)”. This ensures you get isolated smoke and haze passes for grading. Export VDBs for external renderers or GPU-based volume engines to maintain consistency.

During compositing, use depth and velocity AOVs to merge smoke into plates realistically. In Nuke, import deep EXR and apply volume shaders or VolumeGeo nodes. Match focal blur via z-depth, then refine mist density with a graded ramp. Color-correct your smoke using the temperature pass to simulate warm highlights and cool shadows, ensuring seamless integration with live-action or CGI backgrounds.

— FOREVER FREE —

Free Studio HDRI Pack box by Artivoxa showing 60 studio lighting setups with softboxes wrapped around the packaging
  • Blender
  • Cinema 4D
  • Houdini
  • Maya
  • 3ds Max
  • Unreal
  • Redshift
  • Octane
  • Karma
  • Cycles
  • Arnold
  • V-Ray
  • Corona

60 studio lighting HDRIs in one free pack — softboxes, lanterns, strip boxes, grids, top-light and three-point setups, all shot in a real photo studio.