openrndr / orx

A growing library of assorted data structures, algorithms and utilities for OPENRNDR
https://openrndr.org
BSD 2-Clause "Simplified" License
122 stars 37 forks source link

Add blue noise #66

Open ricardomatias opened 4 years ago

ricardomatias commented 4 years ago

Resources

hamoid commented 4 years ago

strange to say this but... those noises are beautiful :) Thank you for the links.

hamoid commented 4 years ago

From the 3rd link above:

Update 2nd April 2020. Tommy Ettinger has provided corresponding Java code which is around 20x faster than this python code. As an indication, it generates balanced permutations of length n=16 in about one millisecond, and balanced permutations of length n=56 in about one second.

https://github.com/tommyettinger/sarong/blob/master/src/test/java/sarong/PermutationEtc.java

I wonder if that repo has useful random number generators for us: https://github.com/tommyettinger/sarong

hamoid commented 4 years ago

A C++ implementation from 2016 https://github.com/bartwronski/BlueNoiseGenerator

hamoid commented 3 years ago

A post showing blue noise dithering https://surma.dev/things/ditherpunk/

A comment about that post in hackernews:

linuxlizard -> Back when I worked at Marvell Semiconductor (circa 2005), we made laser printer ASICs for HP. We did a lot of dithering in hardware. We had a hardware block that did error diffusion, we had a hardware block that did regular diffusion. We also had a hardware block that did Blue Noise. I was responsible for implementing the firmware that drove those printers' scan/copy path: scan an image in monochrome, run through the dither hardware to create the bit pattern fed to the laser engine.No one could explain to me how to use the blue noise block. I couldn't understand what the blue noise block was doing. This is the first article that explained, in terms I could understand, how blue noise dithering works.I can die happy. Thank you.

hamoid commented 3 years ago

This site includes 10+ posts about blue noise: https://blog.demofox.org/

And it links to this GPU implementation https://github.com/jdupuy/BlueNoiseDitherMaskTiles

It sounds like generating blue noise textures is too expensive to do in real time. Here they are free to download: http://momentsingraphics.de/BlueNoise.html and this is the zip file: http://momentsingraphics.de/Media/BlueNoise/FreeBlueNoiseTextures.zip Now I'm trying to figure out how to use those textures.

Update: it seems that my desired use case is described in this paper: http://johanneskopf.de/publications/blue_noise/paper/Recursive_Wang_Tiles_For_Real-Time_Blue_Noise.pdf in point 6.2

A video about the same paper found by Ricardo: https://www.youtube.com/watch?v=0NMmB-IlDsk