Page MenuHome

Principled BSDF denoising albedo not working well for sheen and metal
Confirmed, NormalPublicKNOWN ISSUE

Description

System Information
Operating system: Windows-10-10.0.17134-SP0 64 Bits
Graphics card: GeForce GTX 1070/PCIe/SSE2 NVIDIA Corporation 4.5.0 NVIDIA 431.86

Blender Version
Broken: version: 2.82 (sub 6), branch: master, commit date: 2020-01-06 20:54, hash: rB3a35301fd16d
Worked: (optional)

Short description of error
materials with metal, sheen or transmission lose albedo data, or the albedo data becomes mixed in with additional data. Makes the albedo passes unsuitable for the intel denoiser.

Exact steps for others to reproduce the error
open below file, hit render then check the albedo passes in the compositor, the monkey's passes contain additional information besides just the required albedo data. In the regular albedo pass (diffuse colour), all texture data from the diffuse input is lost.

If it needs to work this way for compatibility with the old denoiser, perhaps a new 'intel denoising albedo pass' could be created, so the only information stored in the pass is whatever's plugged into the base colour of the material, without any lighting/reflection data.

Event Timeline

Germano Cavalcante (mano-wii) changed the task status from Needs Triage to Needs Information from User.Mon, Jan 13, 1:34 PM

I didn't understand what you meant by:

all texture data from the diffuse input is lost.

The monkey material has no diffuse pass as it is all metallic.

I didn't understand what you meant by:

all texture data from the diffuse input is lost.

The monkey material has no diffuse pass as it is all metallic.

Hi Germano, thanks for taking a look. Yes that's the problem, in all circumstances the intel denoiser needs the input of the base colour in order to not blur any textures that might be connected to the base colour input. So even if the material is metallic, there may still be a texture plugged into the base colour which needs to be preserved. The existing denoising abledo pass does preserve the base colour input for metallic materials, but for some reason (presumably a bug) it's also adding additional information such as specular/glossy to the pass, which makes the denoiser unusuable if the metal is glossy.

See below image and file. It should help to clarify the problem.

A) Denoised image: 25 samples notice how all texture detail is lost from the glossy metallic and from the sheen materials. Render time 20 seconds

B) denoise albedo passes 25 samples, this is the denoise albedo pass used for the above image.

C) denoised image: This is the same image (25 samples), but this time i've generated an albedo pass using a second scene where the metallic and sheen were disabled. Render time 20 seconds

D) denoise albedo pass created in a second scene with metallic and sheen turned off:

E) Ground Truth: 1500 samples Notice how image C which only took 20 seconds to render is almost identical to this 20 minute render, just because the albedo pass was altered to preserve the base colour.

I think the old cycles denoiser must have had access to an undiluted base colour pass, because I noticed it did appear to preserve texture detail with an additional process once rendering had finished. It would be blurry all the way though, and then inject the detail back in after it had rendered (without the use of the compositor)

Brecht Van Lommel (brecht) renamed this task from denoising albedo and regular albedo (color pass) contains non albedo data, or is lost completely under certain circumstances. Removes the ability to utilise the intel denoiser properly. to Principled BSDF denoising albedo not working well for sheen and metal.Sat, Jan 18, 5:50 PM
Brecht Van Lommel (brecht) changed the task status from Needs Information from User to Confirmed.
Brecht Van Lommel (brecht) changed the subtype of this task from "Report" to "Known Issue".

also doesn't work well for transmission (if you have image based stained glass for example). Refraction information isn't needed as you'd generally denoise the individual passes seperately in the compositor.

Just a thought though, now we have custom AOV's, perhaps there could be an option in the view layer properties (where you create new AOV's) to assign a specific input from all scene materials to a given custom AOV. For example you could drag any input from a principled BSDF shader directly over the new AOV, this would then feed whatever's plugged into that input into the AOV, there could also be a 'from all materials' checkbox, which when checked would get that input from every principled bsdf in the scene and add it to the AOV as well. Easier than hooking up an AOV output node to every material in the scene manually (or with python).