Clouds, Atmosphere and Environment Lighting

The sky, the light, and the mood they build together

Atmosphere, the Soul of an Environment

Lighting and atmosphere are probably the two parameters with the biggest effect on how emotionally a 3D environment reads. A technically flawless scene, with perfect geometry and textures, can still feel cold and artificial if the atmosphere is handled poorly. Conversely, well-built lighting and clouds can turn a modest scene into a memorable image.

Houdini offers a complete toolkit for building convincing atmosphere: VDB volumes for physically correct clouds, a built-in procedural sky system, fog and atmospheric-scattering tools, and a volumetric render engine (Karma) capable of accurately simulating how light interacts with particles in the air. This article covers all of these tools and how to combine them for production-level atmospheric environments.

The Physics of Natural Light

Before touching the tools, it's worth understanding the physical phenomena that give natural light its character - the foundation of realistic lighting in Houdini or any other software.

Rayleigh Scattering

Rayleigh scattering is what gives the sky its blue color. Atmospheric molecules scatter sunlight differently depending on wavelength: short wavelengths (blue, violet) scatter far more intensely than long wavelengths (red, orange). Seen from the ground, the sky looks blue because blue light arrives from every direction. At sunrise and sunset, light travels through a much thicker slice of atmosphere, the blues get absorbed, and only reds and oranges reach us directly.

Mie Scattering

Mie scattering happens on particles larger than molecules - water droplets, aerosols, dust. Unlike Rayleigh, Mie scatters every wavelength similarly, producing white light. That's the phenomenon behind clouds' white color, and the glowing halo around the sun on hazy days. The amount of Mie scattering in the atmosphere determines visibility and fog density.

Global Illumination and Indirect Light

In nature, light never comes from a single direction. The sun directly lights exposed surfaces, but the entire sky dome acts as a giant diffuse light source that illuminates shadows - which is why natural shadows are never pure black, they're lit by skylight. In Houdini with Karma, global illumination (GI) automatically calculates these light bounces, but the environment still needs to be set up correctly for that indirect lighting to feel coherent with the scene.

Procedural Sky: Environment Light and Physical Sky

The Environment Light Node

Environment Light is the starting point for any outdoor lighting in Houdini. It wraps the entire scene in a luminous sphere simulating the sky dome, with two main modes:

  • HDRI (High Dynamic Range Image) - using a real HDR panoramic photograph as the light source. This is the fastest route to realistic lighting: a good HDRI simultaneously supplies sky color, sun position, environment reflections and directional shadows. Libraries like Poly Haven offer hundreds of free, very high-resolution HDRIs.
  • Procedural sky (Physical Sky) - using Houdini's built-in physical sky model for a dynamic, fully controllable sky. Unlike a fixed HDRI, the procedural sky can be adjusted in real time (time of day, season, atmospheric turbidity) and generates lighting that's always perfectly coherent with clouds and haze.

Physical Sky in Houdini / Karma

Karma includes a physical sky model based on the Preetham/Hosek-Wilkie model, which accurately simulates how light distributes through the atmosphere. Key parameters:

  • Sun Direction (Azimuth / Elevation) - the sun's position in the sky. Elevation (the vertical angle) matters most: 0° is the horizon (sunrise/sunset), 90° is the zenith. The most dramatic light sits between 5° and 25° - a low sun, grazing and warm.
  • Sun Intensity - the power of direct sunlight. In Karma, a physically accurate value sits around 10,000 to 100,000 nits depending on the time of day.
  • Sky Intensity - the power of diffuse skylight. Typically 5 to 10 times lower than Sun Intensity, but far more important than that number suggests, since it lights every shadow.
  • Turbidity - the amount of particulate in the atmosphere. A low value (2) gives a very blue, clear sky (high mountain air); a high value (8-10) simulates a polluted or humid atmosphere, with a whiter sky and pronounced Mie scattering. A crucial parameter for a scene's mood.
  • Ground Albedo - the reflectivity of the atmospheric sphere's virtual ground, affecting the color of light bouncing back upward (under clouds, under objects).

