Can we have non destructive denoising?

Hi,

the denoising in Cycles works pretty great but the way it’s implemented really limits its usability. In other renderers, denoising has one very powerful feature - it is not destructive. If you choose to denoise your render, you have either an option to blend the denoiser result with the undenoised one, or you have an option to store denoised result in a separate VFB buffer, and do the blending yourself in post.

Having an ability to blend denoised result with undenoised one has several benefits:

  1. Denoiser produces ultra clean surfaces, which often look to uncanny and unrealistic. Cameras usually capture images with at least a little bit of noise, so super clean images just look uncanny. Blending fixes this

  2. Due to the threshold-based nature of denoiser, at certain places, it often generates small pools of noise in the areas under the threshold, which neighbour with completely denoised, super clean areas. These transitions are very unnatural. Blending fixes this as well.

  3. Denoiser occasionally removes too much detail on some fine geometry or textures, blending just a little bit of original render back onto the denoised result usually reintroduces enough of high frequency detail to make the area believable.

  4. Blending in the original noisy render often helps to cover up slight splotchiness/smudges caused by denoising.

  5. Denoising is no longer a destructive decision

Here are some examples:
Render without denoising (a bit noisy but fast):

Denoised render (too artificially clean, some detail loss on the structure of floor texture):

Blended result - 70% denoise influence (a right balance):

The only way to achieve the result right now, unfortunately, is to render twice, once with the denoiser and once without, which effectively negates most of the speed benefit introduced by the denoiser.

From what I understand, this would not be that hard to implement and would have tremendous impact on the usability of the denoiser. Ideal scenario would be ability to have a 0-1 blend value in the denoiset rollout, where 0 is not applied and 1 is fully applied, but if that’s too much to ask, then at least a simple ability to store undenoised result as another render pass, so I can do the blend in compositor myself. It would be a worse workflow, but better than nothing.

Thanks in advance.

4 Likes

In a way this is possible already, though it requires additional work. The individual render passes are not denoised, regardless of the denoiser settings you choose. Only the combined pass receives denoising. So by enabling all the other render passes and combining them together using the formula described here https://docs.blender.org/manual/en/dev/render/cycles/settings/scene/render_layers/passes.html , you can mix your denoised result with the undenoised one, without having a ton of render overhead. See this example screenshot, where I combine Diffuse and Glossy passes, set the Alpha from the Combined pass to the result, and then blend that with the denoised Combined pass at the end:

1 Like

Thanks, I guess that’s somewhat feasible workaround. Hopefully we will get a proper solution too, though :slight_smile:

agreed, a simple non-denoised beauty pass would speed up the lookdev stage!

Even better: enabling “experimental” Feature set in cycles render panel lets you use a hidden “denoising” render pass (in render passes panel), which is actually the original noisy render, that you can mix at will with the denoised image. Just one node. I guess/hope it’s going to be out of experimental soon.

2 Likes

Ohhhhh… nice… Thank you :slight_smile: So it’s already pretty much implemented, just not very streamlined yet.

Yes, not streamline. Starting from the name: denoising… Shouldn’t it be Undenoised?
Not handy so far, but it makes the job.
Btw, you could also add plain noise instead of bringing back the original render one. That is prone to be heavier in some part of the image, and less in others. While plain noise would give you that film-like uniformity

The point is that original noisy render does also contain detail lost by denoising, instead of just random noise. It’s especially obvious when denoising blurs some of your textures or some very fine geometry like grass. If you just keep completely denoised one, and throw random noise on top, you won’t get any of that detail back, you just get that smudge with noise on top. While if you blend in the original render, you get little bit of the noise back making it look more natural, but more importantly, also big of the lost detail back :slight_smile:

Forgot to link this here: https://developer.blender.org/D3608

Great!
thanks (as always)