AtrousParams

The parameters of the edge-avoiding à-trous filter (rendering-revamp §RVR-7).

In the namespace construct::denoise. Declared in src/libs/libconstruct/construct/denoise/AtrousFilter.hpp.

Detailed description

Holger Dammertz, Daniel Sewtz, Johannes Hanika and Hendrik Lensch, "Edge-Avoiding À-Trous Wavelet Transform for fast Global Illumination Filtering", HPG 2010, https://jo.dreggn.org/home/2010_atrous.pdf.

Each pass is a 5 x 5 B3-spline kernel with holes: pass i reads its neighbors 2^i pixels apart. A neighbor's weight is the kernel weight times three edge stops:

  • color: exp(-|c_q - c_p|^2 / s_c^2), with s_c = sigmaColor * 2^-i * (luminance(c_p) + 0.01), so the stop is the same at every exposure and tightens with each pass, as Dammertz halves it;
  • normal: exp(-|n_q - n_p|^2 / sigmaNormal^2);
  • plane: exp(-(n_p . (x_q - x_p))^2 / (sigmaPlane * s_x)^2), with s_x the world size of 2^i pixels at the center's distance. A neighbor on the center's tangent plane passes at any slant; one in front of or behind it does not.

The filter works on the radiance divided by the albedo, so a pattern in the albedo is not blurred, and multiplies the albedo back in its last pass. A pixel with no hit (depth 1) passes through unchanged, and a hit pixel gives no weight to one.

In this section