The Sun Light Node

Alongside Environment Light, a Sun Light node (a Distant Light in Houdini) simulates direct sunlight as a parallel source at infinite distance. Its direction needs to be manually synced with the Physical Sky's, or use the Houdini Sky Light node which couples the two automatically. Give the Sun Light a small half-cone angle (0.25° to 0.5°) to simulate the solar disc and produce shadows with a slightly soft edge (penumbra), as in reality.

VDB Clouds: Physically Correct Volumes

Clouds in Houdini are VDB (OpenVDB) volumes, the volumetric grid format developed by DreamWorks. A VDB cloud is a 3D grid of cells (voxels), each storing a density value - the higher the density, the more opaque the volume. The volumetric render engine (Karma or Mantra) then simulates how light travels through, scatters in, and is absorbed by that volume to produce a physically correct render.

Cloud Types and How They Form

  • Cumulus - vertically developed clouds with a flat base and cauliflower top. Typical of fair-weather days with scattered clouds. High density, bright white on top, gray under the base.
  • Stratus - horizontal layered clouds covering the sky like a uniform veil. An overcast, even sky with soft, diffuse light and no marked shadows.
  • Cirrus - high-altitude clouds (6,000-12,000 m), made of ice crystals. Filamentous, translucent, cast no shadows. Often signal a change in weather.
  • Cumulonimbus - storm clouds with very strong vertical development (up to 15,000 m), a characteristic anvil top. Associated with lightning and heavy rain.
  • Altocumulus / Altostratus - mid-altitude clouds, often in rows or a sheet. A "mackerel sky" or pre-rain sky.

Generating Clouds With the Cloud SOP (Labs)

SideFX Labs offers a Cloud SOP that generates cloud volumes directly as VDB from input geometry. The workflow is quite intuitive:

  1. Build a base geometry defining the cloud's general volume - a sphere or group of spheres merged with a Boolean SOP for cumulus, a flattened volume for stratus.
  2. Connect it to the Labs Cloud node, which automatically converts the geometry into a density VDB volume.
  3. Adjust turbulence and noise parameters to give the cloud its fluffy, irregular look.
  4. Use a VDB Smooth node to soften edges and create smooth transitions between density zones.
  5. Add a VDB Activate or VDB Resample node to control the volume's resolution as needed for rendering.

Key Cloud SOP Parameters

  • Density Scale - overall volume density. Dense cumulus: 0.5-2.0. A translucent cirrus: 0.05-0.2. A threatening cumulonimbus: 3.0-10.0.
  • Turbulence Frequency - the frequency of the turbulent noise creating internal cloud detail. Higher frequency gives very detailed, fluffy clouds; lower frequency gives softer, milkier shapes.
  • Turbulence Amplitude - amplitude of the turbulent noise, controlling how irregular and ragged the cloud's outline is.
  • Voxel Size - resolution of the VDB grid. A 10 cm voxel gives fine detail but uses a lot of memory; 50 cm is a good quality/performance compromise for medium-sized clouds.

Generating Clouds With Procedural Noise (Pyro / Volume SOP)

For more custom clouds or complex atmospheric effects, VDB volumes can be generated directly from procedural noise using a Volume SOP or Pyro Source node:

// Volume Wrangle to generate a cloud from noise
// Apply on a Volume SOP (density field)

vector pos = v@P * chf('noise_freq');
float base = fit01(onoise(pos), 0, 1);

// Extra detail noise
float detail = fit01(onoise(pos * 4.0 + {1.5, 0.3, 2.1}), 0, 1);

// Base shape: a graded sphere
float sphere_mask = 1.0 - smoothstep(0.4, 0.8, length(v@P / chv('cloud_size')));

f@density = max(0, (base * 0.7 + detail * 0.3) * sphere_mask - 0.1);
f@density *= chf('density_scale');

Volumetric Shading Parameters

