Hi everyone, I would like to report an undesired and ugly behavior of the Bloom postprocess FX that happens when moving the camera, I show it in the following video, pay attention to how the halo that surrounds every light flickers:
I’m using Unity 2020.2.
It is a build, not in-editor (it occurs in both, although it is more noticiable in editor).
Using URP 10.2.2, the 2D Renderer.
Using Bloom effect (intensity = 11, scatter = 0.5).
Using URP pixel perfect component (experimental).
White lines are square sprites.
Has this ever happened to you? Does it have to do with how the postprocess effect stack is implemented?
Is there a workaround?
I consider this a very important issue because I cannot use it as it is, it looks soooo bad. And I don’t have a clue about what can be the origin of the problem. You can watch in the attached video how I manually move the camera, a camera with no components, just me changing the position property.
Please just focus on the EEI neon only.
I don’t think this one is actually a bug, it’s looks like a fairly normal sampling artefact that is common with bloom. You may have just run into a particularly noticeable case.
Very small+bright objects tend to cause some amount of bloom shimmering, and it’s not unique to Unity’s bloom implementation.
Imagine a very tiny quad with no antialiasing being moved across the screen. As it moves across the screen it might be rendered as 1 pixel tall on some frames but 2 pixels tall on other. This greatly affects the amount of bloom that it generates (especially when dealing with HDR, and emissive pixels much brighter than 1.0)
This is further complicated by the blur process used by bloom effects using downscaled buffers - so even if your rendering is pixel-perfect, it may not guaranteed perfectly shimmer-free bloom. You’ll probably find that the shimmer mostly goes away if you make the lights taller.
The easiest fix for those lights is to not rely on bloom. You could fake the glows using a sprite with additive blending.
This is by design as the mesh simply too thin and takes only one pixel of width. After bloom downscaling pass linear filtering blends it with the background depending on the position, this way losing its intensity. As result, it is no longer strong enough to contribute to the bloom effect (In this particular case its intensity drops from 1 to 0.0103)
So I will have to do it with freeform lights or using cookies. 2D materials do not allow to choose the blending mode so that option is discarded. I asked for it here Blend mode in Sprite-Lit shaders in ShaderGraph
you could sample your filter render texture with an increase uv.y texel size, causing all bloom to be stretched slightly on the y axis. might look neat?