The 3D Handbook
Key term

Texture arrays

A stack of same-size, same-format textures that a shader picks from by index; how arrays differ from atlases and 3D textures, why terrain and layered materials use them, the rules and limits (custom shaders, streaming), and how to make one in Unreal, Unity and Godot.

shaderstexturingterrainengines

A texture array is a stack of 2D textures that share one size and format, stored as a single texture object. The shader chooses a layer, or slice, by number. Unity defines it as "a collection of 2D textures with the same size, format, and flags", where "you can use an index to sample each slice" (Unity Manual: Introduction to texture arrays).

For artists, arrays matter in two places: terrain and other layered materials that need many surface types in one shader, and any custom shader that picks a texture per object or per pixel. You will rarely make one by hand, but you will often author the textures that go into one, and the rules are strict.

Left, a square divided into four tiles labelled grass, rock, mud and snow, captioned "Atlas: one 2D texture; UVs pick a region; mips blend neighbours at the borders". Right, four same-size squares stacked with an offset like cards, labelled slice 0 to slice 3, captioned "Array: same size, same format; shader picks a slice by index; no blending between slices".
An atlas puts images side by side in one texture. An array stacks them, and each slice keeps its own full UV space and mip chain.Diagram by the handbook author

#Why use one

  • Many surfaces, one material. Unity calls arrays "an efficient way to access many textures of the same size and format" and singles out "custom terrain rendering systems" as a typical use (Unity Manual: Introduction to texture arrays). A terrain shader that blends grass, rock, mud and snow can read all four from one array, choosing slices from a splat map or index map (see terrain layers and splat maps).
  • Clean tiling. Each slice is a complete texture with its own 0–1 UV space, so it can repeat like any tileable material. A region of an atlas cannot, because normal wrapping repeats the whole atlas.
  • No bleeding between layers. Godot notes that an array is like a 3D texture "but without interpolation between layers" (Godot documentation: Importing images), so filtering and mips never mix the rock slice into the grass slice.

#Format rules

Every slice must match. Unity requires "the same size, format and flags" (Unity Manual: 2D texture arrays), so:

  • All slices share one resolution. A 4K cliff and a 1K pebble texture cannot share an array; scale them to one size first.
  • All slices share one compression format and colour space. Keep base colours (sRGB) and normal maps (linear, BC5) in separate arrays (see colour space: sRGB and linear).
  • Slices are chosen by number, so keep a written order (slice 0 grass, slice 1 rock…) that the material and the artists agree on.

#Costs and limits

#In different tools

#Further reading and watching

Related: shaders for artists, master materials and instances, terrain and landscapes, vertex painting and blending, texture atlases.

References

  1. Unity Technologies · Introduction to texture arrays · Unity Manual (6000.2) · docs · accessed 2026-10-21
  2. Godot Engine contributors · Importing images (documentation source) · Godot documentation (GitHub) · docs · accessed 2026-10-21
  3. Stephane Etienne (High Moon Studios / Activision) · Large Scale Terrain Rendering in Call of Duty (Advances in Real-Time Rendering 2023) · SIGGRAPH 2023 Advances in Real-Time Rendering in Games, 2023 · talk · accessed 2026-10-21
  4. Unity Technologies · 2D texture arrays · Unity Manual (6000.2) · docs · accessed 2026-10-21
  5. Unity Technologies · Introduction to mipmap streaming · Unity Manual (6000.2) · docs · accessed 2026-10-21
  6. Epic Games · UTexture2DArray (API reference) · Unreal Engine documentation · docs · accessed 2026-10-21

Last updated 2026-10-22