A VDB volume needs a volumetric material to render. Karma uses the Volume shader (or Principled Volume shader in recent versions). Core parameters:

  • Scattering Coefficient - how much light the volume scatters; the main driver of visual density. A high value gives an opaque white cloud (cumulus), a low value a translucent volume (cirrus, haze).
  • Absorption Coefficient - how much light is absorbed (turned into heat). For pure clouds (water and ice), absorption is close to zero - a cloud scatters light but doesn't absorb it. Absorption matters more for smoke and colored gas.
  • Phase Function (g) - describes the direction light scatters in. The Henyey-Greenstein model is standard, with g ranging from -1 (pure backscatter) to +1 (pure forward scatter). For clouds, g = 0.7-0.85: light scatters strongly forward, which is why clouds look bright when viewed backlit.
  • Max Step Rate - the size of integration steps through the volume. Smaller steps give a more accurate but slower render; 0.5-1.0 (in voxel units) is a good compromise for final renders.
  • Emission - the volume's own light energy. Zero for normal clouds; non-zero for lightning or glowing-cloud effects (aurora, alien atmospheres).

Fog, Haze and Volumetric Atmosphere

Atmospheric fog and haze are fundamental for building depth and mood in an outdoor scene. They add aerial perspective: distant objects look lighter, bluer and less contrasted than nearby ones - one of the most powerful effects for conveying depth and scale.

Fog Volume: Homogeneous Fog

The simplest method is a large, very low-density VDB volume wrapping the whole scene, simulating suspended particles in the air (moisture, dust, aerosols). In Houdini:

  1. Create a Box SOP sized to the whole scene (e.g. 2000 × 500 × 2000 meters for a landscape).
  2. Convert to VDB with a VDB from Polygons node or a Volume SOP at a very low constant density (0.001-0.01).
  3. Apply a Volume material with very low scattering and a slightly blue tint to simulate Rayleigh scattering.
  4. For fog that thickens with altitude (typical valley haze), use a Volume Wrangle to modulate density by Y:
// Exponential fog: dense at ground level, fading with altitude
float fog_height = chf('fog_height');     // max fog height
float fog_density = chf('fog_density');   // ground-level density

f@density = fog_density * exp(-v@P.y / fog_height);
// e.g. fog_height=50, fog_density=0.005 → light valley haze

Atmospheric Fog in Karma

Karma offers a global Atmosphere parameter in its render properties. This fog effect is computed directly by the render engine without needing any VDB geometry, making it much faster - it simulates aerial perspective globally and uniformly, the ideal choice for wide shots and distant backgrounds.

  • Atmosphere Density - the overall density of atmospheric haze; increase gradually until you get the depth effect you want.
  • Atmosphere Color - the haze color. Daytime sky: slightly blue white. Sunset: pink-orange. Industrial environment or sunrise: ochre or amber.
  • Atmosphere Max Distance - the distance beyond which haze reaches maximum density - a crucial parameter for defining how far away the horizon disappears into haze.

God Rays

God rays (crepuscular rays) are the visible light beams when sunlight breaks through clouds or trees in a scattering atmosphere. In Houdini with Karma, they appear naturally once an atmospheric volume is correctly set up and a direct light source (the sun) passes through it. To emphasize them:

  • Increase the Phase Function g - a value near 0.9 strongly emphasizes forward scattering and makes light beams clearly visible.
  • Use a heterogeneous volume - clouds that partially block light create shadowed and lit areas within the haze, making the rays visible.
  • Increase the number of light samples - god rays need more samples to converge cleanly; raise Volume Light Samples in Karma's settings.

Building Coherent Environment Lighting

Realistic environment lighting isn't just about placing a sun and an HDRI - it relies on a hierarchy of light sources working together to build coherence and mood.

