URP Post-Processing and Bloom Not Working in Unity 6: The Complete Fix

Illustration of a glowing game camera lens with bloom light rays and a slider control panel

Written by

in

You add a Volume, turn on Bloom, crank the intensity and… nothing. The scene looks exactly the same. Post-processing that silently does nothing is one of the most common Unity URP questions, and it almost never needs a code fix. It’s usually one missing checkbox in a chain of about six. This guide walks that chain in order for Unity 6 and URP, covering Bloom, Tonemapping, Vignette, Color Adjustments and every other Volume override. It also covers the cases where effects work in the Editor but not in a build, or not on UI.

How Post-Processing Works in URP

If you learned Unity with the Built-in Render Pipeline, you probably used the Post Processing Stack v2 package, with its Post-process Layer and Post-process Volume components. URP does not use that package. Those components can be added to a URP project without errors and simply do nothing. URP has its own post-processing built in, driven by the Volume framework:

  • A Volume component (any GameObject) holds a Volume Profile asset.
  • The profile contains overrides: Bloom, Tonemapping, Vignette, Color Adjustments, Depth of Field and so on.
  • Each camera with Post Processing enabled blends all Volumes that affect it and renders the result.

So an effect only shows up when all of these line up: the pipeline asset and renderer allow it, the camera asks for it, a Volume reaches the camera, and the override inside the profile is actually switched on with a non-zero value. The checklist below goes through them in that order.

The 8-Step Checklist

1. Remove Post Processing Stack v2 leftovers

Open Window > Package Manager and check for the Post Processing package. If your project was converted from Built-in, remove it, and delete any Post-process Layer or Post-process Volume components. Their profiles can’t be converted automatically, so recreate the settings in a URP Volume Profile.

2. Make sure URP is actually the active pipeline

In Edit > Project Settings > Graphics, the Default Render Pipeline must be a URP asset. Then open Project Settings > Quality. Each quality level can override the pipeline asset, and the level that’s active in the Editor (the green checkmark column for your platform) may use a different URP asset from the one you’ve been editing. This is the number-one reason “I enabled HDR and nothing changed”: the setting was changed on an asset that isn’t in use.

A quick test: select the URP asset you think is active, change its Render Scale to 0.3, and look at the Game view. If it doesn’t get blurry, you’re editing the wrong asset.

3. Check the renderer asset

The URP asset points at one or more renderers in its Renderer List, usually a Universal Renderer Data asset (or a Renderer 2D Data asset for 2D projects). Select it and make sure its Post-processing section is enabled. If it’s disabled, no camera using that renderer can render post effects.

4. Enable Post Processing on the camera

Select your camera. Under Rendering, tick Post Processing. It’s off by default on newly created cameras in many templates, and it’s the single most common cause. If you have several cameras, check that the one showing in the Game view is the one you ticked.

5. Add a Volume that reaches the camera

Create one with GameObject > Volume > Global Volume. Assign a profile (click New next to the Profile field if it’s empty). Then check:

  • Mode: Global affects the camera everywhere. Local only affects the camera while it’s inside the Volume’s collider (plus the Blend Distance). A Local Volume needs a collider, and the camera’s position has to be inside it, not the player’s.
  • Weight: must be above 0. At 0 the Volume is ignored.
  • Priority: when several Volumes override the same setting, the higher priority wins. A Global Volume with priority 1 and Bloom intensity 0 will beat yours at priority 0.

6. Match the camera’s Volume Mask to the Volume’s layer

On the camera, under Environment, the Volume Mask decides which layers’ Volumes it listens to. If your Volume GameObject sits on a layer like “PostFX” and the mask is set to Default only, the camera never sees it. Setting the mask to Everything is the quickest test.

7. Tick the override’s properties

Inside the profile, each override property has a small checkbox on its left. A property only takes effect when its checkbox is ticked. Typing a new Intensity value without ticking the box does nothing, and the value stays greyed out. Use the ALL / NONE buttons at the top of an override to tick every property at once. Also make sure the override itself isn’t disabled by the toggle in its header.

8. Give the effect a real value

