This chapter covers representative patterns for implementing “entire screen render passes” in URP.
10.1 URP postprocessing structure (volume)
Postprocessing in URP usually controls parameters through the Volume system.
- Effect parameters are stored in the Volume profile within the scene.
- Determine final parameters by camera position/priority/blending
- The URP pipeline reflects this in the latter half and applies it to the screen.
Custom effects include:
- Custom Volume Component + RendererFeature/Pass
- or “Fullscreen Pass with specific timing”
It is often implemented as .
10.1.1 Study direction (important)
To “completely” understand post processing, we need to look at the following three layers in isolation:
- Parameter layer (Volume): Where the values come from and how they are blended
- Pass Layer (Renderer Feature/Pass): When it runs and what textures it reads/writes.
- Shader Layer (HLSL): How to sample and output the input texture
This book focuses on 2 → 3, but connects 1 to a minimum.
10.2 3 Key Elements of Fullscreen Pass
- Input (usually a camera color texture)
- Output (camera color or temporary texture)
- Shader (Material) or Compute
In the RenderGraph environment, the pattern of creating a temporary texture and replacing the result with an activeColor is often used. (For examples, see 04. RenderGraph)
10.3 Easiest Implementation 1: Full Screen Pass Renderer Feature (off-the-shelf feature)
URP provides the Full Screen Pass Renderer Feature, which “applies a full-screen material to a specific Injection Point.”
Advantages:
- Just prepare the shader/material and you can experiment with the function right away
- Requirements (Depth/Normal/Color/Motion, etc.) can be specified through UI
- Easy to check path locations/dependencies in RenderGraph Viewer
Learning points:
- Feel the difference “after opaque/after transparent/before and after post” by changing the injection point.
- Experience the “Depth/Normals texture creation conditions” by changing the requirements
Official documentation:
- Full Screen Pass Renderer Feature: https://docs.unity3d.com/Manual/urp/renderer-features/renderer-feature-full-screen-pass.html
10.4 Easiest implementation 2: Volume-supported custom post (template)
URP provides custom post templates that even include the Volume parameter.
- Menu: Assets > Create > Rendering > URP Post-processing Effect (Renderer Feature with Volume)
Why templates are great:
- Volume parameter blending → pass execution → shader constant transfer flow is visible at once
- Good for comparing RenderGraph paths/Compatibility Mode paths
Official documentation:
- Custom post (Volume supported): https://docs.unity3d.com/Manual/urp/post-processing/custom-post-processing-with-volume.html
10.5 RenderGraph-based full-screen pass design pattern
Full-screen passes in RenderGraph typically have a “Ping-Pong” structure.
- Set the camera color (handle) as the source.
- After making a temporary texture (handle) as the destination
- Write to destination with full screen triangle/blit
- Subsequent passes update destination to see “current camera color”
Key caveats:
- Do not use source and destination as the same texture (undefined behavior)
- Reduce unnecessary Blit/Copy (bandwidth cost)
Related official documents:
- Create RenderGraph pass: https://docs.unity3d.com/Manual/urp/render-graph-write-render-pass.html
- Blit in RenderGraph: https://docs.unity3d.com/Manual/urp/render-graph-blit.html
- Blit optimization: https://docs.unity3d.com/Manual/urp/blit-best-practices.html
10.3 Common use cases
- Outline/edge detection (based on Depth+Normals)
- Bloom/Gaussian blur (downsample chain)
- LUT color grading
- Screen dithering/film grain
Further reading
- Create URP RenderGraph pass: https://docs.unity3d.com/Manual/urp/render-graph-write-render-pass.html