The Hierarchy of Outdoor Light Sources

  1. The sun (direct light) - the main, directional, very intense source. Determines shadow direction and overall color temperature. Warm light (2,500-5,500 K depending on time) at sunrise/sunset, neutral to slightly blue at noon (5,500-6,500 K). It's what creates hard shadows and drives the scene's drama.
  2. The sky (diffuse indirect light) - the entire sky dome acting as a cool, soft blue light source. It lights shadows, reducing their darkness. Its intensity is 5 to 20 times lower than direct sun, but its contribution to scene readability is huge.
  3. The clouds (filtered, scattered light) - clouds act as giant diffusion panels softening sunlight. An overcast sky turns direct light into soft, wraparound light with no marked shadows; partially lit clouds create intensity variation across the scene.
  4. Light reflected by the environment - ground, walls, water and snow reflect light and create indirect bounces. Snow can reflect up to 90% of light and significantly illuminate the underside of objects (a natural fill light); water creates caustics and dynamic reflections.
  5. Secondary (emissive) lights - windows, streetlights, fires, the moon, bioluminescence. Accent sources creating local points of interest in night or dusk scenes.

Color Temperature: the Language of Time of Day

Color temperature (in Kelvin) is the single most important parameter for communicating time of day and a scene's mood. Reference values:

  • Dawn (4-6am) - 1,800-2,500 K. Deep red, vivid orange. Grazing, dramatic light, very long shadows.
  • Sunrise (6-8am) - 2,500-4,000 K. Warm orange, the "golden hour" look favored by photographers and cinematographers.
  • Morning/afternoon (8am-4pm) - 5,000-6,500 K. White to slightly blue light. Short shadows at noon, longer in morning and afternoon.
  • Golden hour (4-6pm) - 3,000-4,500 K. The symmetric equivalent of sunrise - warm, dramatic, highly prized in production.
  • Sunset (6-8pm) - 2,000-3,000 K. Intense red-orange. Clouds painted in vivid color if present.
  • Blue hour (dusk, 8-9pm) - 7,000-12,000 K. Deep blue sky with no direct sunlight - a very distinctive, melancholic mood.
  • Night / moonlight - 4,000-6,000 K (moon). Cool, directional light. The human eye loses color perception at night (scotopic vision) - worth simulating with slight desaturation.

