Noice (Arnold Denoiser)

The Arnold denoiser (Noice) is a stand-alone program post process denoiser executable. It works on EXR files with multiple layers and outputs an EXR file with the denoised layers. It takes into account multiple frames and multiple light AOVs. It requires variance information for all AOVs and optionally uses normal, depth and albedo. Like most denoisers, it considers a neighborhood around the current pixel and looks for similar neighborhoods inside a given search area to blend together.


Required Input Layers

The required absolute minimum inputs are the following:

  • main layer to be denoised (typically RGBA also known as "beauty")
  • variance layer that specifies the per pixel variance

Optional Feature Layers

These optional layers are used to guide denoising and will greatly improve the result:

  • Normal (N)
  • Depth (Z)
  • Albedo (diffuse_albedo)

Optional Light AOVs to be Co-Denoised

Additional light AOVs can be present in the original EXR. If requested (-l light_aov_name) these will be co-denoised with the beauty layer. This main denoising effort will be spent on beauty, so in certain areas the light AOVs might have increased noise.

Optional Additional Frames

Multiple additional frames can be specified to increase temporal stability (for instance -i render.002.exr -i render.001.exr -i render.003.exr) 


The output file will include the denoised layers with the same names as the original layers.


Pixel Neighborhood Patch Radius

For every pixel noice will consider its neighborhood patch and look for other pixels with similar neighborhood patches. The radius of this neighborhood can be controlled with the -patchradius (or -pr) command line argument. The default value is set to 3, which gives a 7x7 square neighborhood.

Pixel Search Radius

For every pixel noice will search a square area with a radius set with the command line argument -searchradius (-sr). The bigger this area the bigger the denoising stability and the higher the chance that similar neighborhoods to be considered will be found. The default value is 9, which gives a 19x19 square neighborhood.


How aggressive noice is in removing noise can be controlled by setting a variance threshold with the command line argument -variance (-v). The default value is 0.5, higher values will make the denoising more aggressive by considering similar neighborhoods that have bigger color disparities.

Input Files

Input files to noice can be specified with the command line argument -input (-i). Multiple frames can also be specified around the frame to be denoised in the following way:
   -i <current_frame> -i <additional frames in order>
   -i render.0010.exr -i render.0008.exr -i render.0009.exr -i render.0011.exr -i render.0012.exr

Light AOVs

Additional light AOVs to be co-denoised can be specified with the command line argument -aov (-l). for instance:
   -l back_lights -l RGBA -l key_light

Output File

The output file can be specified with the command line argument -output (-o).

Ass File Example

These additional AOV are optional, but the variance info for RGBA and additional AOVs to be denoised is not. The denoiser will work much better if N,Z and diffuse_albedo are provided:

   outputs 7 1 STRING
    "RGBA RGBA filter driver"
    "RGB RGB variance driver RGB_variance"
    "LPE_name RGBA filter driver"
    "LPE_name RGB variance driver LPE_name_variance"
    "diffuse_albedo RGB filter driver albedo"
    "N RGB defaultArnoldFilter@gaussian_filter driver"
    "Z RGB filter driver"


Notice that the AOVs that have the same source also have an EXR layer name specified at the end. The name of the layers is not important, but appending "_variance" seems like the clearer way to handle this.


The filters should be set up like this (here we use gaussian_filter but it could be any other filter as long as it is matched in variance_filter.filter_weights)

    name filter
    width <radius>
    name variance
    filter_weights <filter_type>
    width <radius>
    scalar_mode false

  • No labels