void-and-clusterアルゴリズム
#Blue_Noise #テクスチャ #アルゴリズム
void-and-clusterアルゴリズムは、Blue Noiseのテクスチャを作る際に用いるアルゴリズム
The void-and-cluster method for dither array generationで提案された
Alan Wolfeによる解説と実装
https://blog.demofox.org/2019/06/25/generating-blue-noise-textures-with-void-and-cluster/
https://github.com/Atrix256/VoidAndCluster
手順
マップの準備
まず普通に完全ランダムのノイズの2値マップを作る
Alan Wolfeの記事ではしきい値は0.1くらいに設定してある
もう一枚、出力用の空のマップを作る
入れ替えフェーズ
この段階ではまだ出力マップは触りません
2値マップにガウシアンカーネル使ってローパスかけて密度場を計算
ここのガウシアンのσによってBlue Noiseのスペクトルの形が変わってくる
1のピクセルのうち一番密なところを抜き、0のピクセルのうち一番疎なところを埋める
収束するまで繰り返す
この結果を「プロトタイプ2値パターン」として保存しておく
除去フェーズ
ここから出力マップを触っていきます
2値マップにガウシアンカーネル使ってローパスかけて密度場を計算
一番密なところの1を2値マップから抜き、出力マップの同じ座標に順序を挿入する
最終的に2値マップの1がなくなるまで続ける
挿入フェーズ
2値マップをプロトタイプパターンにリセットする
一番疎なところの0を2値マップに埋め、出力マップの同じ座標に順序を挿入する
最終的に2値マップの0がなくなるまで続ける
原論文では、このフェーズが「1の最大空白に埋める」と「0の最密に埋める」の2フェーズに分かれているが、結局行っている操作の意味合いは変わらない……はず