Noise & irregularity

Domain Warping

ドメインワーピング

参照座標をノイズで歪めて炎や大理石模様を作る。

9 / 10

Interactive demo

Preparing the demo…

Domain Warping

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

This explanation is currently available in Japanese.

ひとことで

ノイズの値ではなく、ノイズを評価する座標そのものを別のノイズでずらす手法です。f(p)f(\mathbf{p}) の代わりに f(p+q(p))f(\mathbf{p} + \mathbf{q}(\mathbf{p})) を計算するだけで、うねり・渦・流れ込みを含んだ複雑な模様が生まれます。Inigo Quilez の解説で広く知られるようになりました。

ゲームでの使いどころ

  • 大理石・木目・瑪瑙:まっすぐな縞を歪ませるだけで、本物らしい石目になります。
  • 溶岩・ガス惑星・異世界の空:時間で歪みをゆっくり動かすと、流体が渦を巻いているように見えます。
  • 地形の「流れた」形:高さマップの入力座標を歪ませると、侵食で流されたような尾根や河岸段丘らしい形が出ます。
  • 魔法のエフェクト:歪ませる強さを演出で上げ下げすると、空間がねじれるような表現になります。

しくみ

1 回だけ歪ませる場合は、2 つの独立したノイズでずらし量のベクトルを作ります。

q(p)=(f(p+a),  f(p+b)),pattern(p)=f(p+k q(p))\mathbf{q}(\mathbf{p}) = \big(f(\mathbf{p} + \mathbf{a}),\; f(\mathbf{p} + \mathbf{b})\big), \qquad \text{pattern}(\mathbf{p}) = f\big(\mathbf{p} + k\,\mathbf{q}(\mathbf{p})\big)

a,b\mathbf{a}, \mathbf{b} は 2 つの成分を無相関にするための任意のオフセット、kk は歪みの強さです。これを入れ子にすると、ずらし量自体も歪みます。

r(p)=q(p+k q(p)),pattern(p)=f(p+k r(p))\mathbf{r}(\mathbf{p}) = \mathbf{q}\big(\mathbf{p} + k\,\mathbf{q}(\mathbf{p})\big), \qquad \text{pattern}(\mathbf{p}) = f\big(\mathbf{p} + k\,\mathbf{r}(\mathbf{p})\big)

歪ませる元の関数 ff は何でも構いません。縞、格子、fBm、テクスチャ参照でも同じ考え方が使えます。途中の q\mathbf{q} や r\mathbf{r} の大きさを色付けに使うと、流れの「濃い部分」が強調されて、さらに複雑な配色が得られます。

実装のポイント

  • コストに注意:2 段の歪みを fBm で行うと、fBm を 5 回評価します(オクターブ数 × 5 のノイズ評価)。リアルタイムなら内側の fBm のオクターブを減らすか、低解像度のテクスチャに書き出して使います。
  • アニメーションは内側に入れる:時間を歪み(r\mathbf{r})の側に入れると、形がゆっくり流れて変化します。最後の ff に入れると単に模様が平行移動するだけになります。
  • 強さの目安:kk が 1 未満だと穏やかな揺らぎ、4 以上だと元の模様が分からないほど渦を巻きます。

つまずきやすい点

  • 高周波が増える:強く歪ませると、座標が急に変化する場所で模様が細かく詰まり、遠景でちらつきます。ミップマップが効かない手続き的な模様では特に目立ちます。
  • 法線の計算:高さとして使う場合、歪んだ関数を差分するので評価回数がさらに増えます。
  • 厳密な流れではない:流れているように見えても、質量保存などの物理的な性質はありません。流れの向きを制御したいならフローマップを使います。

デモで試すこと

  1. 「元の模様」を格子にして「歪ませる強さ」を 0 から上げてください。参照座標がどれだけ曲げられているかが直接見えます。
  2. 縞(大理石)に戻して「歪ませる回数」を 0 → 1 → 2 と増やすと、平行な縞が石目になり、さらに入り組んだ模様へと変わります。
  3. fBm(溶岩)で「流れる速さ」を上げると、歪みの内側に入れた時間によって溶岩が渦を巻きながら流れます。

References

Curl-Noise for Procedural Fluid Flow ↗

A general reference for this subcategory.