book/10-post-processing-and-fullscreen.md

10. Postprocessing and Fullscreen Pass

We summarize how to design/implement URP post-processing (Volume) and full-screen pass patterns based on RenderGraph.

10. Postprocessing and Fullscreen Pass Pattern (URP)

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:

  1. Parameter layer (Volume): Where the values come from and how they are blended
  2. Pass Layer (Renderer Feature/Pass): When it runs and what textures it reads/writes.
  3. 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

  1. Input (usually a camera color texture)
  2. Output (camera color or temporary texture)
  3. 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:

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:

10.5 RenderGraph-based full-screen pass design pattern

Full-screen passes in RenderGraph typically have a “Ping-Pong” structure.

  1. Set the camera color (handle) as the source.
  2. After making a temporary texture (handle) as the destination
  3. Write to destination with full screen triangle/blit
  4. 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:

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