それっぽい地形を作ってくれるファンタジー・マップ・ジェネレーター

ファンタジー・マップ・ジェネレーター

本の見返しに印刷してあるとうれしい、“あの地図”が無限に作れる!

氷河学者であるMartin O'Learyさんが制作したファンタジー・マップ・ジェネレーター「terrain」のJavaScriptコードがGitHub上に公開されています。

O'Learyさんは少年時代からファンタジー小説に魅了されていましたが、本当に夢中だったのは表紙の後ろに印刷された架空世界の地図だったとのこと。後に氷河学者となった彼は物理ベースの地形シミュレーションに興味を持ちます。

しかし、定番となっていたフラクタルノイズを利用したランダム生成に限界を感じ、現実に地形が作られる過程を取り入れたジェネレーターの作成を決意したのです。

「terrain」が実際に生成する地図は、O'Learyさんが管理するUncharted Atlasのツイートで1時間ごとに見られます。次々に繰り出されるどこでもないどこかの地図が生まれる大まかな過程は以下の通りです。

1. 平面上に不均一なグリッドを作る

グリッド

隣接する3点を結んだ三角形から成るグリッド。
実際にはこの4倍の点が使われます。

正方形が並んだ人工的なグリッドではなく不均一なグリッドを用意することは、後に自然な海岸線や川のラインを作る際に役立ちます。

ランダムに描画した点を、Lloyd's algorithmを使用する事で程よい間隔に修正。これらの隣り合う点を結ぶことで、不均一な平面のグリッドが完成します。

2. 高さを設定して大まかな地形を作る

高さの設定

黄色が高い場所、青が低い場所。
中間である緑色の境界に海岸線が引かれています。

平面グリッドの各地点に高さの値を加えることで大まかな地形を作っていきます。

具体的に行われる作業は地形全体に傾斜を加える、高低差を強調する、傾斜をなだらかにする、ランダムに地形を隆起させるなど。最後に任意の高さを海面に設定することで海岸線が現れ、大まかな地形が見えてきます。

3. 水による浸食をシミュレーションする

侵食効果

左:2の図の海面を高さ0に設定したもの。
右:左の図に浸食効果をかけたもの。

地形が形作られる際、谷部分は雨や川によってえぐれ、海岸線は波によって削られます。地点ごとの影響の受けやすさを計算し、浸食効果を加えて地形を削り、ディテールを整えていく行程です。最後に海面の高さと海岸線の形を調整し、「自然な見た目の地形」の完成です。

4. 手描きの地図状にする

20160818_terrain5.jpg

左:3の図から海岸線を調整したもの。
右:手描き風にレンダリングされた地図。

海岸線、川、山の傾斜の影を描画し、元の地形を消すことで手描き地図のような見た目にします。川の位置が自動で導きだされているのもポイントです。

5. 街と境界線を書き込んで完成。

20160818_terrain7.jpg

街のマークと地名が書き加えられることで、より本物らしくなります。

さらに水源の近くにを配置、それぞれのテリトリーを決めて境界線が描画されます。同時に、独自にランダム生成された地名を記入することで完成です。

***

それぞれの行程に施された細かい工夫が地図のリアリティに貢献しています。

O'Leary氏のホームページでは、実際のプログラムに触れながらの詳しい解説とアルゴリズムの詳細を確認できるほか、GitHub上では「terrain」のコードが公開中です。スキルのある方はダウンロードして遊んでみるだけでなく、世界中のコーダーたちとともに、さらなる改良に取り組めます

小説家でなくともファンタジー世界を創造できるという、Martin O'Leary氏と「terrain」が見せてくれた可能性が、別の誰かが作る新しい世界に広がっていくのかもしれません。

image: Generating fantasy maps
source: Generating fantasy maps, GitHub, Twitter, Martin O'Leary, Wikipedia

勝山ケイ素