Noise & irregularity

Worley / Cellular Noise

ウォーリーノイズ

特徴点への距離から細胞や石の境界を作る。

5 / 10

Interactive demo

Preparing the demo…

Worley / Cellular Noise

Drag to orbit, Ctrl/⌘ + scroll to zoom. Use two fingers on touch screens.

This explanation is currently available in Japanese.

ひとことで

空間に特徴点をばらまき、各点から「最も近い特徴点までの距離」を値にするノイズです。1996 年に Steven Worley が発表しました。結果はボロノイ図と同じ区画構造を持ち、細胞・石畳・ひび割れ・うろこ・水面のコースティクスなど、境界のある模様を作るのが得意です。

ゲームでの使いどころ

  • 石畳・タイル・岩肌:2 番目と 1 番目の距離の差(F2−F1)は区画の境目で 0 になるので、目地のある床をテクスチャなしで作れます。
  • 溶岩や乾いた大地のひび割れ:同じ F2−F1 を溝と発光に使うと、デモのような割れ目から光が漏れる地面になります。
  • 生物的な模様:細胞、皮膚、うろこ、泡、ハチの巣状のシールド。
  • 水面の揺らめく光:特徴点を時間で動かした F1 は、プールの底に映るコースティクスのような模様になります。
  • 破壊表現:3D のウォーリー(ボロノイ)区画は、オブジェクトを破片に割るボロノイ破砕の基本です。

しくみ

空間を格子に分け、各セルに特徴点を 1 つずつ置きます(位置はセル座標のハッシュで決める)。点 p\mathbf{p} の値を求めるには、自分のセルと周囲 8 セル(3D なら 26 セル)の特徴点との距離を調べ、小さい順に

F1=min⁡i∣p−fi∣,F2=2 番目に小さい距離F_1 = \min_i |\mathbf{p} - \mathbf{f}_i|, \qquad F_2 = \text{2 番目に小さい距離}

を得ます。特徴点がセル内にしかないので、近傍 3×3 だけ調べれば最近傍が必ず見つかります。

値見た目用途
F1F_1点の周りがくぼむ細胞状泡、細胞、コースティクス
F2−F1F_2 - F_1区画の境界で 0 の網目石畳、ひび割れ、うろこ
最近傍の ID区画ごとに一様な色ステンドグラス、色の違う石

距離の測り方を変えると印象も変わります。ユークリッド距離なら丸い区画、マンハッタン距離なら角ばった結晶状、チェビシェフ距離なら四角いタイル状になります。

実装のポイント

  • 特徴点のばらつき:ハッシュで得た位置を 0.5 付近に寄せると、規則的なタイルに近づきます。デモの「特徴点のばらつき」を 0 にすると正方形の格子になります。
  • アニメーション:特徴点の位置に sin(time + phase) を足すと、区画がうごめきます。移動量がセルからはみ出ない範囲なら 3×3 の探索で正しく求まります。
  • 正確な境界線:F2−F1 は境界からの厳密な距離ではありません。均一な太さの目地が必要なら、Inigo Quilez の「Voronoi edges」のように 2 パス目で境界までの距離を求めます。

つまずきやすい点

  • 探索範囲が足りない:特徴点を大きく動かしたり、セルあたり複数の点を置いたりすると、3×3 の外に最近傍が出て模様が欠けます。範囲を 5×5 に広げるか、移動量を制限します。
  • コスト:2D で 9 点、3D で 27 点の距離計算が必要で、パーリンノイズより重くなります。静的な模様ならテクスチャに焼き込みます。
  • F2 の不連続:F2 自体は区画の配置が変わる場所で折れ目を持ちます。法線を差分で求めると境目に影のアーティファクトが出ることがあります。

デモで試すこと

  1. 「使い方」を F1 → 石畳 → 溶岩のひび と切り替えてください。どれも同じ特徴点(水色の点)から計算しています。
  2. 「特徴点のばらつき」を下げていくと、自然な石畳が規則的なタイルに変わります。
  3. 「特徴点を動かす」をオンにすると、区画の境界が押し合いながら変形します。セル単位で計算しているので、動かしても全体の計算量は変わりません。

References

Curl-Noise for Procedural Fluid Flow ↗

A general reference for this subcategory.