Separate opacities for deferred decal domain (Base, Normal, Roughness)

When rendering decals with `r.DBuffer = 1`, (BaseColor, Normal, Roughness) internally have separate opacities (see DecalCommonOutput in DecalCommon.ush).

Our material artists have expressed a desire to control these as separate opacity expressions. In particular, better liquid puddles can be rendered when Normal opacity is controllable.

Attached is our engine modification to achieve this and some screenshots of how it works in practice.

Since this is not introducing additional shader complexity (just exposing some internal values), we think this would be a useful addition to upstream Unreal.

separate-decal-opacities.patch(25.8 KB)
opacity_c.png(2.05 MB)
opacity_a.png(2.08 MB)
opacity_b.png(1.83 MB)

Hi Jack,

Thanks for making that contribution. Could you please make a pull request on GitHub to help us integrate these changes more quickly?

Thanks,

Tim

Hello,

It is a good change! Thanks for proposing it. However, we have decided to not proceed with integrating that features. From our perspective:

  • It is unclear in what case one would really want that (e.g. change albedo but keep roughness/metallic).
  • This might collide with some future plan to have a full substrate slab as a decal later down the line for high quality decals.
  • We could have hidden that feature behind a cvar but that would add maintenant complexity down the line. So we prefer to not integrate for now.

We hope you understand.

Thank you very much!

Sure! I’ll prepare one today

All set with the PR https://github.com/EpicGames/UnrealEngine/pull/14331