Several overrides do nothing at their defaults. Bloom’s Intensity defaults to 0. Vignette’s Intensity defaults to 0. Tonemapping’s Mode defaults to None. Color Adjustments’ values all default to neutral. Set a clearly visible value first (Bloom Intensity 1, Vignette Intensity 0.5, Tonemapping ACES) to prove the chain works, then tune it back down.

Bloom Specifically: HDR, Threshold and Emission

If the other effects work but Bloom is weak or missing, the problem is almost always brightness. Bloom only spreads light from pixels brighter than its Threshold (default 0.9, in gamma space). Three things decide whether anything reaches that:

  • HDR must be on. In the active URP asset, under Quality, tick HDR. The camera’s Output > HDR Rendering must also be allowed (it follows the pipeline setting by default). Without HDR, colors are clamped to 0–1, so nothing can go much past the threshold and bloom is barely visible.
  • Use emission for glowing objects. Set your Lit material’s Emission on and open the Emission color picker. It’s an HDR picker with an Intensity slider. An intensity of 2–4 makes the object clearly exceed the threshold. A bright but non-emissive white albedo usually won’t.
  • Lower the threshold to test. Set Threshold to 0 briefly. If everything blooms, your pipeline is fine and your scene just isn’t bright enough. Raise it back and fix brightness with emission or lighting instead.

Other Bloom settings worth knowing: Scatter controls how far the glow spreads, Clamp caps the maximum brightness (lower it if tiny specular highlights produce huge flares), and High Quality Filtering reduces flicker at a GPU cost you may not want on mobile.

For 2D projects using the 2D Renderer: Sprite Renderer’s Color field isn’t HDR, so tinting a sprite can’t push it past the threshold. Use a material with an HDR color property (for example a Shader Graph Sprite Lit shader with an HDR color multiplied in) or bright 2D lights, and keep HDR on in the URP asset.

Works in Game View but Not Scene View (or the Reverse)

The Scene view has its own toggle. In the Scene view toolbar, open the effects dropdown (the icon that looks like a picture or a sparkle) and make sure Post Processing is ticked. It’s easy to switch this off by accident, and it only affects the Scene view.

The reverse case, where the Scene view shows effects but the Game view doesn’t, points to the camera: its Post Processing checkbox, its Volume Mask, or a Local Volume the Scene view camera is inside but the game camera isn’t.

πŸ’» Is your laptop struggling with URP?

Post-processing is one of the heavier parts of a frame, especially Depth of Field and high-quality Bloom. If the Editor crawls whenever effects are on, our free quiz matches you with a laptop that suits the kind of game you’re building and your budget.

Take the Laptop Recommendation Quiz →

Post-Processing on UI

A Canvas set to Screen Space – Overlay is drawn after all cameras, so post-processing never touches it. That’s usually what you want: blurry, bloomed, color-graded menu text is hard to read.

If you do want effects on UI (a glowing health bar, a vignette over the HUD), set the Canvas to Screen Space – Camera and assign the camera that has Post Processing on. The UI is then rendered by that camera and goes through its effects like any other geometry. For glowing UI with bloom, the UI element needs an HDR color too, which in practice means a custom material.

Camera Stacking and Multiple Cameras

URP’s camera stacking uses one Base camera plus Overlay cameras listed in its Stack. The post-processing settings live on the Base camera and the result covers the whole stack. If you enable Post Processing on an Overlay camera and not the Base, you may see nothing. Enable it on the Base camera first.

With several separate Base cameras (split screen, a minimap), each camera needs its own Post Processing checkbox and gets its own Volume blend. Use the Volume Mask and separate layers if the minimap should skip the effects the main view uses.

Works in the Editor, Missing in the Build

This almost always comes down to the quality level or shader stripping:

  • Different quality level on the target platform. In Project Settings > Quality, the default level for Android, iOS or WebGL is often a lower one whose URP asset has HDR off, or whose renderer has post-processing disabled. Check the pipeline asset for the level marked as default for that platform.
  • Shader variant stripping. In Project Settings > Graphics, the URP section includes shader stripping options such as stripping unused post-processing variants. If an effect is only enabled from a script at runtime and no profile in the build uses it, its variants can be stripped. Make sure at least one Volume Profile referenced by a scene in the build contains the override, or turn off that stripping option to test.
  • Mobile HDR. Some older mobile GPUs don’t support the HDR format URP wants and fall back to LDR, which makes bloom much weaker. Tune bloom for the device, not the Editor.
  • WebGL. Post-processing works on WebGL 2 but costs a lot of fill rate. If you turned it down for WebGL on purpose, that’s the quality level doing its job.

