The 3D Handbook
Key term

Terrain layers and splat maps

How terrain materials such as grass, rock and mud are painted onto a landscape, with weight maps (splat maps) that store how much of each layer covers every point, or index maps that store which layers do.

terraintexturingenvironment-artunrealunitygodot

A terrain layer is one tiling material, such as grass, dirt, rock or snow, that can be painted onto a terrain. A splat map (Unity calls it the control texture, Unreal a weight map) records how much of each layer covers each point. Unity's manual defines the layer as "an Asset that defines a Terrain's surface qualities", reusable across terrain tiles (Unity Manual: Terrain Layers).

Splat maps let you paint a 4 km terrain with a brush while each material still tiles sharply up close.

#How weight blending works

Each layer gets a weight between 0 and 1 at every texel of the map. Unreal's weight blending "Assigns a value between 0 and 1.0 to each layer of the material, which corresponds to a percentage value", and its paint tools make sure weights never add up to more than 1.0 (Unreal Engine Documentation: Landscape Materials). The shader samples every active layer and mixes them by weight.

A texture has four channels (RGBA), so four weights fit in one texture. Unity's limits come in the same groups of four: in URP and the built-in pipeline, four layers per texture pass, with each extra pass adding rendering time; HDRP renders up to eight layers per tile in a single pass, and areas painted with a ninth "appear black" (Unity Manual: Terrain Layers).

Left, two RGBA control textures each fanning out into four colour-coded layers (grass, dirt, rock, snow, sand, moss, gravel, mud). Right, a single 32-bit value per pixel split into fields of 5, 5, 8, 4, 3, 4 and 3 bits, with the base ID, overlay ID and blend fields highlighted.
Weight splat maps store one channel per layer. Index maps store which two layers are present and how to blend them. Memory figures computed for this page.Diagram by the handbook author; bit layout from the Terrain3D documentation

#Index maps instead of weights

Some engines store layer IDs instead of weights. Terrain3D for Godot uses a 32-bit control map per pixel: 5 bits for a base texture ID (0–31), 5 for an overlay ID, 8 for the blend between them, plus UV rotation and scale and flags for holes and navigation (Terrain3D documentation: Control Map Format). Its documentation credits a Witcher 3 presentation for one of its ideas, packing 0–1 values into a 3-bit index (Terrain3D documentation: Control Map Format). CD Projekt RED's GDC 2014 talk on REDengine 3 terrain, by Marcin Gollent, argued that "By moving away from the conventional terrain material layers and linear material blends, visual quality can be improved" (GDC 2014: Landscape Creation and Rendering in REDengine…).

The trade-off shows in a Terrain3D design discussion that compares its blending with a REDengine slide: with index maps, the red and green channels "are both index maps and therefore cannot gradually blend their own indices", which is why blend weights and noise at the edges matter (Terrain3D on GitHub: Texture Blending and Indices).

#Natural-looking blends

A straight weight blend makes grass fade into rock like a crossfade. Height-based blending looks closer to real ground: stones poke through first, grass fills the gaps. Unreal's LB Height Blend is "the same as LB Weight Blend, but also adds detail to the transition between layers based on a height map" (Unreal Engine Documentation: Landscape Materials). See height blending. Unity's terrain layers carry a mask map whose blue channel stores height for the same purpose (R metallic, G ambient occlusion, B height, A smoothness) (Unity Manual: Terrain Layers); see channel packing.

#Performance tips

Related: terrain and landscapes, heightfield erosion, tileable materials, vertex painting and blending.

#Further reading and watching

References

  1. Unity Technologies · Terrain Layers · Unity Manual, 2026 · docs · accessed 2026-10-21
  2. Epic Games · Landscape Materials · Unreal Engine Documentation, 2026 · docs · accessed 2026-10-21
  3. Terrain3D contributors (Tokisan Games) · Control Map Format · Terrain3D documentation, 2026 · docs · accessed 2026-10-21
  4. Marcin Gollent (CD Projekt RED) · Landscape Creation and Rendering in REDengine 3 · GDC 2014 (GDC Vault), 2014 · talk · accessed 2026-10-21
  5. outobugi and TokisanGames · Texture Blending and Indices (discussion #64) · Terrain3D on GitHub, 2023 · forum · accessed 2026-10-21

Last updated 2026-10-22