Post Process Pipeline¶
Per-camera / per-volume image effects applied after the main render and before tonemapping. Authored via Post Process Volumes or directly on a Camera component.
Built-in effects (in order)¶
- Auto Exposure (eye adaptation, histogram-based)
- Bloom (FFT or convolution)
- Lens Flares
- Vignette
- Chromatic Aberration
- Depth of Field (Gaussian, Bokeh, Cinematic)
- Motion Blur (per-object + camera)
- Color Grading (ACES / Filmic, LUTs)
- Film Grain
- Local Exposure (UE 5.x — per-region tonemapping)
- Tonemapper (ACES default, custom curves)
Custom Post Process Materials¶
Material Domain = Post Process, then add it in a Post Process Volume's Blendable list.
Example — vignette with screen-space UV:
// Inside the post-process material's emissive output
float2 uv = ScreenAlignedUV;
float d = length(uv - 0.5);
return lerp(SceneTexture(0, uv).rgb, float3(0,0,0), saturate(d * 2 - 0.5));
Blendable Location options:
Before Tonemapping— operates on HDR scene colorAfter Tonemapping— operates on tonemapped LDRReplacing the Tonemapper— full takeoverScene Color Before DOF— early in chainScene Color After DOF— late in chain
Stencil + custom buffers¶
Custom Stencil = a per-pixel ID buffer. Use it to mask post-process effects to specific actors:
- On an actor's mesh component: Render Custom Depth Pass = true, Custom Stencil = 50
- In a Post Process material:
SceneTexture: CustomStencilreturns the ID - Branch on the ID to apply outline / highlight / x-ray
CVars¶
| CVar | Effect |
|---|---|
r.Tonemapper.Quality 5 |
Tonemapper quality |
r.BloomQuality 5 |
Bloom convolution quality |
r.MotionBlurQuality 4 |
Motion blur sample count |
r.DepthOfFieldQuality 4 |
DOF sample budget |
r.SceneColorFormat 4 |
RGBA16f default; 3=RGB10A2 |
Performance¶
- Bloom and DOF dominate post-process cost. Halve internal resolution with
r.Bloom.HalfResolutionFFT 1. - Stack many small Post Process Materials → group into one custom material that does multiple effects in one pass.
- For shipping at scale, profile with
ProfileGPUand look for thePostProcessingblock.
See also¶
- Render Targets — post-process materials read/write the same RT system
- Pixel Streaming — final post-process output is what gets encoded