Simutrans Advent Calendar 2025 11日目の記事となります。

Simutrans Advent Calendar 2025 - Adventar

最近Simutransはご無沙汰しておりまして、他のことでいろいろ忙しい日々を過ごしております。大遅刻をかましてしまい申し訳ございません… (仕事もそうだし、主に他のゲーム原神やランニングに時間を割かれております。)

ということで、今回は昨年の記事に引き続き、マップ関連のお話をしていきます(時間があまりなくて途中で止まっているのですが)。最近面白いアルゴリズムを見つけたので、何か役立つようなヒントがあればと思います。

地形のシミュレーション

浸食、運搬、そして堆積

小学校・中学校の理科で習う川の三作用、浸食、運搬そして堆積。これを長い年月をかけて山野を削っていった結果が侵食地形で、これによって現実の地形は山あり谷あり起伏に富んだ地形となっています。普段、日本でよく見られる地形はほぼこの侵食地形になっています。

典型的な侵食地形 (出典: 地理院地図)

典型的な侵食地形 (出典: 地理院地図)

他の侵食地形としては海蝕、風蝕、氷河地形が挙げられますが、今回のシミュレーションでは河川による浸食を扱います。

アルゴリズム

以下のアルゴリズムを参考にして、実験を行ってみました。

https://github.com/dandrino/terrain-erosion-3-ways

アルゴリズムはだいたい以下の通りです。

  1. パーリンノイズを使用して、初期地形を生成する。
  2. 以下の操作をループする。
    1. 雨を降らせる (降水量は各ピクセルごとにランダムにする。)
    2. 地形の勾配方向を計算する。
    3. 勾配がある定数より大きい場合は「浸食」として、降水量と勾配に応じて地形を削り、「土砂」をつくる。ある定数より低い場合は、土砂を「堆積」させる。
    4. 勾配に応じて、土砂と降水を移動させる。
    5. 水を一定量蒸発させる。

実際、コードを見るとこのように非常にシンプルな実装となっていまして、確かに簡易的なモデルを作るとそうだけど、そう簡単に行くかな…?と疑問でした。というわけで、早速動作確認です。

動作確認

GUIを作り、シミュレーション部分はほとんどコードをコピって実験を行ってみます。