Why Your Terrain Shadows Flicker When You Look Up and Down
In game development, few things break immersion faster than "shimmering" or "crawling" shadows on a landscape. If your terrain shadows appear to clip, jitter, or flicker specifically when you tilt the camera (pitching up or down), you are likely witnessing a conflict between your Directional Light's Shadow Atlas and the Camera Frustum.
1. The Root Cause: Cascaded Shadow Map (CSM) Shifting
Most modern engines (Unity, Unreal, Godot) use Cascaded Shadow Maps. Since a single shadow map cannot cover a whole world with high resolution, the engine splits the camera's view into "cascades." As you look up or down, the camera's frustum changes shape in world space, forcing the shadow cascades to recalculate their boundaries.
The "Crawling" Effect
If the shadow map resolution doesn't align perfectly with world-space texels, the edges of shadows will "snap" to the nearest pixel as the camera moves. This creates a shimmering or flickering effect on the terrain surface.
2. How to Fix Shadow Clipping and Jitter
A. Enable Shadow Stabilization (Texel Snapping)
Most engines have a toggle for "Stable Fit" or "Texel Snapping." This forces the shadow camera to move in increments of exactly one shadow-map texel.
In Unity/URP: Look for "Shadow Cascade" settings and ensure the fit is set to Stable rather than Fit to Scene.
B. Adjust Depth Bias and Normal Bias
If shadows look like they are "leaking" or "clipping" through the terrain (Shadow Acne), you need to adjust the bias.
- Depth Bias: Offsets the shadow depth slightly away from the camera to prevent self-shadowing artifacts.
- Normal Bias: Pushes the shadow map depth inward along the surface normals. This is particularly effective for terrain slopes.
C. Tighten the Near/Far Clip Planes
Shadow precision is spread across the distance between the camera's Near and Far clip planes. If your Far Clip is set to 10,000 but your terrain ends at 1,000, you are wasting shadow map precision, leading to flickering. Keep your shadow distance as tight as possible.
3. Advanced Technique: EVSM and PCF
If standard CSM isn't enough, developers often turn to filtering techniques:
- Percentage Closer Filtering (PCF): Blurs the edges of shadows to hide texel snapping.
- Exponential Variance Shadow Maps (EVSM): Uses mathematical warping to provide smoother transitions between cascades, though it is more GPU-intensive.
4. Summary Troubleshooting Table
| Symptom | Probable Cause | Primary Fix |
|---|---|---|
| Shadows "vibrate" on movement | Unstable CSM Fit | Enable Texel Snapping / Stable Fit |
| Shadows clip through slopes | Low Normal Bias | Increase Normal Bias slightly |
| Shadows disappear at top/bottom | Frustum Culling error | Increase Directional Light "Near Plane" padding |
Conclusion
Terrain shadow flickering is rarely a "bug" and usually a configuration issue with how your engine maps 2D textures to 3D space. By stabilizing your cascades and tightening your clip planes, you can achieve rock-solid shadows that stay put no matter where the player looks.
