This explanation is currently available in Japanese.
ひとことで
ノイズの値ではなく、ノイズを評価する座標そのものを別のノイズでずらす手法です。 の代わりに を計算するだけで、うねり・渦・流れ込みを含んだ複雑な模様が生まれます。Inigo Quilez の解説で広く知られるようになりました。
ゲームでの使いどころ
- 大理石・木目・瑪瑙:まっすぐな縞を歪ませるだけで、本物らしい石目になります。
- 溶岩・ガス惑星・異世界の空:時間で歪みをゆっくり動かすと、流体が渦を巻いているように見えます。
- 地形の「流れた」形:高さマップの入力座標を歪ませると、侵食で流されたような尾根や河岸段丘らしい形が出ます。
- 魔法のエフェクト:歪ませる強さを演出で上げ下げすると、空間がねじれるような表現になります。
しくみ
1 回だけ歪ませる場合は、2 つの独立したノイズでずらし量のベクトルを作ります。
は 2 つの成分を無相関にするための任意のオフセット、 は歪みの強さです。これを入れ子にすると、ずらし量自体も歪みます。
歪ませる元の関数 は何でも構いません。縞、格子、fBm、テクスチャ参照でも同じ考え方が使えます。途中の や の大きさを色付けに使うと、流れの「濃い部分」が強調されて、さらに複雑な配色が得られます。
実装のポイント
- コストに注意:2 段の歪みを fBm で行うと、fBm を 5 回評価します(オクターブ数 × 5 のノイズ評価)。リアルタイムなら内側の fBm のオクターブを減らすか、低解像度のテクスチャに書き出して使います。
- アニメーションは内側に入れる:時間を歪み()の側に入れると、形がゆっくり流れて変化します。最後の に入れると単に模様が平行移動するだけになります。
- 強さの目安: が 1 未満だと穏やかな揺らぎ、4 以上だと元の模様が分からないほど渦を巻きます。
つまずきやすい点
- 高周波が増える:強く歪ませると、座標が急に変化する場所で模様が細かく詰まり、遠景でちらつきます。ミップマップが効かない手続き的な模様では特に目立ちます。
- 法線の計算:高さとして使う場合、歪んだ関数を差分するので評価回数がさらに増えます。
- 厳密な流れではない:流れているように見えても、質量保存などの物理的な性質はありません。流れの向きを制御したいならフローマップを使います。
デモで試すこと
- 「元の模様」を格子にして「歪ませる強さ」を 0 から上げてください。参照座標がどれだけ曲げられているかが直接見えます。
- 縞(大理石)に戻して「歪ませる回数」を 0 → 1 → 2 と増やすと、平行な縞が石目になり、さらに入り組んだ模様へと変わります。
- fBm(溶岩)で「流れる速さ」を上げると、歪みの内側に入れた時間によって溶岩が渦を巻きながら流れます。