← Back to Blog tutorials

Deferred Decals in Unreal Engine 5: A complete workflow guide

By BitSoul Team6/29/2026Updated 8/1/20265 min read107 views
Deferred Decals in Unreal Engine 5: A complete workflow guide

Decals are one of the most underused tools in a game artist's UE5 kit — and one of the most powerful once you understand how the deferred renderer handles them. Unlike painted textures or lightmapped detail, deferred decals sit in a separate render pass that projects onto whatever geometry falls within their volume, which means you can add bullet holes, dirt, wet patches, and war-worn insignia to any surface without touching the base material or rebaking lightmaps.

This guide covers the full Unreal Engine 5 deferred decals workflow from scratch: material creation, blend modes, DBuffer decals for Lumen and Nanite compatibility, layering strategies, and performance budgeting for real-world game levels.

Setting up a Deferred Decal material

In UE5, a decal material is just a standard material with Material Domain set to Deferred Decal. Everything else flows from that single dropdown.

Setting up a Deferred Decal material — illustrated

Create a new Material asset (`M_Decal_BulletHole` is a good naming convention). In Material Domain, choose Deferred Decal. In Blend Mode, choose Translucent — this is the gateway setting; the actual decal blend logic is controlled separately by Decal Blend Mode lower in the Details panel.

Decal Blend Mode options

UE5 exposes six blend modes for decals:

| Blend Mode | Channels written | Typical use |
|---|---|---|
| Translucent | Base Color + Opacity | Simple colour stickers |
| Stain | Base Color (darkening only) | Wet spots, oil stains |
| Normal | Normal map only | Cracks, dents, chip detail |
| Emissive | Emissive only | Bullet sparks, energy trails |
| DBuffer Translucent | Color + Normal + R/M/S | Lumen + Nanite compatible |
| DBuffer Normal | Normal only | Nanite-safe normal detail |

For most production decals — bullet holes, mud splats, blood — you want DBuffer Translucent. DBuffer decals write into a pre-lighting buffer that Lumen and Nanite can read correctly. Non-DBuffer decals are applied post-GBuffer and break under Lumen reflection captures.

To enable the DBuffer, open Project Settings → Engine → Rendering and ensure DBuffer Decals is checked. Without this, DBuffer materials silently fall back to Translucent with wrong shading.

Building the material graph

A minimal DBuffer decal for a bullet hole needs:

```
TextureObject → Texture Sample → Base Color
TextureObject → Texture Sample → Normal (TangentSpace)
TextureObject → Texture Sample (R channel) → Roughness
Constant → Opacity (driven by Texture Sample alpha or a separate mask)
```

Channel-pack your Roughness + Metallic + AO into a single ORM texture to cut texture samples. Use the alpha channel of your Base Color texture as the opacity mask — this keeps the decal tight to its painted shape rather than bleeding across the entire decal actor bounds.

Set texture compression correctly:
- Base Color: `BC7` (or `DXT5` with alpha)
- Normal: `BC5` (two-channel, renormalized in-engine)
- ORM: `BC4` per channel, or pack into `BC7`

Blend modes, layering, and sort priority

Blend modes, layering, and sort priority — illustrated

Decals render in order of their Sort Priority value — lower numbers render first (underneath). This lets you layer decals believably:

  1. Base dirt layer — large, low-opacity mud/dust decal, priority `0`
  2. Damage layer — scorch marks, cracks, priority `10`
  3. Detail layer — bullet holes, blood drops, priority `20`

Keep sort priority values spaced out (increments of 10) so you can insert new layers without renumbering everything.

Fade and distance culling

Decal Actors have a Fade Screen Size property in the Details panel. Set it to `0.005–0.02` depending on the decal's world size. Below this screen coverage threshold UE5 fades the decal out and removes it from the draw call. Without this, small decals like bullet holes remain in the render budget even when the player is 200 m away.

For a 50 cm bullet-hole decal in a mid-budget level, a fade screen size of `0.01` is a reasonable starting point. Profile with the Shader Complexity view in the Viewport to check overdraw hotspots.

Nanite and Lumen compatibility checklist

Performance budgeting for decals

Decals are cheap individually but expensive in aggregate. Each unique decal material is a draw call, and each overlapping decal in screen space costs fillrate.

Rules of thumb for a 60 fps PC title:
- Keep unique decal materials under 30 per scene
- Limit decal overlap depth to 4–6 layers maximum in any screen region
- Use r.DBuffer 1 in the console to toggle the DBuffer on/off and measure GPU cost in milliseconds with `stat GPU`
- Pool decal actors using Unreal's `DecalComponent` spawning at runtime rather than placing hundreds of static actors

For dynamic gameplay decals (blood, bullet impacts at runtime), use `UGameplayStatics::SpawnDecalAtLocation` or `SpawnDecalAttached` with a Decal Lifetime and Fade Duration so expired decals are destroyed automatically:

```cpp
UGameplayStatics::SpawnDecalAtLocation(
this,
BulletHoleDecal, // UMaterialInterface*
FVector(20.f, 20.f, 1.f), // decal size
HitLocation,
HitRotation,
10.f // lifetime seconds
);
```

Pair this with a MaxInstances cap in Blueprint to prevent decal accumulation during heavy firefights from blowing your fillrate budget.

Free 3D assets from BitSoul's marketplace make excellent test geometry for decal work — drop a GLB environment pack into UE5, enable DBuffer, and you have a realistic testbed in minutes.

Putting it together: a production decal workflow

  1. Create the decal texture set in Blender or Substance (Base Color + alpha, Normal BC5, ORM)
  2. Import into UE5, set compression per channel
  3. Create `M_Decal_*` with Domain = Deferred Decal, Blend Mode = DBuffer Translucent
  4. Enable DBuffer in Project Settings
  5. Place Decal Actor, set box extents to tightly wrap the decal footprint
  6. Assign Sort Priority by layer role
  7. Set Fade Screen Size to `0.01`
  8. Profile with Shader Complexity and `stat GPU` — target under 0.5 ms decal cost for a busy scene

Decal-driven surface detail is one of the fastest ways to add visual richness to environments without authoring new geometry or rebaking lightmaps. Pair them with BitSoul's free GLB environment assets and you can dress a level in an afternoon.

---

*This post is part of the Ultimate Guide to Free 3D Game Assets — BitSoul's complete reference for formats, texturing, rigging, optimization, and engine integration.*

Tags: unreal tutorials texturing optimization game-assets pbr

Skip the modelling — download it instead

A free BitSoul account gets you 2 game-ready models every month plus 25 AI Engine credits to generate one of your own, no card required. Clean topology, PBR textures, and GLB downloads that drop straight into Unreal, Unity, Godot or Blender — plus OBJ and 3D-printable STL export.

Create a free account → Browse 846 models