ノイズ・不規則さ

タービュランスノイズ

Turbulence Noise

折り返したノイズを重ねて筋や雲を作る。

7 / 10

インタラクティブデモ

デモを準備しています…

タービュランスノイズ

ドラッグで視点を回転、Ctrl(⌘)+ スクロールでズーム。タッチ操作は 2 本指です。

ひとことで

fBm の各層で、ノイズの値を絶対値にしてから足し合わせる手法です。ノイズが 0 を横切る場所が鋭い谷(折り目)になるため、滑らかな雲とは違う、筋の入った炎・ガス・大理石・雷雲のような模様が得られます。Ken Perlin の 1985 年の論文で、大理石や炎の表現として紹介されました。

ゲームでの使いどころ

  • 炎・太陽・プラズマ:デモの太陽のように、明るい筋が走る高温の表面。
  • もくもくした煙や積乱雲:丸いこぶが盛り上がる「ビロウ(billowy)」な形になります。
  • エネルギーシールドや魔法のオーラ:スクロールさせると電流が走るような質感に。
  • 大理石:sin(x + turbulence(p) * k) で縞を乱すのが古典的な作り方です。

しくみ

通常の fBm が符号付きのノイズをそのまま足すのに対し、タービュランスは各層の絶対値を足します。

turbulence(p)=∑i=0N−1g i ∣ n(λip) ∣\text{turbulence}(\mathbf{p}) = \sum_{i=0}^{N-1} g^{\,i}\,\big|\,n(\lambda^{i}\mathbf{p})\,\big|

∣n∣|n| は 0 付近で V 字に折れ曲がるため、微分が不連続な線(折り目)が生まれます。各オクターブの折り目が重なり合うことで、太い筋から細い筋までが入り組んだ模様になります。値は常に 0 以上で、折り目の部分が最小値 0 になります。

  • 値をそのまま明るさにすると、折り目が暗い筋になります(煙の割れ目)。
  • 1−turbulence1 - \text{turbulence} にすると、折り目が明るい筋になります(炎や電流)。

この「0 を横切る線を強調する」という発想をさらに推し進め、尾根を鋭く尖らせたのがリッジノイズです。

実装のポイント

  • ランプ(グラデーション)で色付け:値を直接 RGB にせず、黒→赤→橙→黄白のような 1 次元の色テーブルに通すと、一気に炎らしくなります。
  • 層ごとに異なる速度で流す:細かい層ほど速く動かすと、大きな対流の上を細かな炎が走るような動きになります。
  • HDR とブルーム:明るい筋に 1.0 を超える値を与えてブルームをかけると、発光体としての説得力が増します。

つまずきやすい点

  • 折り目のエイリアス:絶対値の折り目は高周波成分を含むので、遠景や縮小表示でちらつきます。画面上のサイズに応じてオクターブを減らします。
  • 法線がつぶれる:高さとして使うと折り目で法線が急変します。凹凸表現に使う場合は、折り目を少し丸める sqrt(n*n + ε) のような近似が有効です。
  • 平均値が上がる:絶対値を取ると平均が 0 から正の値にずれます。fBm と差し替える場合は明るさの基準を調整します。

デモで試すこと

  1. 「重ね方」を fBm とタービュランスで切り替え、太陽の表面を比べてください。タービュランスでは明るい筋が網目状に走ります。
  2. 手前のグラフの青線は第 1 オクターブの n(x)n(x)、黄色は重ねた値です。タービュランスでは、青線が 0 を横切る位置に黄色の鋭い谷ができています。
  3. 「うねりの速さ」を上げると、層ごとに異なる速度で流れ、対流する恒星のような動きになります。

参考資料

Curl-Noise for Procedural Fluid Flow ↗

分野全体の資料で、この項目を直接扱っているとは限りません。