The 3D Handbook
Key term

Bit depth and banding

How many steps a texture channel can store (8, 16 or 32 bits), why smooth normal and height maps band at 8 bits, how dithering hides it, which file formats keep the precision, and why a terrain heightmap must be 16-bit.

texturingbakingfile-formatsterrain

Bit depth is how many bits a texture uses to store each channel of each pixel. More bits mean more possible values: 8 bits give 256 steps, 16 bits give 65,536, and 32-bit float can store values far above 1. Banding is what you see when a smooth gradient has too few steps: visible stripes, rings or terraces instead of a soft transition.

Adobe's export documentation sums up the problem: "Exporting 8bit textures can lead to banding in gradients", and "This is especially noticeable with Normal and Height maps" (Substance 3D Painter documentation: Export settings).

#When 8 bits is enough

For a base colour, 256 steps per channel are plenty. Painted colour has noise and detail that hide the steps, and engines compress the texture anyway (see texture formats, compression and mipmaps).

Data maps are different. A normal map stores a direction in each channel, mapping −1 to 1 onto 0 to 255, so each step is 2/255, about 0.008. On a large, gently curved surface the baked normals change very slowly across many pixels. At 8 bits the change happens in visible jumps. Glossy reflections make them obvious, because, as Bend Studio's Stefan Groenewoud puts it, "a tight specular lobe amplifies every small normal deviation" (ArtStation blog: Day 24 - Quick - Specular Aliasing). The jumps show up as rings in highlights. A height and displacement maps has the same problem in a different form: a slow slope becomes a staircase.

Top, two grey gradient strips: one with 64 fine steps that reads as smooth, one with 8 coarse steps that shows clear bands. Bottom, a side profile of a terrain slope drawn twice: a smooth dashed line labelled 16-bit, 65,536 steps of 7.8 millimetres, and an orange staircase labelled 8-bit, 256 steps of 2 metres, terraces. A note says the profile is not to scale.
Banding is a gradient with too few steps. In a terrain heightmap the same thing becomes terracing.Diagram by the handbook author

#Worked example: a terrain heightmap

Unreal stores landscape heights "with 16-bit precision", and at the default Z scale of 100 your heights "will be between 256 m and -256 m" (Unreal Engine documentation: Landscape Technical Guide). That is a 512 m range.

  • 16 bits: 512 m ÷ 65,536 steps = 7.8 mm per step. Smooth enough for anything a player will walk on.
  • 8 bits: 512 m ÷ 256 steps = 2 m per step. Every gentle hill becomes a flight of two-metre terraces.

This is why terrain tools export 16-bit heightmaps, and why Unreal's importer lists "16-bit grayscale PNG" and "16-bit grayscale r16" among its formats (Unreal Engine documentation: Landscape Technical Guide). If you must work with an 8-bit source, shrink the height range instead: an 8-bit map over a 10 m range still gives about 4 cm steps.

#Dithering

When the output must be 8-bit, dithering adds a little noise before rounding, so neighbouring pixels round up and down in a mixed pattern instead of in solid bands. Adobe: "Dithering introduces noise which helps to mitigate banding issues while still using 8 bits of information" (Substance 3D Painter documentation: Export settings). Substance Designer applies it automatically when a baker output is saved to an 8-bit file, "to avoid banding in 8bit normal maps", and Substance Painter offers it as an export option for the normal, displacement and height channels (Substance 3D bakers documentation: Is dithering applied to baked textures?).

#File formats and bit depth

Not every format can hold more than 8 bits. Adobe's export table lists TGA, JPEG, BMP and WebP as 8-bit only; PNG and PSD as 8 or 16-bit; TIFF as 8, 16 or 32-bit float; and OpenEXR as 16 or 32-bit float (Substance 3D Painter documentation: Export settings). In engines:

#Further reading and watching

Related: colour space: sRGB and linear, baking, texture file formats, terrain and landscapes.

References

  1. Adobe · Export settings · Substance 3D Painter documentation · docs · accessed 2026-10-21
  2. Stefan Groenewoud (Bend Studio) · Day 24 - Quick - Specular Aliasing · ArtStation blog, 2026 · article · accessed 2026-10-21
  3. Epic Games · Landscape Technical Guide · Unreal Engine documentation · docs · accessed 2026-10-21
  4. Adobe · Is dithering applied to baked textures? · Substance 3D bakers documentation · docs · accessed 2026-10-21
  5. Godot Engine contributors · Importing images (documentation source) · Godot documentation (GitHub) · docs · accessed 2026-10-21
  6. Epic Games · Texture Compression Settings (Unreal Engine 4.27) · Unreal Engine documentation, 2021 · docs · accessed 2026-10-21
  7. Godot Engine contributors · BaseMaterial3D class reference (source) · Godot Engine (GitHub) · docs · accessed 2026-10-21

Last updated 2026-10-22