The 3D Handbook
Topic

Fog and atmosphere

How depth fog, height fog, volumetric fog and physically based sky systems work in Unreal and Godot, how to use them for depth, mood and readability, what they cost, and how Silent Hill turned a hardware limit into atmosphere.

lightingfogatmosphereskyrendering

Fog in a game engine is a simulation of light being absorbed and scattered by particles in the air, such as water droplets, dust and smoke; Unreal's fog settings describe this, with particle reflectiveness and extinction controls (Unreal Engine Documentation: Exponential Height Fog). Atmosphere systems do the same at planetary scale, giving you blue skies, orange sunsets and distant mountains that fade to blue. Simple height fog costs about as much as two layers of constant fog (Unreal Engine Documentation: Exponential Height Fog), so it is a cheap way to add depth and mood, and an easy one to overdo.

This page covers the main kinds of fog, the physically based sky systems in current engines, and how artists use them. For the light itself, see real-time lighting; for the final image, see exposure and post-processing.

#Why artists use fog

  • Depth. Objects that fade with distance read as far away. Painters call this aerial perspective; see composition and value.
  • Mood. Low mist in a valley, smoke in a tavern, dust in a sunbeam.
  • Readability. Fog separates layers of a scene, so a silhouette stands out against a paler background. See silhouette and visual hierarchy and readability.
  • Hiding things. Fog can cover the point where the world, or its detail, ends.

#Kinds of fog

#Depth fog and height fog

The simplest fog is a colour blended in by distance. Godot offers two kinds in its Environment resource (Godot Engine documentation: Environment and post-processing):

  • Depth fog "is applied based on the distance from the camera".
  • Height fog "is applied to any objects below (or above) a certain height, regardless of the distance from the camera".
Two views of an arched courtyard with columns. On the left, labelled Depth Fog, the far end of the courtyard fades into grey haze. On the right, labelled Height Fog, a pale layer of fog sits low over the floor while the upper arches stay clear.
Depth fog thickens with distance from the camera (left); height fog fills the space below a set height, near or far (right). Screenshot from Godot.Godot Engine documentation (Juan Linietsky, Ariel Manzur and the Godot community), CC BY 3.0

Unreal's Exponential Height Fog combines the two ideas. It "creates more density in low places of a map and less density in high places" (Unreal Engine Documentation: Exponential Height Fog). Fog Density is "the global density factor, which can be thought of as the fog layer's thickness", and Fog Height Falloff "controls how the density increases as height decreases" (Unreal Engine Documentation: Exponential Height Fog). You can add a second layer with its own density, falloff and height offset (Unreal Engine Documentation: Exponential Height Fog).

A graph of fog density against height from 0 to 400 metres. A solid orange curve with a small falloff thins slowly with height. A dashed black curve with a larger falloff drops close to zero within about 100 metres.
Exponential height fog. A small falloff gives a deep, hazy layer; a large one gives fog that hugs the ground. Curves computed for this page with illustrative values.Diagram by the handbook author

Two settings make height fog look lit rather than painted on:

Cost. Epic says the cost of Exponential Height Fog "is similar to two layers of constant density height fog", and that a far Start Distance can cut the cost by "50% or less", depending on the scene (Unreal Engine Documentation: Exponential Height Fog).

#Volumetric fog

Volumetric fog fills a 3D grid of cells in front of the camera (Godot calls them froxels, frustum voxels) and lights each cell, so fog can be shadowed: sunbeams through a window, a torch glowing in mist.

In Unreal, Volumetric Fog is a toggle on the Exponential Height Fog. Its main controls are Scattering Distribution (0 scatters "equally in all directions"; values near 0.9 scatter towards the light), Albedo (water particles near white, dust darker) and Extinction Scale (Unreal Engine Documentation: Exponential Height Fog). It does not support Start Distance, Fog Max Opacity or Fog Cutoff Distance (Unreal Engine Documentation: Exponential Height Fog).

