Denoising Albedo gives wrong results #69770

Closed
opened 2019-09-12 02:10:44 +02:00 by Daniel Salazar · 36 comments
Member

System Information
Operating system: Windows-10-10.0.18362 64 Bits
Graphics card: GeForce GTX 1080 with Max-Q Design/PCIe/SSE2 NVIDIA Corporation 4.5.0 NVIDIA 436.15

Blender Version
Broken: version: 2.81 (sub 10), branch: master, commit date: 2019-09-09 20:20, hash: 3e81c1c1d5

Short description of error
Denoising Albedo pass appears washed out

Exact steps for others to reproduce the error

Open the following blend file and press F12
Albedo.blend

The Denoising albedo pass will come out like this
image.png
image.png

Lower the Principled Roughness value to 0 and press F12 again

This time the albedo looks correct
image.png
image.png

Switching to Metallic 1.0 and Roughness 0.5 looks like the albedo is completely lost
image.png
image.png

For the denoiser to give proper results, the Denoiser Albedo pass would need to give clean colors, not washed out colors.

**System Information** Operating system: Windows-10-10.0.18362 64 Bits Graphics card: GeForce GTX 1080 with Max-Q Design/PCIe/SSE2 NVIDIA Corporation 4.5.0 NVIDIA 436.15 **Blender Version** Broken: version: 2.81 (sub 10), branch: master, commit date: 2019-09-09 20:20, hash: `3e81c1c1d5` **Short description of error** Denoising Albedo pass appears washed out **Exact steps for others to reproduce the error** Open the following blend file and press F12 [Albedo.blend](https://archive.blender.org/developer/F7737135/Albedo.blend) The Denoising albedo pass will come out like this ![image.png](https://archive.blender.org/developer/F7737167/image.png) ![image.png](https://archive.blender.org/developer/F7737140/image.png) Lower the Principled Roughness value to 0 and press F12 again This time the albedo looks correct ![image.png](https://archive.blender.org/developer/F7737174/image.png) ![image.png](https://archive.blender.org/developer/F7737144/image.png) Switching to Metallic 1.0 and Roughness 0.5 looks like the albedo is completely lost ![image.png](https://archive.blender.org/developer/F7737178/image.png) ![image.png](https://archive.blender.org/developer/F7737160/image.png) For the denoiser to give proper results, the Denoiser Albedo pass would need to give clean colors, not washed out colors.
Author
Member

Added subscriber: @zanqdo

Added subscriber: @zanqdo
Author
Member

Changed status from 'Open' to: 'Archived'

Changed status from 'Open' to: 'Archived'
Author
Member

Changed status from 'Archived' to: 'Open'

Changed status from 'Archived' to: 'Open'
Member

Added subscribers: @Stefan_Werner, @JacquesLucke

Added subscribers: @Stefan_Werner, @JacquesLucke
Member

While it is true that the Denoising Albedo looks washed out, it does not seem to be an issue. Using the Denoise node with it works just fine. Or do you get any issue with the denoising?

@Stefan_Werner Can you give more information? Feel free to close this if it is not actually a bug.

While it is true that the Denoising Albedo looks washed out, it does not seem to be an issue. Using the Denoise node with it works just fine. Or do you get any issue with the denoising? @Stefan_Werner Can you give more information? Feel free to close this if it is not actually a bug.
Author
Member

Denoise is a complex feature meant for use in production files, you can't judge the results on a monkey head. The bug report is about the Albedo pass being incorrect, which clearly shows. Not about demonstrating it's effects on denoising. However I can provide an example of incorrect denoising extracted from a real scene.

Original (Noisy)
Original.png

Denoised with Denoising Albedo (Incorrect result)
DenoisingAlbedo.png

Denoised only with Subsurface Color pass (Correct result)
SSSCol.png

What is happening is that the correct albedo is already present in the Subsurface Color pass shown below
SSSCol_Pass.png

The Gloss color pass however gives a white result
Gloss_Pass.png

When the 2 are added together in the Denoising Albedo pass the resulting pass is washed out hence being incorrect and useless for denoising
DenoisingAlbedo_Pass.png

Blend file can be found here
Denoise_Albedo.blend

Press F12 and wait for the render to finish.

Denoise is a complex feature meant for use in production files, you can't judge the results on a monkey head. The bug report is about the Albedo pass being incorrect, which clearly shows. Not about demonstrating it's effects on denoising. However I can provide an example of incorrect denoising extracted from a real scene. Original (Noisy) ![Original.png](https://archive.blender.org/developer/F7758887/Original.png) Denoised with Denoising Albedo (Incorrect result) ![DenoisingAlbedo.png](https://archive.blender.org/developer/F7758889/DenoisingAlbedo.png) Denoised only with Subsurface Color pass (Correct result) ![SSSCol.png](https://archive.blender.org/developer/F7758891/SSSCol.png) What is happening is that the correct albedo is already present in the Subsurface Color pass shown below ![SSSCol_Pass.png](https://archive.blender.org/developer/F7758914/SSSCol_Pass.png) The Gloss color pass however gives a white result ![Gloss_Pass.png](https://archive.blender.org/developer/F7758917/Gloss_Pass.png) When the 2 are added together in the Denoising Albedo pass the resulting pass is washed out hence being incorrect and useless for denoising ![DenoisingAlbedo_Pass.png](https://archive.blender.org/developer/F7758926/DenoisingAlbedo_Pass.png) Blend file can be found here [Denoise_Albedo.blend](https://archive.blender.org/developer/F7758936/Denoise_Albedo.blend) Press F12 and wait for the render to finish.

Added subscriber: @adrenaline_hunter

Added subscriber: @adrenaline_hunter

I confirm the bug in real production

here an example scene: the albedo pass is causing a blurry denoise, while the DiffCol pass, wich in this case at least in teapot area seems better, does not retain all the infos (like Gloss, obviously).

non denoised scene
default.jpg

albedo denoise
albedo.jpg

diffuse denoise
diff col.jpg

albedo output
scene albedo.jpg

DiffCol output
scene diff col.jpg

full Blender scene
Cycles.blend

I confirm the bug in real production here an example scene: the albedo pass is causing a blurry denoise, while the DiffCol pass, wich in this case at least in teapot area seems better, does not retain all the infos (like Gloss, obviously). non denoised scene ![default.jpg](https://archive.blender.org/developer/F7843889/default.jpg) albedo denoise ![albedo.jpg](https://archive.blender.org/developer/F7843877/albedo.jpg) diffuse denoise ![diff col.jpg](https://archive.blender.org/developer/F7843880/diff_col.jpg) albedo output ![scene albedo.jpg](https://archive.blender.org/developer/F7843882/scene_albedo.jpg) DiffCol output ![scene diff col.jpg](https://archive.blender.org/developer/F7843886/scene_diff_col.jpg) full Blender scene [Cycles.blend](https://archive.blender.org/developer/F7843888/Cycles.blend)

Added subscriber: @Rickyx

Added subscriber: @Rickyx

Added subscriber: @JulianPerez

Added subscriber: @JulianPerez

I can confirm that too, for scenes where there are textures with small details the denoising albedo pass can't keep the texture detail. I've been combining all the color passes to have a clear albedo, but if there are textured glass or metal materials it gets trickier to fix with the color passes.

Look at this example, rendered at 64 samples only (the glass and fabric underneath would need a lot more samples to have a clean denoise), but look at the difference in the some of the fruits, especially the grapes, the denoising albedo looks weird and it doesn't seem to have enough color/texture information, so the denoise result looks more like an "artistic filter".

FruitBowl_Noisy.jpg Noisy Image

FruitBowl_DenoisingAlbedo.jpg Denoising Albedo

FruitBowl_MixedAlbedo.jpg Mixed Albedo

FruitBowl_DenoisingAlbedoOutput.jpg Denoising Albedo Output

FruitBowl_MixedAlbedoOutput.jpg Mixed Albedo Output

I can confirm that too, for scenes where there are textures with small details the denoising albedo pass can't keep the texture detail. I've been combining all the color passes to have a clear albedo, but if there are textured glass or metal materials it gets trickier to fix with the color passes. Look at this example, rendered at 64 samples only (the glass and fabric underneath would need a lot more samples to have a clean denoise), but look at the difference in the some of the fruits, especially the grapes, the denoising albedo looks weird and it doesn't seem to have enough color/texture information, so the denoise result looks more like an "artistic filter". ![FruitBowl_Noisy.jpg](https://archive.blender.org/developer/F7844006/FruitBowl_Noisy.jpg) Noisy Image ![FruitBowl_DenoisingAlbedo.jpg](https://archive.blender.org/developer/F7844010/FruitBowl_DenoisingAlbedo.jpg) Denoising Albedo ![FruitBowl_MixedAlbedo.jpg](https://archive.blender.org/developer/F7844013/FruitBowl_MixedAlbedo.jpg) Mixed Albedo ![FruitBowl_DenoisingAlbedoOutput.jpg](https://archive.blender.org/developer/F7844015/FruitBowl_DenoisingAlbedoOutput.jpg) Denoising Albedo Output ![FruitBowl_MixedAlbedoOutput.jpg](https://archive.blender.org/developer/F7844018/FruitBowl_MixedAlbedoOutput.jpg) Mixed Albedo Output
Lukas Stockner was assigned by adrenaline_hunter 2019-11-11 21:34:01 +01:00

Added subscriber: @sb_render

Added subscriber: @sb_render

untitled.png

0001.jpg

I have the same problem. See that in the render with cycles there are more details, and with the intel denoise we lost the light

![untitled.png](https://archive.blender.org/developer/F8128866/untitled.png) ![0001.jpg](https://archive.blender.org/developer/F8128864/0001.jpg) I have the same problem. See that in the render with cycles there are more details, and with the intel denoise we lost the light
Lukas Stockner was unassigned by adrenaline_hunter 2019-11-19 22:02:48 +01:00
Brecht Van Lommel was assigned by adrenaline_hunter 2019-11-19 22:02:48 +01:00

Added subscriber: @LukasStockner

Added subscriber: @LukasStockner

Added subscriber: @moisessalvador

Added subscriber: @moisessalvador

I can confirm as well, I went through the original Intel documentation and was surprised at how good results they have on their page, and the claim that Denoising Albedo is the best input for the denoiser to have. The current denoiser albedo pass is simply adding the Glossy Color pass to all the others Color passes, but the Glossy Color pass doesn't contain percentage of reflectivity for things with frenel. The intel documentation doesn't specify a correct solution though, it's up to you what passes you choose and what combination, for example, if you want to add reflections to the mix or not, and how to do it, taking just the color or the actual first bounce. My current setup is to add Diffuse Color, SSS color and Translucent color, leaving Glossy color out.

I can confirm as well, I went through the original Intel documentation and was surprised at how good results they have on their page, and the claim that Denoising Albedo is the best input for the denoiser to have. The current denoiser albedo pass is simply adding the Glossy Color pass to all the others Color passes, but the Glossy Color pass doesn't contain percentage of reflectivity for things with frenel. The intel documentation doesn't specify a correct solution though, it's up to you what passes you choose and what combination, for example, if you want to add reflections to the mix or not, and how to do it, taking just the color or the actual first bounce. My current setup is to add Diffuse Color, SSS color and Translucent color, leaving Glossy color out.

In #69770#813349, @moisessalvador wrote:
I can confirm as well, I went through the original Intel documentation and was surprised at how good results they have on their page, and the claim that Denoising Albedo is the best input for the denoiser to have. The current denoiser albedo pass is simply adding the Glossy Color pass to all the others Color passes, but the Glossy Color pass doesn't contain percentage of reflectivity for things with frenel. The intel documentation doesn't specify a correct solution though, it's up to you what passes you choose and what combination, for example, if you want to add reflections to the mix or not, and how to do it, taking just the color or the actual first bounce. My current setup is to add Diffuse Color, SSS color and Translucent color, leaving Glossy color out.

So you solved the problem? I saw many tutorial that duplicate e apply the node denoiser at every path. But I think that is not comfortable do that.

> In #69770#813349, @moisessalvador wrote: > I can confirm as well, I went through the original Intel documentation and was surprised at how good results they have on their page, and the claim that Denoising Albedo is the best input for the denoiser to have. The current denoiser albedo pass is simply adding the Glossy Color pass to all the others Color passes, but the Glossy Color pass doesn't contain percentage of reflectivity for things with frenel. The intel documentation doesn't specify a correct solution though, it's up to you what passes you choose and what combination, for example, if you want to add reflections to the mix or not, and how to do it, taking just the color or the actual first bounce. My current setup is to add Diffuse Color, SSS color and Translucent color, leaving Glossy color out. So you solved the problem? I saw many tutorial that duplicate e apply the node denoiser at every path. But I think that is not comfortable do that.
Member

This is not a bug.

The Albedo channel was designed for the original Cycles denoiser, which is completely invariant to constant shifts in feature passes. As you all noted, the Albedo pass works just fine with the original Denoiser.

Apparently the same is not true for OpenImageDenoise. In this case, we should adapt the pass to work better with it, but this is a feature request, not a bug - the channel does exactly what it was supposed to do, provide an albedo input that works fine with the original denoiser.

This is not a bug. The Albedo channel was designed for the original Cycles denoiser, which is completely invariant to constant shifts in feature passes. As you all noted, the Albedo pass works just fine with the original Denoiser. Apparently the same is not true for OpenImageDenoise. In this case, we should adapt the pass to work better with it, **but this is a feature request, not a bug** - the channel does exactly what it was supposed to do, provide an albedo input that works fine with the original denoiser.

In #69770#813352, @LukasStockner wrote:
This is not a bug.

The Albedo channel was designed for the original Cycles denoiser, which is completely invariant to constant shifts in feature passes. As you all noted, the Albedo pass works just fine with the original Denoiser.

Apparently the same is not true for OpenImageDenoise. In this case, we should adapt the pass to work better with it, but this is a feature request, not a bug - the channel does exactly what it was supposed to do, provide an albedo input that works fine with the original denoiser.

OK, but how can we solve the problem? How can we adapt the albedo?

> In #69770#813352, @LukasStockner wrote: > This is not a bug. > > The Albedo channel was designed for the original Cycles denoiser, which is completely invariant to constant shifts in feature passes. As you all noted, the Albedo pass works just fine with the original Denoiser. > > Apparently the same is not true for OpenImageDenoise. In this case, we should adapt the pass to work better with it, **but this is a feature request, not a bug** - the channel does exactly what it was supposed to do, provide an albedo input that works fine with the original denoiser. OK, but how can we solve the problem? How can we adapt the albedo?

In #69770#813352, @LukasStockner wrote:
This is not a bug.

The Albedo channel was designed for the original Cycles denoiser, which is completely invariant to constant shifts in feature passes. As you all noted, the Albedo pass works just fine with the original Denoiser.

Apparently the same is not true for OpenImageDenoise. In this case, we should adapt the pass to work better with it, but this is a feature request, not a bug - the channel does exactly what it was supposed to do, provide an albedo input that works fine with the original denoiser.

In the next few days I try to setup a basic scene that works with Cycles and LuxCore so we can compare the albedos of the two engines, afaik OIDN in LuxCore can retain the details of the textures very well.

Even if OIDN in Cycles is a great improvement at this stage is quite limited, it's a pity to left a major feature like this with these limitations.

> In #69770#813352, @LukasStockner wrote: > This is not a bug. > > The Albedo channel was designed for the original Cycles denoiser, which is completely invariant to constant shifts in feature passes. As you all noted, the Albedo pass works just fine with the original Denoiser. > > Apparently the same is not true for OpenImageDenoise. In this case, we should adapt the pass to work better with it, **but this is a feature request, not a bug** - the channel does exactly what it was supposed to do, provide an albedo input that works fine with the original denoiser. In the next few days I try to setup a basic scene that works with Cycles and LuxCore so we can compare the albedos of the two engines, afaik OIDN in LuxCore can retain the details of the textures very well. Even if OIDN in Cycles is a great improvement at this stage is quite limited, it's a pity to left a major feature like this with these limitations.
Member

@LukasStockner It looks to me like this is a thing specific to the principled BSDF, which if I'm not mistaken was added after your denoiser? A quick look in the debugger tells me that for most settings, the principled BSDF adds the white specular component to the albedo when it might be beneficial to only use the diffuse albedo.

@LukasStockner It looks to me like this is a thing specific to the principled BSDF, which if I'm not mistaken was added after your denoiser? A quick look in the debugger tells me that for most settings, the principled BSDF adds the white specular component to the albedo when it might be beneficial to only use the diffuse albedo.

In #69770#813352, @LukasStockner wrote:
This is not a bug.

The Albedo channel was designed for the original Cycles denoiser, which is completely invariant to constant shifts in feature passes. As you all noted, the Albedo pass works just fine with the original Denoiser.

Apparently the same is not true for OpenImageDenoise. In this case, we should adapt the pass to work better with it, but this is a feature request, not a bug - the channel does exactly what it was supposed to do, provide an albedo input that works fine with the original denoiser.

If I understand correctly now OIDN accepts an input that no node can generate?

> In #69770#813352, @LukasStockner wrote: > This is not a bug. > > The Albedo channel was designed for the original Cycles denoiser, which is completely invariant to constant shifts in feature passes. As you all noted, the Albedo pass works just fine with the original Denoiser. > > Apparently the same is not true for OpenImageDenoise. In this case, we should adapt the pass to work better with it, **but this is a feature request, not a bug** - the channel does exactly what it was supposed to do, provide an albedo input that works fine with the original denoiser. If I understand correctly now OIDN accepts an input that no node can generate?

For this denoiser to give the best results the albedo pass would have to combine Diffuse + SSS and Translucent passes, and I'm not sure if specular should be used too. Diffuse alone won't be enough.

For this denoiser to give the best results the albedo pass would have to combine Diffuse + SSS and Translucent passes, and I'm not sure if specular should be used too. Diffuse alone won't be enough.
Member

In #69770#814351, @Stefan_Werner wrote:
@LukasStockner It looks to me like this is a thing specific to the principled BSDF, which if I'm not mistaken was added after your denoiser? A quick look in the debugger tells me that for most settings, the principled BSDF adds the white specular component to the albedo when it might be beneficial to only use the diffuse albedo.

Right, thanks for the hint, I found what's going on. D6289 should make the albedo pass more OIDN-friendly.

> In #69770#814351, @Stefan_Werner wrote: > @LukasStockner It looks to me like this is a thing specific to the principled BSDF, which if I'm not mistaken was added after your denoiser? A quick look in the debugger tells me that for most settings, the principled BSDF adds the white specular component to the albedo when it might be beneficial to only use the diffuse albedo. Right, thanks for the hint, I found what's going on. [D6289](https://archive.blender.org/developer/D6289) should make the albedo pass more OIDN-friendly.

Added subscriber: @MaciejJutrzenka

Added subscriber: @MaciejJutrzenka

Removed subscriber: @MaciejJutrzenka

Removed subscriber: @MaciejJutrzenka

Changed status from 'Open' to: 'Resolved'

Changed status from 'Open' to: 'Resolved'

As lukas said fixed in https://developer.blender.org/D6289 apperantly i think i am closeing this as resolved.

As lukas said fixed in https://developer.blender.org/D6289 apperantly i think i am closeing this as resolved.

Added subscriber: @MaciejJutrzenka

Added subscriber: @MaciejJutrzenka

Changed status from 'Resolved' to: 'Open'

Changed status from 'Resolved' to: 'Open'

We only close bugs when the fix is committed.

We only close bugs when the fix is committed.

ah didn't know. good to know also gives me idea for another status to add in proposal!

ah didn't know. good to know also gives me idea for another status to add in proposal!

the bug will be fixed in 2.82? Any chance to test it earlier? Thanks!

the bug will be fixed in 2.82? Any chance to test it earlier? Thanks!
Member

Changed status from 'Open' to: 'Resolved'

Changed status from 'Open' to: 'Resolved'
Member

In #69770#819303, @adrenaline_hunter wrote:
the bug will be fixed in 2.82? Any chance to test it earlier? Thanks!

Should be in the next daily builds.

> In #69770#819303, @adrenaline_hunter wrote: > the bug will be fixed in 2.82? Any chance to test it earlier? Thanks! Should be in the next daily builds.

In #69770#819781, @LukasStockner wrote:

In #69770#819303, @adrenaline_hunter wrote:
the bug will be fixed in 2.82? Any chance to test it earlier? Thanks!

Should be in the next daily builds.

ok, thanks!

> In #69770#819781, @LukasStockner wrote: >> In #69770#819303, @adrenaline_hunter wrote: >> the bug will be fixed in 2.82? Any chance to test it earlier? Thanks! > > Should be in the next daily builds. ok, thanks!
Sign in to join this conversation.
No Label
Interest
Alembic
Interest
Animation & Rigging
Interest
Asset Browser
Interest
Asset Browser Project Overview
Interest
Audio
Interest
Automated Testing
Interest
Blender Asset Bundle
Interest
BlendFile
Interest
Collada
Interest
Compatibility
Interest
Compositing
Interest
Core
Interest
Cycles
Interest
Dependency Graph
Interest
Development Management
Interest
EEVEE
Interest
EEVEE & Viewport
Interest
Freestyle
Interest
Geometry Nodes
Interest
Grease Pencil
Interest
ID Management
Interest
Images & Movies
Interest
Import Export
Interest
Line Art
Interest
Masking
Interest
Metal
Interest
Modeling
Interest
Modifiers
Interest
Motion Tracking
Interest
Nodes & Physics
Interest
OpenGL
Interest
Overlay
Interest
Overrides
Interest
Performance
Interest
Physics
Interest
Pipeline, Assets & IO
Interest
Platforms, Builds & Tests
Interest
Python API
Interest
Render & Cycles
Interest
Render Pipeline
Interest
Sculpt, Paint & Texture
Interest
Text Editor
Interest
Translations
Interest
Triaging
Interest
Undo
Interest
USD
Interest
User Interface
Interest
UV Editing
Interest
VFX & Video
Interest
Video Sequencer
Interest
Virtual Reality
Interest
Vulkan
Interest
Wayland
Interest
Workbench
Interest: X11
Legacy
Blender 2.8 Project
Legacy
Milestone 1: Basic, Local Asset Browser
Legacy
OpenGL Error
Meta
Good First Issue
Meta
Papercut
Meta
Retrospective
Meta
Security
Module
Animation & Rigging
Module
Core
Module
Development Management
Module
EEVEE & Viewport
Module
Grease Pencil
Module
Modeling
Module
Nodes & Physics
Module
Pipeline, Assets & IO
Module
Platforms, Builds & Tests
Module
Python API
Module
Render & Cycles
Module
Sculpt, Paint & Texture
Module
Triaging
Module
User Interface
Module
VFX & Video
Platform
FreeBSD
Platform
Linux
Platform
macOS
Platform
Windows
Priority
High
Priority
Low
Priority
Normal
Priority
Unbreak Now!
Status
Archived
Status
Confirmed
Status
Duplicate
Status
Needs Info from Developers
Status
Needs Information from User
Status
Needs Triage
Status
Resolved
Type
Bug
Type
Design
Type
Known Issue
Type
Patch
Type
Report
Type
To Do
No Milestone
No project
No Assignees
11 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: blender/blender#69770
No description provided.