Object with alpha=1 is rendered transparently with the URP when HDR+Tonemapping is enabled

First of all: I am not sure if this really is a “Bug”… but it seems like one: Shouldn’t one NEVER be able to see through transparent objects with an alpha-value of 1?

Here’s the problem description: I am rendering a scene with a very simple transparent shader using the URP 7.3.1, “UniversalRP-HighQuality” setting with HDR enabled and Tonemapping enabled in the “Post-process Volume”. The transparent object is a white plane, set to color float4(1.0, 1.0, 1.0, 1.0). It renders as expected when the Tonemapping Mode=None, as can be seen in Figure 1.


Figure 1: Rendering the scene in HDR with Tonemapping Mode=None

When I switch to a different Tonemapping mode, the plane is no longer non-seethrough but instead, the background shines through, as shown in Figure 2.


Figure 2: Rendering the scene in HDR with Tonemapping Mode=ACES. Background shines through the plane.

The same shine-through effect occurs when using Tonemapping Mode=Neutral. If I disable HDR, the plane is rendered fully opaque once again (But I am not sure if it really should be gray and not pure white in this case, since it has the color value float4(1.0, 1.0, 1.0, 1.0)), as Figure 3 shows.


Figure 3: Rendering the scene with HDR disabled but Tonemapping Mode=ACES regardless. The plane is non-seethrough once again, but it appears darker than expected.

With HDR enabled once again and Tonemapping Mode=ACES (i.e. the state represented by Figure 2), I’ve tried to “fix” the transparent appearance of the plane in shaders. Changes to the alpha value have no effect at all, as Figure 4 shows. But if I set the rgb-color values high enough, I can make the plane’s appearance more opaque as shown in Figure 5.


Figure 4: Same settings as in Figure 2 (i.e. HDR enabled, Tonemapping Mode=ACES), additionally Bloom and Vignette disabled; the plane is assigned a color value of float4(1.0, 1.0, 1.0, 10.0).


Figure 5: Same settings as in Figure 4 (i.e. HDR enabled, Tonemapping Mode=ACES, Bloom and Vignette disabled); the plane is assigned a color value of float4(10.0, 10.0, 10.0, 1.0).

Okay… so it is visually “fixed” in Figure 5, but that can’t be the solution. Because I can not know the highest possible illumination value in advance. An object with an alpha-value of 1.0 should never reveal the scene behind it, should it?

Some more info about the plane: I’ve assigned it to layer “TransparentFX” (but that didn’t make any difference), it uses a material with the custom shader linked above, and the Render Queue is set to 3000.

Any ideas?
Any advice?

1 Like

2 year latter…but i just have the problem, so …
look at SSAO after oppaque

Unity drawn transparent objects from back to start in camera order, so, order received from objects world positions. So big transparent objects can be wrongly detected by Unity as farest, but actually be nearest, and if zWrite is disabled as it is in transparets by default - you recive such effect, enable zWrite on youre transparent plane, or set custom render order