In Godot 4, volumetric fog "is only supported in the Forward+ renderer" (Godot Engine documentation: Volumetric fog and fog volumes). Anisotropy controls the scattering direction: "Fog and mist scatter light slightly forward, while smoke scatters light equally in all directions" (Godot Engine documentation: Volumetric fog and fog volumes). FogVolume nodes add or subtract fog locally, in ellipsoid, cone, cylinder, box or world shapes (Godot Engine documentation: Volumetric fog and fog volumes).

Two views of a grey room with boxes lit by red, green and blue lights. On the left, labelled Traditional fog, the fog is an even grey haze. On the right, labelled Volumetric fog, the air around each light glows in that light's colour.
Traditional fog does not interact with lighting (left); volumetric fog does, so the red, green and blue lights glow in the air around them (right). Screenshot from Godot.Godot Engine documentation (Juan Linietsky, Ariel Manzur and the Godot community), CC BY 3.0
Two panels of a rectangular fog volume above a brown floor. On the left, labelled No density texture (uniform density), the fog is a smooth even block. On the right, labelled With density texture (NoiseTexture3D), the fog is patchy and cloud-like.
A FogVolume with uniform density (left) and with a procedural 3D noise density texture (right), which breaks the fog into wisps. The documentation's screenshot uses a raised Volume Size project setting to show the high-frequency detail. Screenshot from Godot.Godot Engine documentation (Juan Linietsky, Ariel Manzur and the Godot community), CC BY 3.0

Volumetric fog has limits. In Godot it has "a finite range", moving fog volumes and lights can leave "ghosting" trails from temporal reprojection, and dense fog can cause banding (Godot Engine documentation: Volumetric fog and fog volumes). Keep its Length "as low as possible" for quality (Godot Engine documentation: Volumetric fog and fog volumes). See bit depth and banding for banding.

#Sky and atmosphere systems

Physically based sky systems simulate how sunlight scatters through the air. Unreal's Sky Atmosphere "simulates absorption with Mie scattering and Rayleigh scattering" (Unreal Engine Documentation: Sky Atmosphere Component):

  • Rayleigh scattering comes from tiny particles such as air molecules and makes the sky blue.
  • Mie scattering comes from larger particles such as dust or pollen and gives the bright haze around the sun.

The system provides "an Earth-like atmosphere with time-of-day featuring sunrise and sunset", plus aerial perspective "from ground to sky to outer space" (Unreal Engine Documentation: Sky Atmosphere Component). Sizes are in kilometres: Epic's planetary example uses a ground radius of 6,360 km and an atmosphere height of 100 km, and the default Rayleigh scale height is 8 km (Unreal Engine Documentation: Sky Atmosphere Component). You link it to your sun by enabling Atmosphere Sun Light on the directional light, with index 0 for the sun and 1 for the moon (Unreal Engine Documentation: Sky Atmosphere Component).

To stay fast, "the sky is evaluated in a few lookup tables (LUTs) at low resolution" (Unreal Engine Documentation: Sky Atmosphere Component). Sébastien Hillaire's 2020 paper on a production sky technique describes rendering "the atmosphere of a planet from ground to space views", scaling "from power-efficient mobile platforms up to PCs with high-end GPUs" (Hillaire 2020). Unreal lists mobile support with the condition that it "Requires a skydome mesh with a material that has Is Sky enabled" (Unreal Engine Documentation: Sky Atmosphere Component).

#Fog and other systems

#How to set one up

The steps below set up morning valley mist under a physically based sky in Unreal Engine 5. Godot's equivalents follow.

