セルラーノイズ - saitocastel1900/UnityShader GitHub Wiki

  • セルラーノイズとは、あるピクセルにおいて複数のランダムな点から最も近い点の距離を出力するノイズのこと

  • マス目の位置とピクセル描画点を計算する

float2 ist = floor(st); 
float2 fst = frac(st);
  • ループで距離を計算しているが、-1から始めることで相対的に自分を包む前のマス目も計算する
for (int y = -1; y <= 1; y++)  
for (int x = -1; x <= 1; x++)
{
  • ランダムな点を取得するために、「float2 p = 0.5 + 0.5 * sin(random2(ist+neighbor) +_Time.x *_WaveSpeed);」で取得している
  • 早速ランダムな点とピクセルの距離を求めたいが、このままだと相対的な座標なので絶対的な座標に戻す必要がある。ランダムな点neighborを足して距離を求めることで、ピクセルを基準とした格子にあるランダムな点として距離を求めることができる
diff = neighbor + p - fst;
  • min()を使うことで、求めた長さを比較して最小の距離(最も近い)を求めると完成!
distance = min(distance, length(diff));

258672235-7ec14766-b620-4860-98c0-1c3e983c97f1