No description, website, or topics provided.
Mathematica C++ C Python
Latest commit df27c0f Dec 1, 2016 @bartwronski committed on GitHub Merge pull request #8 from nicovize/master
Added new mode to compute slices incrementally for depth texture
Permalink
Failed to load latest commit information.
Images Add files via upload Sep 22, 2016
Output updated output images to versions with proper histograms Nov 7, 2016
Reference [ ] updated reference images to use correct triangular remapping Nov 8, 2016
LICENSE.txt added licence Sep 22, 2016
README.md Update README.md Sep 22, 2016
analyse.py [+] python script to do FFT analysis of images Nov 3, 2016
blue_noise.cpp Added new mode to compute slices incrementally for depth texture Nov 28, 2016
blue_noise.nb add Mathematica notebook Sep 22, 2016
blue_noise_export_util.cpp Added new mode to compute slices incrementally for depth texture Nov 28, 2016
blue_noise_export_util.h Reorganisation of code + multithreading Nov 21, 2016
blue_noise_generator.cpp Added new mode to compute slices incrementally for depth texture Nov 28, 2016
blue_noise_generator.h Added new mode to compute slices incrementally for depth texture Nov 28, 2016
blue_noise_generator_parameters.cpp Added new mode to compute slices incrementally for depth texture Nov 28, 2016
blue_noise_generator_parameters.h Added new mode to compute slices incrementally for depth texture Nov 28, 2016
config.h Added new mode to compute slices incrementally for depth texture Nov 28, 2016
math_util.h Added new mode to compute slices incrementally for depth texture Nov 28, 2016
math_util.inl Added new mode to compute slices incrementally for depth texture Nov 28, 2016
sse_util.h misc bugfix Nov 22, 2016
sse_util.inl misc bugfix Nov 22, 2016
stb_image_write.h [+] integrated stb image write for output Sep 22, 2016

README.md

BlueNoiseGenerator

This is my attempt of an implementation of a Siggraph 2016 paper "Blue-noise Dithered Sampling" by Iliyan Georgiev and Marcos Fajardo from Solid Angle. You can find the link to the paper abstract here: https://www.solidangle.com/research/dither_abstract.pdf

Motivation

Main motivation for using blue noise is avoiding "clumping" of noise and by using only high frequency of signal, getting perceptually better sample distribution. Blue noise can be used for dithering, offsetting samples, covering space (for example uniform disk sampling).

Mikkel Gjol and Mikken Svendsen from Playdead have shown some excellent examples of its use in their GDC presentation "Low complexity, high fidelity - rendering of INSIDE": http://www.gdcvault.com/play/1023002/Low-Complexity-High-Fidelity-INSIDE http://f0716f2bff707a1b9e85-36c178e006d3d30c5b9c8dd905f8236a.r70.cf2.rackcdn.com/rendering_inside.pdf

Implementation

Implementation is pretty straightforward implementation of the Siggraph 2016 paper with my attempts to make it "generalized" for more dimensions and larger vector values. More than 2 dimenstions are useful for either volumetric effects, or treating time as next, 3rd or 4th dimension. Vectors of variables can be used for things like vectors of many independent random variables (radius and angle in polar coordinates). NOTE: I tested so far only 2 and 3 dimensions. :)

It's implemented in standard C++ style, without any extravaganza. Single file, compile it with clang or MSVS as a console app.

Also added a Mathematica helper visualization notebook https://github.com/bartwronski/BlueNoiseGenerator/blob/master/blue_noise.nb

Results

Given some 16 by 16 intial distribution:

Image

With following white-noise-like Fourier distribution:

Image

Algorithm generates following pattern:

Image

With following Fourier distribution (less low frequencies):

Image

It works great under repetition / tiling!

Image

Here is an example of it working on a 2D vector:

Image

Slice 1 of this vector:

Image

Slice 2 of this vector:

Image

Slightly more clumpy, but still pretty decent, here is Fourier of 1st slice and the whole image:

Image

Image

TODO

Support different sized of different dimensions sizes (for example for 3D noise having less depth slices).