'Is there a way to apply bloom to a specific object?

I've currently noticed that, if i uncheck the "is Global" checkbox on the Bloom Effect of a Post Processing Volume, even thought I adjusted my layer to affect one in particular, the Bloom doesnt apply to that layer I've set in the P-p layer. In fact, it doesn't apply at all. Either it sets bloom for everything in the scene, or it doesn't.

Extras: I have no Pipeline asset, maybe thats the issue, but I've tried to setting one LRP (because for some reason URP in my 2019.2.17f1 version doenst exist) and it just breaks all my materials that i use for Particle Systems (Particles/Standard Unlit) even if i upgrade them for LRP materials.

Any ideas? If it's possible to deliver a solution to both these problems excellent, but the main one is the title question.



Solution 1:[1]


Note: The "camera stacking" approach mentioned here applies only to Unity URP. For the Unity Built-in Render Pipeline or Unity versions prior to 2019.3.0f3 you can achieve a similar effect with RenderTextures. Though Unity HDRP has no explicit "camera stacking" feature it does allow for the same net effect via the HDRP-specific Graphics Compositor.


"Is there a way to apply bloom to a specific object?"

You could take a leaf out of Unity camera stacking whereby one set of objects are rendered by one camera and another set with a different camera. The results of each camera rendering are merged together automatically by Unity and presented to the screen.

But don't take my word for it, this is what Unity has to say:

In the Universal Render Pipeline (URP), you use Camera Stacking to layer the output of multiple Cameras and create a single combined output. Camera Stacking allows you to create effects such as a 3D model in a 2D UI, or the cockpit of a vehicle. Tell me more...

...and (my emphasis):

A Camera Stack overrides the output of the Base Camera with the combined output of all the Cameras in the Camera Stack. As such, anything that you can do with the output of a Base Camera, you can do with the output of a Camera Stack. For example, you can render a Camera Stack to a given render target, apply post-process effects, and so on. Tell me more...

When you consider that each camera has the potential for its own rendering settings (including bloom) the solution is clear:

  1. ensure there are two cameras in the scene, say My Default Camera and Bloomin' Camera
  2. create a custom layer called "Bloom"
  3. assign whatever objects you want to be rendered with a bloom to layer Bloom
  4. setup the camera stack as per "Adding a Camera to a Camera Stack".

My Default Camera should be set to "Base":

enter image description here

Bloomin' Camera should be set to overlay:

enter image description here

Add Bloomin' Camera to My Default Camera Stack settings:

enter image description here

  1. ensure that the Culling mask for My Default Camera has the Bloom layer unticked. This ensures that the objects to be bloomed are only drawn once on the Bloom layer
  2. ensure that the Culling mask for Bloomin' Camera has a single ticked entry for the Bloom layer and nothing else. You don't want to double-up on rendering otherwise you will get funky and undesirable z-order effects apart from hurting game performance. Other layers will be rendered by My Default Camera.
  3. apply bloom effects to camera Bloomin' Camera
  4. run game, celebrate

Solution 2:[2]

The is global might sound confusing at first. Ultimately it does not mean where to apply the post processing effect, but when to apply the effect. If it is set to Global, it will always be applied, otherwise you can set a layer and a border that triggers the effect.

The general approach is to only set emission to materials where you want the effect to take place. If your Materials are to dark otherwise you should adjust the ambient lighting settings.

Atleast in URP there are some work arounds for older versions like this, but afaik this does not work in 2020.3 since they made some changes on URP and the camera system.

edit: on the video Chris Hull Chris Hull game an answer for how to do it with the new system

@Mezzanine Add your actual game objects to a created bloom layer. Create two cameras and set one of them to cull everything except that bloom layer you made. Set the other to only cull the bloom layer. Then you can set your camera to overlay and it will be added to the other. You can then use separate post process stacks on these cameras. Note that you can only bloom objects in the background with this technique as if you add bloom to an overlay camera, for some reason it just adds bloom to everything rather than just the things in that camera view. Doesn't make much sense and makes the purpose of the layers redundant in my opinion. If you can find a way to add post process to the overlay camera before it is added to the final image, to do let me know.

i have not tested that yet, but i presume it's still valid.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2