水・地形・植生

水食侵食

Hydraulic Erosion

水と土砂の移動で谷や流路を掘る。

8 / 10

インタラクティブデモ

デモを準備しています…

水食侵食

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

ひとことで

雨粒が山肌を流れ下りながら土を削り、運び、流れが緩んだ所に落とす様子をまねて、地形に谷筋や扇状地を刻む方法です。fBm などのノイズで作った地形は、どこを見ても同じような凹凸になりがちですが、水食侵食をかけると、枝分かれした谷、尾根、ふもとの平地といった「水が作った地形」らしさが一気に出ます。

ゲームでの使いどころ

  • 地形の自動生成:オープンワールドや手続き生成のマップで、ノイズの地形に侵食をかけてリアルな山並みにします。World Machine、Gaea、Houdini などの地形ツールの中心機能です。
  • 川や湖の配置の手がかり:たくさんの雨粒が通った道は川の候補になり、土がたまった平地は湖や集落の候補になります。
  • テクスチャの塗り分け:削れた所は岩肌、たまった所は砂や土、というように、侵食の結果をそのまま地面の色や植生(バイオームマップ)に使えます。
  • ゲーム中の変化:頻度は低いですが、雨で地形が変わるシミュレーション系のゲームにも使われます。

しくみ

ここでは、雨粒を 1 粒ずつ動かす方法(パーティクル式、Hans Theobald Beyer の手法として知られる)を説明します。

  1. 雨粒を置く:地形のランダムな位置に、水の量 1、速さ 1、運んでいる土 0 の雨粒を置きます。
  2. 下り坂へ進む:その位置の勾配(高さの傾き)を周りの 4 点から求め、下り方向へ 1 マス進みます。前の向きを少し残す(慣性)と、雨粒がまっすぐ進みやすくなります。
  3. 運べる土の量を求める:速く、水が多く、急に下るほど多く運べます。
C=max⁡(−Δh⋅v⋅w⋅k容量,  Cmin⁡)C = \max\big(-\Delta h \cdot v \cdot w \cdot k_{\text{容量}},\; C_{\min}\big)

Δh\Delta h は進んだ前後の高さの差(下りなら負)、vv は速さ、ww は水の量です。

  1. 削るか、落とすか:
    • 運んでいる土が CC より少なければ、余裕の一部だけ地面を削って持ち上げます。ただし、下った高さより深くは削りません(くぼみを掘りすぎないため)。
    • 多ければ、超えた分の一部を元の位置に落とします。上り坂に差しかかった場合は、くぼみを埋めるように落とします。
  2. 速さと水を更新する:下った分だけ速くなり(v2←v2−Δh gv^2 \leftarrow v^2 - \Delta h\, g)、水は少しずつ蒸発します。水がなくなるか、地図の外に出るか、決まった歩数を超えたら終わりです。

これを何万粒もくり返すと、雨粒がよく通る道ほど深く削れ、さらに多くの雨粒が集まるようになります。この「正のフィードバック」で、枝分かれした谷が育っていきます。

実装のポイント

  • 削るときは筆のように広げる:1 点だけ削ると、針で刺したような細い穴が並びます。半径 2〜4 マスの円に、中心ほど重くなるよう分けて削ります。
  • 落とすときは 4 点に分ける:雨粒は格子の間にいるので、双線形補間の重みで 4 つの格子点に分けて落とします。
  • 何粒流すか:格子のマス数と同じくらいの粒数から効果が見え始めます。多すぎると山全体が削られて平らになってしまうので、見た目で止めどころを決めます。
  • GPU で並列に:雨粒同士はほぼ独立なので、GPU で数十万粒を同時に動かせます(同じマスへの書き込みが重なる点は、多少の誤差として許容することが多いです)。格子全体で水と土の流れを解く浅水波モデルベースの方法も GPU 向きです。

つまずきやすい点

  • やりすぎて平らになる:地図の外へ流れ出た雨粒は土を持ち去るので、流しすぎると全体が低くなっていきます。回数を制限するか、地図の端で土を落とさせます。
  • 小さな穴やトゲ:削る量や落とす量が大きすぎると、1 マスだけの穴や突起ができます。筆の半径を広げ、1 回の量を小さくします。
  • 侵食だけでは崖が残る:水食侵食は谷を刻みますが、切り立った崖はそのまま残りがちです。熱・崩落侵食を交互にかけると、崖が崩れて自然な斜面になります。

デモで試すこと

  1. 「雨粒の通り道」の青い線は、最新の雨粒がたどった経路です。斜面を下り、谷に集まっていく様子を見てください。
  2. 雨を降らせ続けると、山肌に枝分かれした谷筋が刻まれていきます。止まったら「色」を「削れた所 / たまった所」にすると、赤い谷筋と、ふもとに広がる青い堆積地がはっきり見えます。
  3. 「元の地形に戻す」を押し、「削る強さ」を上げてからやり直すと、谷が深く鋭くなります。
  4. 「慣性」を上げると、雨粒が曲がりにくくなり、谷がまっすぐで太くなります。

参考資料

GPU Gems — Effective Water Simulation ↗

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