UE5 Deferred Rendering Pipeline

Hybrid: Deferred (Opaque) + Forward (Translucent)

What "Deferred Shading" Means
Deferred
Opaque → G-Buffer
Forward
Translucent
Both/Frame
Composited
Distance Fields
SDF per mesh
Bounds
Box/sphere
Nanite
Cluster hierarchy
Shaders
Compile materials
RUNTIME (Per Frame)
Pre-Culling Updates
Animation
Bone transforms
LOD
Screen size
Bounds
World matrix
Particles
GPU sim
Frustum
Bounds vs 6 planes
Occlusion
HZB / software
⚠️ WPO moves verts AFTER culling — extend bounds
Traditional
Vertex → Skinning → WPO
Nanite
GPU cull → SW raster
Early Z / Z-Prepass
Depth buffer • Hi-Z • Opaque + Masked
DEFERRED PIPELINE
G-Buffer Render Targets
GBufferA
Normal (RGB)
GBufferB
M/S/R + ShadingID
GBufferC
BaseColor + AO
GBufferD
Custom Data
SceneColor: Unlit + Emissive → Lumen GI → Bloom
ShadingModelID (GBufferB.A) → BRDF Selection
Unlit=0
DefaultLit=1
Subsurface=2
ClearCoat=4
Hair=7
Cloth=8
Per-shading-model interpretation of RGBA
ClearCoat: R=coat, G=roughness | Hair: R=backlit | Cloth: R=fuzz, GBA=color
Shadows
Shadow Maps
VSM (UE5)
RT / DF
AO
SSAO
DFAO
Lumen AO
Lighting
Direct
Skylight
Lumen GI
Per-pixel: ShadingModelID → BRDF → shadows + AO + GI → SceneColor
SSR
Ray march
Lumen
Surface cache
RT
Hardware
Captures
Cubemaps
FORWARD PIPELINE
Blend Modes
Translucent
Additive
Modulate
Use Cases
Glass/Water
Particles
World UI
Atmosphere
Vol Fog
Sky/Atmos
Before DOF = affected by blur | After DOF = sharp
POST-PROCESS
Motion BlurDOFBloomExposureTonemapColor Grade
Bloom: pixels > threshold get blurred = emissive glow
TSR
Temporal + upscale
TAA
Temporal
FXAA
Spatial
UMGSlateHUDDebug
⚠️ No AA, Bloom, DOF, Motion Blur
RGBA pixels ready
OUTPUT
Back Buffer
GPU writes
Swap
2x/3x buffer
Front
Display reads
VSync ON: no tear, +latency
VSync OFF: tear, low latency
G/FreeSync: best of both
Monitor → Photons → Eyes
60Hz=16.6ms | 144Hz=6.9ms | 240Hz=4.2ms
Material Quick Reference
OpaqueDeferred → Stage 5
TranslucentForward → Stage 8
Emissive5 → Lumen → 9 Bloom
Screen UIStage 11 (no AA)