๐จ Lesson 9.3: Post-Processing with URP Volumes
The same scene can feel like a sunny morning or a horror basement depending entirely on its post-processing โ the image effects layered over the camera after everything is rendered. In URP these are driven by the Volume framework: you drop a Volume, give it a Profile, and stack overrides like Bloom, Color Adjustments, Vignette, and Depth of Field. In this lesson you'll learn to grade a scene and even blend the look as the player moves.
๐ฏ Learning Objectives
By the end of this lesson, you will be able to:
- Enable Post Processing on a URP camera and confirm the pipeline supports it
- Explain the Volume framework: Volumes, Volume Profiles, and overrides
- Tell a Global volume from a Local (bounded) one
- Add and tune the core overrides โ Bloom, Tonemapping, Color Adjustments, Vignette, Depth of Field
- Use priority and blend distance so looks layer and transition smoothly
Estimated Time: 40 minutes ยท Prerequisite: Lesson 8.1 (URP Lighting) and a URP project with a camera in the scene
In This Lesson
What Post-Processing Is
Post-processing is a set of full-screen image effects applied after the scene is rendered but before it hits your screen. The 3D world is drawn into an image first; then post-processing grades that image โ brightening highlights into a glow, warming the color, darkening the corners. It's the exact same idea as an Instagram filter or a colorist's grade on a film.
Two things have to be true before you see any effect:
- Post Processing is enabled on the camera. Select your camera and, in the Camera component under Rendering, tick Post Processing. Without this, volumes are ignored entirely.
- The URP Renderer allows it. URP handles post-processing by default; nothing extra to install (unlike the Built-in pipeline, which needed a separate package).
โ ๏ธ "My Bloom does nothing!"
The single most common cause is the camera's Post Processing checkbox being off. The second is a bright object that simply isn't bright enough โ Bloom only glows on pixels above its Threshold, so an emissive material or an HDR color set above 1.0 is what actually triggers it. Check the camera toggle first, brightness second.
The Volume Framework
URP doesn't put post-processing settings on the camera directly. Instead it uses the Volume framework: invisible objects called Volumes hold a Profile, and the camera samples whichever volumes it's inside to decide the final look. This indirection is powerful โ it lets the look change per location without touching the camera at all.
๐ Definition
Volume: a component (on a GameObject) that says "when the camera is affected by me, apply this Volume Profile." Volume Profile: a reusable asset holding a list of overrides (Bloom, Vignette, โฆ), each with its own settings. One profile can be shared by many volumes.
Add one with GameObject โธ Volume โธ Global Volume. It creates a GameObject with a Volume component; click New next to its Profile field to generate a fresh Volume Profile asset. Here's how the pieces relate:
(Post Processing โ)"] --> B["samples Volumes
it's affected by"] B --> C["Volume component
(Global or Local)"] C --> D["Volume Profile
(asset)"] D --> E["Overrides:
Bloom, Vignette,
Color Adjustmentsโฆ"]
Figure 1: The camera samples Volumes, each Volume points to a Profile, and the Profile holds the stack of overrides that make up the look.
Volume Profiles & Overrides
Select a Volume and its Inspector shows the Volume component at the top (Mode, Priority, Weight) and, below, the Profile with an Add Override button. Each override you add is a collapsible block with a checkbox to enable it, and โ crucially โ each individual property has its own little checkbox. That per-property toggle means an override only affects the settings you tick; everything else falls through to lower-priority volumes or the default.
Global vs. Local Volumes
The Volume component's Mode dropdown is the key choice:
- Global โ affects the camera everywhere, no matter where it is. This is your baseline grade for the whole level: one Global Volume with Bloom, Tonemapping, and a gentle Vignette.
- Local โ only affects the camera when it enters a Collider attached to the same GameObject (marked Is Trigger). Walk into a cave and a Local Volume kicks in with a cold, blue, high-vignette look; step out and it fades away.
Local volumes are how AAA games change mood room by room. The camera checks which volume colliders it's inside, then blends their profiles together based on priority and how deep inside each one it is.
โ Pro Tip: one baseline + targeted locals
Set up a single Global volume for the look 90% of the level should have, then add small Local volumes only where the mood needs to shift โ a spooky basement, an underwater section, a boss arena. It's far easier to manage than a dozen global profiles fighting each other.
The Core Overrides
You'll reach for the same handful of overrides constantly. Add each with Add Override โธ Post-processing โธ โฆ:
- Tonemapping โ maps the scene's raw HDR light into displayable color. Set Mode to ACES (filmic, cinematic contrast) or Neutral (truer to source). Almost every project wants Tonemapping on; without it, bright scenes look washed out or blown-out.
- Bloom โ makes bright pixels bleed a soft glow. Threshold decides how bright a pixel must be to glow; Intensity how strong the glow is. This is what makes emissive signs, sparks, and the sun feel luminous.
- Color Adjustments โ your grade in one place: Post Exposure (overall brightness), Contrast, Color Filter (a global tint โ warm orange for sunset, cold blue for night), and Saturation.
- Vignette โ darkens the frame's edges to draw the eye inward. A subtle Intensity (0.2โ0.4) adds focus; crank it for horror or a scope/binocular look.
- Depth of Field โ blurs what's out of focus. Bokeh mode gives cinematic background blur; great for cutscenes and close-ups, and it's the effect you'll pair with Timeline next lesson.
๐ก Grade last, and grade subtly. Post-processing amplifies what's already there โ it can't fix a badly lit scene, only flatter a good one. Light the scene first (Lesson 8.1), then add a light touch of Tonemapping, Bloom, and Color Adjustments. If viewers notice your post-processing, it's probably too strong.
Priority & Blending
When the camera is affected by more than one volume, two settings decide the result:
- Priority โ a number on the Volume component. When volumes overlap, higher priority wins for any property they both set. Give your Global baseline priority 0 and a special-area Local volume priority 1 so it takes over inside its trigger.
- Weight and Blend Distance โ Weight (0โ1) scales how strongly a volume applies. On a Local volume, Blend Distance creates a soft fade band outside the collider: as the camera approaches, the profile eases in instead of snapping. This is what makes the cave grade wash over you gradually rather than clicking on at the doorway.
The blend is per property. If a Local profile only ticks Vignette and Color Filter, only those two blend in as you enter โ the Global Bloom and Tonemapping keep applying underneath, untouched. That per-property fall-through (from Figure 2) is what makes layered grading manageable.
โ ๏ธ Priority ties & the "nothing changes" trap
If two volumes share the same priority, the winner is undefined โ always give overlapping volumes distinct priorities. And if a Local volume seems to do nothing, check that its GameObject has a Collider with Is Trigger on: a Local volume with no trigger collider can never detect the camera entering it.
Hands-on Challenge
๐๏ธ Exercise 1: A cinematic baseline grade
Objective: Give your whole scene a filmic look with one Global volume.
- Select your Main Camera and tick Post Processing under Rendering.
- Create GameObject โธ Volume โธ Global Volume, and click New to make a fresh Profile.
- Add Tonemapping and set Mode to ACES. Notice the contrast snap into place.
- Add Bloom; set Threshold around 0.9 and Intensity around 1. Put an emissive or HDR-bright object in view to see it glow.
- Add Color Adjustments and a gentle Vignette (Intensity ~0.3). Tune Post Exposure and Color Filter to taste.
๐ก Hint: nothing looks different after adding overrides
Check the camera's Post Processing checkbox first โ it's off by default. If Bloom specifically does nothing, your scene may have no pixels above the Threshold; lower the Threshold or add an emissive material.
โ Success check
The scene has visibly more contrast and mood, bright objects glow softly, and toggling the Volume GameObject on and off flips between the raw render and your graded look.
๐๏ธ Exercise 2: A mood shift with a Local volume
Add a second Volume, set its Mode to Local, and give the GameObject a Box Collider with Is Trigger on, sized to cover one room. Give it Priority 1 and a Profile with a strong blue Color Filter and heavier Vignette. Set a Blend Distance of a metre or two. Enter Play mode and walk the camera in โ the look should ease into cold-and-moody as you cross the threshold and ease back out when you leave, while your Global Bloom and Tonemapping keep applying underneath.
๐ฏ Quick Quiz
Question 1: You added a Volume with Bloom but the scene looks identical. What's the first thing to check?
Question 2: You want a cold blue look only inside one room. Which setup is right?
Question 3: Two overlapping volumes both set Vignette. Which one's value is used?
Summary
๐ Key Takeaways
- Post-processing grades the final rendered image; in URP it's driven by the Volume framework, and the camera's Post Processing toggle must be on.
- A Volume points to a Volume Profile asset, which holds a stack of overrides โ each override and each property has its own checkbox, so only ticked settings apply.
- Global volumes affect the camera everywhere; Local volumes only apply inside a trigger collider โ your baseline plus targeted mood shifts.
- The core overrides are Tonemapping, Bloom, Color Adjustments, Vignette, and Depth of Field.
- Priority decides who wins where volumes overlap; Weight and Blend Distance make looks fade in smoothly, per property.
๐ What's Next?
You can now make a scene look cinematic. Next we make it move cinematically. In Lesson 9.4: Timeline โ Building a Cutscene you'll sequence camera moves, object animation, and audio on a timeline โ and pair a Cinemachine camera with the Depth of Field you just learned for a real cutscene, triggered in-game.
๐จ You can grade a scene now
Enable it on the camera, drop a Volume, fill its Profile with overrides, and use Global for the baseline and Local for the mood shifts. That's the whole post-processing pipeline in URP.