Lighting Coherence: Fundamental Rules

  • The warm/cool complementarity rule - good outdoor lighting always plays warm (sun) against cool (sky). Lights on the same side of the color wheel make a scene flat and hard to read; a warm key with a cool fill (or vice versa) automatically produces a livelier image.
  • The intensity-ratio rule - outdoors, direct sun is typically 5 to 10 times more intense than diffuse skylight. Too low a ratio and the scene looks overcast; too high and shadows go too dark, making the scene look barren.
  • Shadow coherence - every hard shadow in a scene must converge toward the same vanishing point (the sun's direction). Shadows pointing in different directions are one of the most visible errors in 3D lighting.
  • Variation and animation - natural light is never static. Moving clouds vary light intensity, leaves filter the sun, breeze shifts shadows. Slightly animating the key light's intensity (±10-20%) with slow noise meaningfully strengthens realism.

Choosing and Using HDRIs

HDRIs are 360° panoramic photographs captured with a very high dynamic range, containing both the brightness of dark areas and the intensity of direct light sources (sun, streetlights) - which makes them perfect for lighting 3D scenes: a single HDRI can simultaneously light the scene, create coherent shadows, and provide environment reflections on shiny surfaces.

Choosing the Right HDRI

  • Resolution - for lighting only (HDRI not visible in the background), 2,000-4,000 px wide is enough; for a visible, photographically accurate background, prefer 8,000-16,000 px.
  • True dynamic range - a quality HDRI should capture direct sunlight at its real intensity, not just blow out the highlights. Poly Haven and HDRI Haven are very reliable here.
  • Coherence with the scene - pick an HDRI whose sun direction, color temperature and mood match the scene's needs; don't just grab the first one available.
  • Outdoor vs. indoor HDRIs - outdoor HDRIs suit environment scenes; specialized HDRIs exist for interiors or night urban scenes (gyms, offices, night streets, etc.).

Orienting and Adjusting the HDRI in Houdini

  • Rotation - orient the HDRI so the sun arrives from the desired direction relative to the scene; Rotate Y turns the HDRI sphere horizontally.
  • Exposure (Intensity) - adjust overall intensity. In physically correct rendering (Karma), keep physical values and adjust via camera exposure (EV) rather than the HDRI's intensity.
  • Decoupling background visibility - Environment Light's settings let the HDRI contribute to lighting without showing as the background (and vice versa), so you can use a high-quality HDRI for lighting while showing an animated procedural sky as the background.

Recommended HDRI Libraries

  • Poly Haven (polyhaven.com) - a fully free (CC0), very high-quality library. Hundreds of outdoor and indoor HDRIs in 16K - the go-to reference for students and professionals.
  • HDRI Hub (hdrihub.com) - free and paid HDRIs, with a good selection of urban and industrial environments.
  • Skies Magazine (hdrmaps.com) - specialized in skies, with sunset and dramatic-sky HDRIs.

Animating Clouds and Atmosphere

A static sky immediately gives away a 3D scene's artificiality. Animating clouds, even subtly, is one of the elements that contributes most to an outdoor environment's believability.

Animation by Noise Advection

The simplest and most efficient way to animate a cloud volume in Houdini is to advect the density field with a procedural velocity field animated over time - simulating wind-carried cloud motion without a full physics simulation (Pyro):

// Volume Wrangle: cloud advection by animated noise
float wind_speed = chf('wind_speed');     // wind speed
float time_offset = @Time * wind_speed;

// Position animated over time
vector pos = v@P * chf('noise_freq');
pos.x += time_offset;   // drift along X

float base = fit01(onoise(pos), 0, 1);
float detail = fit01(onoise(pos * 3.0 + {5.2, 1.3, 4.7}), 0, 1);

float sphere_mask = 1.0 - smoothstep(0.35, 0.75, length(v@P / chv('cloud_size')));
f@density = max(0.0, (base * 0.6 + detail * 0.4) * sphere_mask - chf('threshold'));

Animating the Sun and Time of Day

For a sunrise or sunset animation, Sun Elevation and Sun Azimuth can be driven by Houdini expressions animating them over a time range. A typical expression for a full day/night cycle over 240 frames:

// Sun elevation expression (parameter tab)
// 0 = horizon, 90 = zenith, negative = night
fit($F, 1, 240, -30, 90)

// Color temperature synced to elevation
// Wire into a VEX expression on the Sun Light node
float elev = ch('sun_elevation');
f@color_temp = fit(elev, -10, 90, 1800, 6500);

Full Simulation With Pyro

For animated clouds with physically correct dynamics (forming clouds, a developing storm, evaporation), Houdini Pyro is the right tool. A Pyro simulation generates density, velocity and temperature fields that produce clouds with natural thermal-convection behavior - the most computationally expensive approach, but also the most convincing for close-up shots and fast-moving clouds.

Pipeline and Best Practices

Recommended Steps

  1. Start with a reference HDRI - before building anything procedural, place a reference HDRI close to the desired mood as a visual and color starting point.
  2. Build the procedural sky - create the Environment Light with Physical Sky, adjusting Turbidity and sun direction to match the reference HDRI.
  3. Add clouds last - clouds radically change lighting; add them after the lighting base is established for better control over their impact.
  4. Check with test objects - place a neutral gray sphere (0.5 albedo) in the scene to evaluate the balance between direct and indirect light; it should show a clear light/shadow separation without shadows going pure black.
  5. Adjust via camera exposure - in physically correct rendering, adjust final brightness via the Karma camera's EV rather than light intensities, preserving physical ratios.
  6. Test at different resolutions - VDB clouds are expensive; work at low resolution (large voxels) during development, raising it only for the final render.

Volumetric Render Optimization

  • Volume Step Rate - the most influential parameter on volumetric render quality and speed. Start at 2.0 for tests, drop to 0.5 for the final render.
  • Volume Shadow Samples - the number of samples used to compute shading inside the volume; raise it to remove noise in cloud shadow areas.
  • Cache clouds as VDB - once shape and motion look right, export the frames to VDB files on disk; the final render loads pre-computed VDBs, much faster than recalculating the volume every frame.
  • Use instances for repeated clouds - if a scene has many similar clouds, use Packed Primitives to instance the same VDB volume at different positions and scales, just like vegetation.

Resources