The 3D Handbook
Key term

Cascaded shadow maps

Splitting the camera's view into distance bands, each with its own shadow map, so the sun's shadows stay sharp near the player without running out of resolution in the distance.

lightingshadowsrenderingunitygodotunreal

Cascaded shadow maps (CSM) split the camera's view into several distance bands, called cascades, and render a separate shadow map for each. The nearest cascade covers a small area at high detail; the farthest covers a large area at low detail. It is the standard way to draw sun and moon shadows in real time, and the technique that Unreal's shadows and virtual shadow maps replace when enabled (Unreal Engine Documentation: Virtual Shadow Maps).

#Shadow resolution over distance

A shadow map is a depth image rendered from the light; see shadows and virtual shadow maps for the basics. A directional light has to shadow everything from the grass at the player's feet to hills hundreds of metres away. One map stretched over all of it gives the near ground almost no texels. Zhang, Sun and Nyman explain that this perspective aliasing "increases hyperbolically as the object moves near the view plane" (Zhang et al. 2007). Splitting the view lets each slice get its own map.

Epic's animation of the cascades of a directional light. The camera frustum is split so shadows are sharpest near the camera and coarser further away (Epic Developer Community documentation: Shadowing in Unreal Engine); watch how the shadow quality steps down from one slice to the next.Epic Games, Unreal Engine documentation

Godot's directional light defaults to "PSSM with 4 splits" (parallel-split shadow maps, another name for cascades), and its documentation describes it as splitting "the view frustum in 2 or 4 areas" (Godot Engine documentation: 3D lights and shadows). Unity URP exposes Max Distance, Cascade Count and the split distances in its pipeline asset, and notes that more cascades cost performance (Universal Render Pipeline manual: Universal Render Pipeline Asset reference).

A diagram titled Parallel Split Shadow Mapping. A view frustum widens upwards from an eye icon. Horizontal lines mark near, split1, split2, split3 and far/max shadow distance. Four red rectangles, labelled shadow map 1 to 4, each enclose one slice and grow larger with distance.
Godot's diagram of parallel-split shadow maps: the frustum is cut at three split distances and each slice gets its own shadow map, so the small slice near the eye gets as many texels as the large far one.Godot Engine documentation (Juan Linietsky, Ariel Manzur and the Godot community), CC BY 3.0
Two versions of a scene with blue cubes and spheres seen from a low camera. On the left, labelled Orthogonal shadow, the shadows near the camera are blurry and blocky. On the right, labelled PSSM 4 Splits, the same shadows are crisp.
One orthogonal shadow map for the whole range (left) against four PSSM splits (right). With splits, "shadows become more detailed", most visibly close to the camera. Screenshot from Godot.Godot Engine documentation (Juan Linietsky, Ariel Manzur and the Godot community), CC BY 3.0

#Choosing the splits

Where you put the split distances matters as much as how many cascades you use. GPU Gems 3 describes three schemes (Zhang et al. 2007):

  • Uniform: equal-length slices. Simple, but wastes resolution near the camera.
  • Logarithmic: slices that grow geometrically, "designed to produce optimal distribution of perspective aliasing". Its drawback: "the lengths of split parts near the viewer are too small" (Zhang et al. 2007).
  • Practical: a blend of the two, with a weight the authors set to 0.5 by default (Zhang et al. 2007).
Three horizontal bars from 1 to 200 metres, each divided into four cascades. Uniform splits at 50.8, 100.5 and 150.2 metres. Logarithmic splits at 3.8, 14.1 and 53.2 metres. Practical splits with a weight of 0.5 at 27.3, 57.3 and 101.7 metres. The first cascade in each is orange.
Split distances for four cascades between 1 m and 200 m, computed for this page with the three schemes from GPU Gems 3.Diagram by the handbook author

#Common artefacts

Two views of the long shadow of a red beam on a grey floor. In the left view, labelled Blend Splits Disabled, the shadow edge breaks into abrupt steps in the distance. In the right view, labelled Blend Splits Enabled, the edge fades smoothly instead.
A cascade seam along a long shadow, without and with Godot's Blend Splits option. Blending trades a little detail and performance for a smoother handover between cascades. Screenshot from Godot.Godot Engine documentation (Juan Linietsky, Ariel Manzur and the Godot community), CC BY 3.0

#Settings to tune first

  1. Max Distance. Godot says to "Always make sure to set a shadow Max Distance according to what the scene needs" (Godot Engine documentation: 3D lights and shadows). It has the largest effect of any single setting.
  2. The first split. "Default values generally work well, but tweaking the first split a bit is common" (Godot Engine documentation: 3D lights and shadows).
  3. Cascade count. Godot defaults to four (Godot Engine documentation: 3D lights and shadows); Unity notes that more cascades reduce performance (Universal Render Pipeline manual: Universal Render Pipeline Asset reference). Try fewer for small or top-down scenes.
  4. Bias, last, once the distances are right.

Related: real-time lighting, light and shadow, performance and profiling.

#Further reading and watching

References

  1. Epic Games · Virtual Shadow Maps · Unreal Engine Documentation, 2026 · docs · accessed 2026-10-21
  2. Fan Zhang, Hanqiu Sun and Oskari Nyman · Chapter 10. Parallel-Split Shadow Maps on Programmable GPUs · GPU Gems 3 (NVIDIA Developer), 2007 · book · accessed 2026-10-21
  3. Epic Games · Shadowing in Unreal Engine · Epic Developer Community documentation · docs · accessed 2026-10-22
  4. Godot Engine contributors · 3D lights and shadows · Godot Engine documentation (source on GitHub), 2026 · docs · accessed 2026-10-21
  5. Unity Technologies · Universal Render Pipeline Asset reference (URP 17) · Universal Render Pipeline manual, 2026 · docs · accessed 2026-10-21

Last updated 2026-10-22