Changing Effects from a Script

To change a Volume’s settings at runtime, get the override from the profile with TryGet and set its parameters with Override (or by setting .value and overrideState). Here is a damage flash that pushes the vignette red for a moment:

using System.Collections;
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;

public class DamageVignette : MonoBehaviour
{
    [SerializeField] Volume volume;
    Vignette vignette;

    void Awake()
    {
        // volume.profile creates a runtime copy, so the asset on disk isn't changed.
        if (!volume.profile.TryGet(out vignette))
            vignette = volume.profile.Add<Vignette>(true);
    }

    public void Flash() => StartCoroutine(FlashRoutine());

    IEnumerator FlashRoutine()
    {
        vignette.color.Override(Color.red);
        for (float t = 0; t < 0.4f; t += Time.deltaTime)
        {
            vignette.intensity.Override(Mathf.Lerp(0.5f, 0f, t / 0.4f));
            yield return null;
        }
        vignette.intensity.Override(0f);
    }
}

Two details matter here. volume.profile gives you an instance you can change safely at runtime, while volume.sharedProfile edits the asset itself, and in the Editor those changes stay after you exit Play mode. And calling Override(value) sets both the value and the “ticked” state, which avoids the unticked-checkbox problem from step 7.

For effects that should fade in and out smoothly, a common alternative is a second Volume with the effect fully on, whose Weight you animate from 0 to 1.

Troubleshooting by Symptom

No effects at all, anywhere

Check steps 2–4: the active quality level’s URP asset, the renderer’s Post-processing section, and the camera’s Post Processing checkbox. Then confirm you’re not using Post Processing Stack v2 components.

Some overrides work, others don’t

The broken ones have unticked property checkboxes or default values of 0 (step 7 and 8). Or a higher-priority Volume is overriding the same property with a neutral value. Select the camera and check which Volumes affect it.

“Bloom is on but nothing glows”

HDR is off in the active URP asset, the objects aren’t emissive, or Intensity is still at its default of 0. Drop Threshold to 0 to test.

Everything glows and the image is washed out

Threshold is too low, or Intensity too high. Add Tonemapping (ACES or Neutral) so bright values roll off instead of clipping, and lower Clamp if tiny highlights create large flares.

Effects flicker or pop when moving

You’re crossing the edge of a Local Volume with a Blend Distance of 0. Add a Blend Distance of a few meters. Flickering bloom on small bright pixels is reduced by High Quality Filtering or temporal anti-aliasing.

Pink screen or pink materials after switching to URP

That’s a separate problem: materials still using Built-in shaders. See our guide to fixing pink materials in Unity 6.

FAQ

Why is post-processing not working in URP?

Usually the camera’s Post Processing checkbox is off, the Volume’s layer isn’t in the camera’s Volume Mask, or the override’s properties aren’t ticked. Also check the active quality level’s URP asset and renderer.

Can I use the Post Processing Stack v2 package with URP?

No. URP has its own integrated post-processing based on the Volume framework. Stack v2 components do nothing in a URP project.

Why is my bloom so weak?

Bloom needs pixels brighter than its threshold. Turn on HDR in the URP asset and use emissive materials with an HDR intensity above 1. Also check Bloom’s Intensity isn’t still 0.

Does post-processing affect UI?

Not for Screen Space – Overlay canvases. Set the Canvas to Screen Space – Camera and use a camera with post-processing enabled.

Why do effects appear in the Editor but not in my build?

The build platform probably uses a different quality level with its own URP asset, or the effect’s shader variants were stripped. Check Project Settings > Quality and the URP stripping options in Graphics.

How do I change bloom intensity from code?

Get the override with volume.profile.TryGet(out Bloom bloom) and call bloom.intensity.Override(value). Use profile, not sharedProfile, to avoid changing the asset.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *