ひとことで
ノイズが 0 を横切る線を尖った尾根に変えて重ねる、山脈づくりのための多重フラクタルノイズです。F. Kenton Musgrave が『Texturing and Modeling』で体系化しました。ふつうの fBm が作る丸い丘ではなく、稜線が連なる険しい山並みや、枝分かれする谷筋のような地形が得られます。
ゲームでの使いどころ
- 山脈・峡谷のあるオープンワールド:遠景の山並みのシルエットに説得力が出ます。
- 地形の組み合わせ:平野は fBm、山岳地帯はリッジノイズと、バイオームごとに高さ関数を切り替えてブレンドするのが定番です。
- 稲妻・血管・ひび:2D でリッジの値を明るさに使うと、枝分かれする光の筋になります。
- 雪や岩の配置:尾根の鋭さ(曲率)や斜面の傾きを使って、雪を積もらせる場所や岩肌を出す場所を決められます。
しくみ
各オクターブで次の変換をしてから足し合わせます。
が 0 になる場所(ノイズの等高線 0)で は最大の 1 になり、そこから離れると急に下がります。指数 (デモの「尾根の鋭さ」)を大きくするほど尾根は細く尖ります。
さらに「多重フラクタル」と呼ばれる理由は、前の層の値で次の層を重み付けする点にあります。
尾根の上( が大きい)では次の層の細部がしっかり乗り、谷( が小さい)では細部が抑えられます。これで「山頂はごつごつ、谷底はなだらか」という、侵食された実際の地形に近い性質が生まれます。素の fBm がどこでも同じ粗さになるのとは対照的です。
実装のポイント
- オフセット:Musgrave の原式では
offset - |n|(offset ≈ 1)を使い、この値で尾根の高さと谷の深さのバランスを調整します。 - 高さの再マップ:出力は 0.3〜0.8 付近に偏りがちです。海面や平地の割合を決めるために、曲線(べき乗やカーブアセット)で再マップしてから使います。
- 侵食と組み合わせる:リッジノイズは尾根の形を作るのは得意ですが、谷に堆積した平地は作れません。熱侵食や水食侵食を後段にかけると、急斜面の下に土砂が溜まり自然になります。
つまずきやすい点
- 尾根が格子に沿う:低周波の層ほど格子の癖が尾根の向きに出ます。層ごとに座標を回転させると改善します。
- 尖りすぎ:指数を上げすぎると 1 頂点幅の針のような尾根になり、メッシュ解像度によってはギザギザに見えます。地形の頂点間隔と相談して決めます。
- 重み付けの暴走:重みの係数 が大きすぎると細部が全域に乗り、ただのノイズの塊になります。
デモで試すこと
- 「ノイズ」を通常の fBmとリッジで切り替えて、山のシルエットを比べてください。黄色の断面線を見ると、リッジでは山頂が V 字に尖っています。
- 「尾根の鋭さ」を 1 から 4 まで動かすと、丸みのある山から鋭い岩峰へと変わります。
- 「オクターブ数」を 1 にすると、ノイズの 0 等高線がそのまま 1 本の尾根になる様子が分かります。