The 3D Handbook
Topic

Breaking up tiling

Why tileable materials form visible grids, how to measure the problem, and the full toolbox for hiding it, from authoring choices to shader techniques (random tile offsets, stochastic texturing, macro variation) and hand-placed breakup, with costs and shipped-game examples.

texturingtileablesshadersmaterialsenvironment-art

A tileable material repeats, and repetition shows. Step back from a large wall or a field of grass and the eye picks out a grid of identical patches: the same dark stone, the same crack, every two metres. Breaking up tiling (often called anti-tiling) is the set of techniques that hide that grid while keeping the memory savings that made you tile in the first place.

No single technique solves it. Studios combine several: careful authoring, variation in the shader, and breakup placed by hand in the level. This page is the overview; several techniques have their own pages, linked below.

#Why tiling shows

Two things make repetition visible.

  • Hot spots. A distinctive feature inside the tile (a dark stone, a bright pebble, a stain) repeats at exactly the same spacing. The eye is very good at finding regular patterns.
  • Low-frequency changes. Real surfaces vary over metres: a wall is dirtier near the ground, a lawn is greener in one corner. A tile that is uniform over its whole area cannot show that, so a large surface looks flat and printed.

Inigo Quilez's article on the problem offers shader techniques that hide the repetition at runtime (iquilezles.org: Texture repetition). Unity describes the usual alternatives as larger textures or covering the repetition with extra objects (Unity Blog: Procedural Stochastic Texturing in Unity).

#Worked example: counting visible repeats

A cobblestone material covers 2 × 2 m. The courtyard is 40 × 40 m, so the material repeats 20 × 20 = 400 times.

Now stand 20 m from a wall with a 90° horizontal field of view. The visible width is 2 × 20 × tan(45°) = 40 m, so the screen shows 20 repeats side by side, enough for the eye to pick out a grid.

Hiding the repetition with a larger texture is expensive. Keeping the same texel density of 512 px/m, a 4 × 4 m tile needs a 2048 px texture instead of 1024 px: four times the pixels, so roughly four times the memory, to halve the number of repeats on screen. Quilez's cheapest shader method costs two texture samples instead of one and keeps the 1024 px texture (iquilezles.org: Texture repetition). Every technique below trades shader work against memory in a similar way.

Four square panels of the same tiling pattern with a dark blob in each tile. Plain tiling shows the blobs in a perfect grid. Random tile offset shows blobs at random positions and angles. Macro variation shows the grid under a large soft brown and white gradient. Placed breakup shows the grid with an orange vertex-painted band along the bottom, a dark decal and a crack.
The same tile, four treatments. Each hides a different part of the problem; most environments combine them.Diagram by the handbook author

#1. Tile authoring

The cheapest fix is in the texture. See tileable materials for the full workflow; in short:

  • Spread features evenly so no single element stands out.
  • Keep the tile plain when it will cover large areas, and put distinctive detail into decals and trims you place by hand.
  • Make variants that blend. Jared Sobotta's brick generator for The Last of Us Part I tiles at 6×20, so that "my one damaged state brick blends with any of the undamaged variations" (ArtStation: Brick and Concrete Generator). Damaged and clean versions can be mixed freely without seams.

#2. Randomising the tile in the shader

These techniques change which part of the texture each patch of the surface shows.

Random offset and rotation per tile. Quilez's first technique gives each tile a random offset and orientation, then blends near the borders. It costs four texture samples and adds some blur at the borders (iquilezles.org: Texture repetition). Because the offsets jump at tile edges, he warns that "the derivatives will have huge jumps at the tile borders and mipmapping will break apart", and fixes it by computing the gradients from the original UVs (iquilezles.org: Texture repetition).

Smooth Voronoi blending. His second technique blends randomly offset copies around scattered points, which looks more organic but samples the texture nine times, which "might stress the memory bus too much" (iquilezles.org: Texture repetition).

Index-driven variation. The third uses a low-frequency pattern to pick between a few offset versions of the texture, at only two samples plus one cheap lookup (iquilezles.org: Texture repetition).

Stochastic texturing. Unity's research plugin, based on work by Eric Heitz and Fabrice Neyret and by Thomas Deliot and Heitz, generates an effectively endless texture with the input's look, needing "only three texture samples per fragment" plus a small lookup table and two precomputed textures (Unity Blog: Procedural Stochastic Texturing in Unity). It "is only compatible with tileable stochastic and near-stochastic textures": rust, moss, bark, things without precise geometric shapes (Unity Blog: Procedural Stochastic Texturing in Unity). Unity labelled it a research prototype, "not under active development" (Unity Blog: Procedural Stochastic Texturing in Unity).

#3. Variation at a larger scale

These techniques leave the tile alone and change the surface around it.

  • Macro variation. A large, low-resolution texture multiplied over the tileable adds the slow changes in colour and roughness that a small tile lacks. The detail maps page covers macro maps and distance blending in depth.
  • Second material layers. Ready at Dawn's runtime layering on The Order: 1886 blended up to four material layers using alpha values usually stored in vertex colours, and the authors write: "Typically this functionality is used on environment materials to add unique variation to tiled textures" (Neubelt & Dawn) 2013). See material layers and Substrate.
  • World-space masks. Matthew Trevelyan Johns describes Naughty Dog shaders that can use "an objects height within the world, or its orientation" to drive blends (80 Level: Building Environments for Uncharted: The Lost…): moss on top faces, dirt near the ground, stains under ledges.
  • Triplanar and world-aligned mapping, which at least keeps the pattern continuous across separate meshes, and lets you rotate or scale projections per layer.

#4. Breakup in the level

The most convincing breakup is placed by hand, because it follows the logic of the place.

#Comparing the options

Technique Extra cost Best for Weakness
Better authoring None at runtime Every tileable Limited effect on large areas
Random tile offset (Quilez 1) 4 samples (iquilezles.org) Noisy natural surfaces Blur at borders, mip care needed
Voronoi blend (Quilez 2) 9 samples (iquilezles.org) High-quality organic surfaces Bandwidth
Index variation (Quilez 3) 2 samples + lookup (iquilezles.org) Cheap breakup Needs a well-filtered index pattern
Stochastic texturing 3 samples + lookup (Unity Blog) Rust, moss, bark Stochastic textures only
Macro and layer variation 1 or more extra layers Large walls, terrain Shader cost per layer
Vertex paint, decals, props Artist time, some draw cost Anywhere the story matters Does not scale to whole worlds

#Further reading and watching

The talk Jared Sobotta links from his brick breakdown; watch it alongside the Tommy's Dam example above. Watch on YouTube

References

  1. Inigo Quilez · Texture repetition · iquilezles.org · article · accessed 2026-10-21
  2. Thomas Deliot (Unity Technologies) · Procedural Stochastic Texturing in Unity · Unity Blog, 2019 · article · accessed 2026-10-21
  3. Jared Sobotta · Brick and Concrete Generator · ArtStation, 2023 · web · accessed 2026-10-21
  4. David Neubelt and Matt Pettineo (Ready at Dawn) · Crafting a Next-Gen Material Pipeline for The Order: 1886 · SIGGRAPH 2013 Physically Based Shading course notes, 2013 · paper · accessed 2026-10-21
  5. Matthew Trevelyan Johns (interviewed by Kirill Tokarev) · Building Environments for Uncharted: The Lost Legacy · 80 Level, 2017 · article · accessed 2026-10-21

Also consulted

Last updated 2026-10-22