This is an implementation of https://www.arnoldrenderer.com/research/dither_abstract.pdf. The idea is simple: path tracers (including cycles) decorrelate pixels by offsetting per-pixel prng samplers by noise. The idea of the paper is instead of using white noise for this, a blue noise mask is used instead. To control how correlated and "blue" the noise is I've added a "Coherence" option that scales the resolution of the final prng offset. The lower the resolution, the fewer distinct noise groups will be in the final render and the more "blue" the noise will look.
Anyway, here's an example image without blue noise:
And here's with blue noise:
The blue noise mask itself is a 64x64 16-bit greyscale image, it's compiled into a C file in cycles/util/util_bluenoise_mask.cpp, with some definitions in cycles/kernel/kernel_bluenoise_mask.h. If you want to generate the mask, there's a script to do so in release/datafiles/bluegen. I've packaged my blue noise mask generator into an npm module; the script in bluegen will install it and generate a mask (it uses the void-cluster method of generating 2d blue noise). If you want to play with the mask generator, you'll have to clone the browser version from here:
https://github.com/joeedh/StochasticScreenGenerator.git
. . .but note that the void cluster code is a small part of a much bigger research project. So, messy research code. :)