Unreal Engine 5

  1. Add a Sky Atmosphere and link the sun. Place a Sky Atmosphere actor and enable Atmosphere Sun Light on the directional light, with index 0 for the sun (Unreal Engine Documentation: Sky Atmosphere Component).
  2. Add an Exponential Height Fog. Set Fog Density, "the global density factor, which can be thought of as the fog layer's thickness", and Fog Height Falloff, which "controls how the density increases as height decreases" (Unreal Engine Documentation: Exponential Height Fog). Place the actor at the valley floor so the fog collects low.
  3. Add a second layer for ground mist. Give the second fog layer a higher density, a steeper falloff and its own height offset (Unreal Engine Documentation: Exponential Height Fog), so a thin band hugs the valley while the first layer adds distant haze.
  4. Light the fog. Turn on Directional Inscattering so the fog takes the sun's colour when you look towards it, and use its exponent to set the size of the glow (Unreal Engine Documentation: Exponential Height Fog).
  5. Enable Volumetric Fog for light shafts. Set Scattering Distribution to around 0.2–0.4 for mist (0 scatters "equally in all directions"), keep Albedo near white for water droplets, and adjust Extinction Scale (Unreal Engine Documentation: Exponential Height Fog). Volumetric fog ignores Start Distance, Fog Max Opacity and Fog Cutoff Distance (Unreal Engine Documentation: Exponential Height Fog).
  6. Control the cost. For the non-volumetric fog, a far Start Distance can cut the cost by "50% or less" (Unreal Engine Documentation: Exponential Height Fog). Profile before and after.
  7. Check it at three sun angles. Fog tuned at noon often looks too thick at dusk; adjust density per lighting state if you have time of day.

Godot 4

In the WorldEnvironment's Environment resource, enable depth or height fog, set Sun Scatter for the sun tint and Aerial Perspective for sky-coloured distance fog (Godot Engine documentation: Environment and post-processing). Enable volumetric fog (Forward+ renderer only) for lit fog, set Anisotropy slightly forward for mist, and add FogVolume nodes for local mist in hollows (Godot Engine documentation: Volumetric fog and fog volumes).

#Video tutorials

#Use in recent games

  • The Last of Us Part II (Naughty Dog, 2020). Kovalovs's talk "Volumetric Effects of The Last of Us: Part Two" describes "a new volumetric system that would support different fog environments", built on "a view space frustum voxel grid (froxel grid)" and designed to "seamlessly blend with and tie together the rest of the world", including transparent objects such as glass and particles (ACM SIGGRAPH History Archives: Volumetric Effects of The Last of Us: Part Two).
  • Killzone Shadow Fall (Guerrilla Games, 2013). Guerrilla's postmortem lists "Volumetrics supported on every light", "Implemented as straightforward raymarching" and "Rendered in quarter resolution during lighting pass" (Guerrilla Games: Killzone Shadow Fall Demo Postmortem).
  • Silent Hill (Konami, 1999). Distance fog hid the PlayStation's draw distance and became the game's atmosphere; see the example above (Wikipedia: Silent Hill).
The same place as the opening shot on the artist's page, changed mostly through sky, atmosphere, light and grade. Look at how the haze separates the near, middle and far layers.Brian Mullen, via ArtStation

#Common mistakes

#Further reading and watching

References

  1. Epic Games · Exponential Height Fog · Unreal Engine Documentation, 2026 · docs · accessed 2026-10-21
  2. Wikipedia contributors · Silent Hill (video game) · Wikipedia, 2026 · web · accessed 2026-10-21
  3. Godot Engine contributors · Environment and post-processing · Godot Engine documentation (source on GitHub), 2026 · docs · accessed 2026-10-21
  4. Godot Engine contributors · Volumetric fog and fog volumes · Godot Engine documentation (source on GitHub), 2026 · docs · accessed 2026-10-21
  5. Epic Games · Sky Atmosphere Component · Unreal Engine Documentation, 2026 · docs · accessed 2026-10-21
  6. Sébastien Hillaire · A Scalable and Production Ready Sky and Atmosphere Rendering Technique · Computer Graphics Forum (EGSR 2020), 2020 · paper · accessed 2026-10-21
  7. Ben Cloward · Unreal Sky & Atmosphere - Building Worlds In Unreal - Episode 31 · YouTube · video · accessed 2026-10-22
  8. Generally Playful · Natural Aesthetics in UE5 - Part 7.1 - Atmospherics and Exponential Height Fog · YouTube · video · accessed 2026-10-22
  9. Kovalovs · Volumetric Effects of The Last of Us: Part Two · ACM SIGGRAPH History Archives · talk · accessed 2026-10-22
  10. Michal Valient (Guerrilla Games) · Killzone Shadow Fall Demo Postmortem · Guerrilla Games, 2013 · talk · accessed 2026-10-22

Last updated 2026-10-22