Detail maps and macro variation
Layering a small, highly tiled detail texture for close-up sharpness and a large, low-frequency macro texture for long-range variation on top of a base material; how to blend normals correctly, how to fade by distance, and what it costs.
A detail map is a small texture tiled many times over a surface to add fine detail up close. A macro texture does the opposite: a large, low-frequency texture stretched across many tiles to break up repetition at a distance. Together they let one base material hold up from 30 cm to 300 m without a huge texture.
Epic describes detail texturing as layering "a highly repeated diffuse and normal texture over the object's original diffuse and normal textures" to stop a material "looking pixelated when it is viewed very closely" (Unreal Engine documentation: Adding Detail Textures to Unreal Engine…).
#Three scales of texture
Think of a surface as having three bands of detail, like primary, secondary and tertiary forms:
| Layer | Typical tiling | Job |
|---|---|---|
| Macro | Once every 10 to 100 m | Large colour and value shifts, so the eye stops spotting the tile |
| Base | At your project's texel density | The material itself: stone, plaster, metal |
| Detail | 5 to 20 times the base tiling | Pores, grain, scratches, tiny bumps for close-up views |
Treat the numbers as a starting point. Pick them by testing at your closest and furthest normal camera distances.
#Detail maps
A detail map usually contains a normal map and sometimes roughness and a greyscale colour variation. It does not replace the base material; it adds high-frequency information to it.
Epic's reasons are practical: base textures are usually authored for moderate distances, so they "may not hold up to close scrutiny", and a detail texture sharpens close views without a larger base texture (Unreal Engine documentation: Adding Detail Textures to Unreal Engine…). It only works "to a certain point": if the camera can get unreasonably close, a detail map is no longer enough (Unreal Engine documentation: Adding Detail Textures to Unreal Engine…).
#Engine support
- Unreal: the DetailTexturing material function takes Scale, Diffuse, DetailDiffuse, DiffuseIntensity, Normal, DetailNormal and NormalIntensity inputs (Unreal Engine documentation: Adding Detail Textures to Unreal Engine…).
- Unity HDRP: the Lit shader's detail map packs four channels: red is "Desaturated albedo", green "Normal Y", blue "Smoothness" and alpha "Normal X" (Unity documentation: Mask and detail maps). The blue channel of the mask map is a "Detail mask" that controls where the detail appears (Unity documentation: Mask and detail maps).
- Godot: StandardMaterial3D has a Detail section: "a second texture that gets mixed over the surface of the object based on" a detail mask and the detail albedo's alpha (Godot Engine source on GitHub: BaseMaterial3D). It has four blend modes and can use UV or UV2 (Godot Engine documentation: Standard Material 3D and ORM Material 3D; Godot Engine source on GitHub: BaseMaterial3D).
#Blending detail normals correctly
Combining two normal maps is not the same as combining two colours. A normal map stores directions, so treating its channels like paint gives wrong lighting. Colin Barré-Brisebois and Stephen Hill compared the common methods in their 2012 article "Blending in Detail" (Self Shadow: Blending in Detail):
- Linear (add and renormalise) is similar to averaging and "flattens" both the base and the detail.
- Overlay looks better than linear but is still incorrect, because each channel is processed separately.
- Whiteout and UDN combine the slopes; UDN is cheaper but loses some detail over flatter areas.
- Reoriented Normal Mapping (RNM), which they introduced, rotates the detail normal to follow the base normal, so neither map is flattened.
The cost differences are small. In their table, RNM takes 8 ALU instructions (6 without normalisation), against 5 for linear and UDN and 9 for overlay (Self Shadow: Blending in Detail). A correct blend adds very little to the frame time.
In the engines:
- Unreal: the BlendAngleCorrectedNormals node takes a Base Normal and an Additional Normal (World of Level Design: UE5: How to Blend or Combine 2 Normal Map…). Jen Abbott calls it "the recommended method in Unreal Engine for combining normal maps", warning that simply adding normals "can create incorrect lighting and shading artifacts" (ArtStation blog: How do you blend two normal maps in Unreal…).
- Unity Shader Graph: the Normal Blend node has a Default mode that adds the x and y components and multiplies z, and a Reoriented mode that "blends the two normal maps using a mathematically correct method" (Unity documentation: Normal Blend Node).
- Godot: the StandardMaterial3D detail layer handles the blend for you (Godot Engine source on GitHub: BaseMaterial3D); in a custom shader you write the blend yourself.
To control strength, scale the detail normal's red and green channels before blending (World of Level Design: UE5: How to Blend or Combine 2 Normal Map…).
#Macro variation
On a large surface, even a good tiling texture forms a visible grid when seen from far away. Macro variation multiplies a large, soft, greyscale pattern over the material to break it up.
Jay Versluis shows a simple version for Unreal landscapes. He samples a tileable plaster-like texture (T_MacroVariation from the Starter Content) at three different scales, combines them into one overlay, and multiplies it onto the grass (versluis.com: How to use Macro Variations for Unreal Engine…). He uses only one colour channel, because the image "merely acts as variation breakup", and halves the overlay's strength because the default "would be too harsh" (versluis.com: How to use Macro Variations for Unreal Engine…).
Tips for macro textures:
- Use only values, not hue, at first. Gentle light and dark patches are enough.
- Combine two or three scales with non-matching ratios (for example 1, 0.37 and 0.11) so their repeats rarely line up.
- Drive other channels too. A macro mask can raise roughness or blend in a second base material.
- World-align it on modular meshes so variation continues across pieces; see triplanar and world-aligned mapping.
#Distance blending
Detail maps help up close and hurt at a distance, where their high-frequency pattern shimmers or turns to grey noise. Macro textures do the reverse. For this reason many materials fade between them by camera distance.
Epic's landscape documentation describes "transitioning from detail textures to larger macro textures depending on the distance the layer is being viewed from" (Unreal Engine documentation: Landscape Materials in Unreal Engine), and its detail texture page suggests distance-based blending on terrain to reduce visible tiling (Unreal Engine documentation: Adding Detail Textures to Unreal Engine…). A common setup:
- Compute the distance from the camera to the pixel.
- Turn it into a 0 to 1 mask with a start distance and a fade length.
- Lerp detail strength down and macro strength up with that mask.
The same mask can switch the base material's tiling, sampling it twice at two scales and fading between them, which is a cheap way to make terrain hold up both underfoot and on distant hills.
#Cost
Each layer adds texture samples. Epic notes that detail texturing "can add two or more extra texture lookups", which may cause performance or memory issues, especially on mobile (Unreal Engine documentation: Adding Detail Textures to Unreal Engine…). Ways to keep it lean:
- Pack channels. HDRP's four-channel detail map holds albedo, normal X and Y, and smoothness in one texture (Unity documentation: Mask and detail maps).
- Share the detail texture across many materials (one generic "stone grain" detail for all rock and concrete).
- Mask it. Apply detail only where needed with a detail mask (Unity documentation: Mask and detail maps; Godot Engine source on GitHub: BaseMaterial3D).
- Turn it off at a distance or on low settings with a static switch or quality switch.
#Further reading and watching
References
- · Adding Detail Textures to Unreal Engine Materials · Unreal Engine documentation · docs · accessed 2026-10-21
- · Mask and detail maps (HDRP 17) · Unity documentation · docs · accessed 2026-10-21
- · BaseMaterial3D (class reference) · Godot Engine source on GitHub · docs · accessed 2026-10-21
- · Standard Material 3D and ORM Material 3D · Godot Engine documentation (source on GitHub) · docs · accessed 2026-10-21
- · SciFi Bunk: Material Instancing · Unreal Engine 4.27 documentation · docs · accessed 2026-10-21
- · Blending in Detail · Self Shadow, 2012 · article · accessed 2026-10-21
- · UE5: How to Blend or Combine 2 Normal Map Textures Together Using the Material Editor · World of Level Design · article · accessed 2026-10-21
- · How do you blend two normal maps in Unreal Engine 5.7? · ArtStation blog, 2026 · article · accessed 2026-10-21
- · Normal Blend Node (Shader Graph 17) · Unity documentation · docs · accessed 2026-10-21
- · How to use Macro Variations for Unreal Engine Landscape Materials · versluis.com, 2023 · article · accessed 2026-10-21
- · Landscape Materials in Unreal Engine · Unreal Engine documentation · docs · accessed 2026-10-21
Also consulted
- · Advanced Detail Mapping - Shader Graph Basics - Episode 14 · YouTube · video · accessed 2026-10-21
- · Blending Normal Maps - Shader Graph Basics - Episode 12 · YouTube · video · accessed 2026-10-21
Pages that link here
- How to use this handbook Guide
- Vertex colours Key term
- Modular kits Topic
- Polygon and triangle budgets Topic
- Instancing Key term
- Primary, secondary and tertiary forms Topic
- Macro normals Key term
- UV mapping Topic
- Texel density Topic
- UDIMs Key term
- Normal map Key term
- Ways to texture an environment Overview
- Tileable materials Topic
- Procedural materials (node-based) Topic
- Height blending Key term
- Triplanar and world-aligned mapping Topic
- Breaking up tiling Topic
- Normal map blending Key term
- Master materials and instances Topic
- Material layers and Substrate Topic
- Terrain and landscapes Topic
- Terrain layers and splat maps Key term
- Exercise: a modular room Exercise
Last updated 2026-10-22