Antithetic sampling for modulated light

These tutorials look more closely at antithetic sampling for the modulated-light render passes. With a high-frequency modulation, the light that reaches a pixel along many paths largely cancels out, and independent samples of it, with random signs, cancel only slowly. Antithetic sampling pairs every sampled path with a nearby path whose modulation has the opposite sign, so each pair cancels the way the true signal does.

Each tutorial compares antithetic and naive sampling at equal rendering time, on the indirect light of the Cornell box (the scene of the ToF rendering tutorials), with references rendered by naive sampling with 262,144 samples per pixel. The error is the relative mean squared error, \(\mathrm{relMSE} = \overline{(I - I_\mathrm{ref})^2} / \overline{I_\mathrm{ref}^2}\). The numbers were measured on an NVIDIA GeForce RTX 3090 with Vulkan; frame counts and errors depend on the GPU. The scripts need matplotlib.

Antithetic CW-ToF rendering of the Cornell box
CW-ToF: modulation wavelength

Find the antithetic vertex by Newton’s method on barycentric coordinates, and see how the gain changes with the wavelength.

CW-ToF: antithetic sampling and the modulation wavelength
Antithetic structured-light rendering of the Cornell box
Structured light: pattern wavelength

Mirror the projector coordinate within the period of a cos pattern, at three pattern wavelengths.

Structured light: antithetic sampling and the pattern wavelength
Antithetic rendering with an arbitrary binary code
Structured light: binary codes

Aperiodic codes: XOR codes and random balanced blocks, and arbitrary codes with optimal-transport and scale-based maps.

Structured light: antithetic sampling for binary codes