A$0+

Temporal Denoising Toolkit for Blender

10 ratings
I want this!

Temporal Denoising Toolkit for Blender

A$0+
10 ratings

Blender compositing node group for temporal denoising of animations.

This is used to reduce the flickering or shimmering between frames of an animation.

This node group requires multi-layer EXR files as input containing these layers:

  • Vector (required)
  • Denoising Data (recommended)
  • Environment (when applicable)

The node group will intelligently combine multiple frames of animation and reduce temporal noise across the frames. This will allow the the spatial denoiser (OpenImageDenoise) to achieve a higher quality result.

Version History

V1.1, 1st September 2024, tested on Blender 4.2 (compatible with previous versions)

  • Fix for when the source images have transparency (even if the alpha is 1.0). In V1.0 it was using the alpha channel from the previous/next image even when that image was cropped due to being offscreen. Now it always uses the alpha channel from the current image, by simply reordering the inputs to the Mix Colour node.

V1.0, 6th May 2023, for Blender 3.5+

  • Initial release

Additional Info

  • Check out my YouTube video for more details, including a temporal denoising comparison between OptiX and my node group.
  • Create a Blender project for compositing, and append the Temporal Denoising node group (this download).
  • Load your EXR image sequence in the compositor, and duplicate twice. Set the Offset value so that the current, previous and next frames can be accessed. Connect the Combined and Vector layers to the Temporal Denoising node group.
  • Use the Hue/Saturation/Value Threshold values to restrict blending of dissimilar areas (shadow/non-shadow or simply where the lighting changes significantly). A threshold value of 1.0 disables that threshold. Often the Value Threshold must be set quite low (e.g. 0.05) to avoid shadow problems. (Which is counter productive for reducing temporal/spatial noise.)
  • The Max Weight setting controls the mix balance between current frame and the next/previous frames. The default value of 0.3 indicates that the next/previous frames can have up-to 30% contribution (each), and the current frame will have at-least 40%. You could use 33.3% for an equal weighting, or say 25%/25%/50% to reduce any artefacts.
  • You have the option of performing spatial denoising (Denoise node) before or after temporal denoising. It is designed to be used in conjunction with spatial denoising, because using temporal denoising only will not denoise as thoroughly.
  • Best results will be achieved if you are able to render Shadows separately. It may be possible to do this using the Shadow Catcher in simple scenes.
  • The Temporal Denoising (Debug) node group has tools for visualising motion vectors.
  • At this point the node group is designed for denoising across three frames, but it could be extended to work across more frames.

Limitations

  • The motion vectors calculated by Blender are incorrect when the camera focal length is animated. The problem was raised in issue #69731 and is flagged as a known limitation of the code. This means that if you animate your camera zoom, then the calculations for temporal denoising will be wrong and lead to significant ghosting.

    If focal length animation only applies to a small portion of your animation, you may be able to rely on spatial denoising only for this section possibly with additional render samples, and only use temporal denoising for other parts of your animation.

    When I get time, I will be looking at the Blender code and seeing what can be done. I've committed a fix to the Blender codebase which was merged to the Blender 4.3 release branch on October 15th 2024.
A$
I want this!

Blender file with compositing node groups.

Copy product URL
30-day money back guarantee

Ratings

5
(10 ratings)
5 stars
100%
4 stars
0%
3 stars
0%
2 stars
0%
1 star
0%