ひとことで
ノイズで作った地形の高さに、中心から離れるほど小さくなる値(減衰マスク)を掛けたり引いたりして、マップの端が必ず海になるように整える方法です。ノイズだけの地形は、マップの端で陸地が途中で切れてしまいますが、マスクを使えば「海に囲まれた島」になります。海岸線はノイズの凸凹を残すので、円や四角のままにはならず、入り江や岬のある自然な形になります。
ゲームでの使いどころ
- 島のマップ:サバイバルゲームや探索ゲームの、海に囲まれた島のマップを自動で作る。
- マップの端の処理:大陸の一部を切り取ったようなマップでも、端を海・山脈・崖などにして、自然に「行けない」ことを伝える。
- 地形の大まかな形の指定:デザイナーが描いた大まかな形(マスク画像)とノイズを組み合わせ、狙った形の大陸を作る。
- 地形以外にも:森の分布を中心に集める、敵の出現を中心ほど強くするなど、「中心からの距離で量を変える」処理全般に使える。
しくみ
マップの座標を中心 0、端 ±1 に正規化した で、中心からの「距離」 を決めます。距離の測り方で島の形が変わります。
この距離から、中心で 1、端で 0 になるマスク を作ります。下がり始める距離 と、下がり方のカーブ で形を調整します。
最後に、ノイズの高さ をマスクで下げます。
はマスクの強さです。掛け算 を使う方法もありますが、引き算の方が、中心付近の地形の凸凹をそのまま残せます。
ゆがめた円:距離を測る前に、座標をノイズで少しずらすと(座標のゆがみ)、島の輪郭そのものが崩れ、より自然な形になります。
実装のポイント
- マスクは画像にもできる:距離の式の代わりに、デザイナーが描いた白黒の画像をマスクにすれば、好きな形の大陸を作れます。
- 海面を決める:高さがある値(海面)より低い所を海にします。マスクの強さと海面の高さで、陸地の割合を調整します。
- 仕上げに侵食:マスクだけの山は形が単純になりがちです。仕上げに水食侵食をかけると、谷や川筋のある地形になります。
- 複数の島:マスクを「いくつかの中心からの距離の最小値」にすれば、群島を作れます。
つまずきやすい点
- 完全な円・四角になる:ノイズが弱すぎたり、マスクが強すぎたりすると、海岸線が円や四角のままになり、人工的に見えます。ノイズの振幅と下がり始める距離のバランスを取ります。
- 中心が高くなりすぎる:掛け算のマスクでは、中心の高さがノイズで決まり、端に向かって単調に下がるだけのつまらない形になりがちです。
- 端に陸が残る:マスクが弱いと、端にも陸地が残ります。デモの「マップの端にかかった陸地」が 0 になるよう調整します。
デモで試すこと
- 「マスクの強さ」を 0 にすると、陸地がマップの端で途切れ、大陸の一部を切り取ったように見えます。数値の「マップの端にかかった陸地」が増えます。
- 右下の断面図で、灰色のノイズから赤いマスクの分だけ引き下げて、緑の結果になっていることを確かめてください。青い点線が海面です。
- 「距離の測り方」を変えると、同じノイズでも島の大まかな形が変わります。「ノイズでゆがめた円」が最も自然です。
- 「マスクを地形に重ねて表示」で、赤く塗られた所ほど高さが大きく引き下げられています。