現実世界の地図データを活用したオープンワールドの自動生成

2023/5/28

現実世界の地図データを活用したオープンワールドの自動生成

現在弊社で鋭意開発中のJoggleは、プレイヤーがスマホの前でその場ジョギングをすることによってキャラクターを動かすという世界初のフィットネスRPGです。


このゲームでは、現実世界の地図情報をオープンワールドの地形として活用しており、山や海など、地形の起伏はすべて現実世界の地図データが元になっています。

これはどのような技術に支えられているのでしょうか?

DEM (Digital Elevation Model)


地球の地形の起伏に関する情報は一般的にDEM(数値標高モデル)と呼ばれています。

地表面を等間隔の正方形に区切り、それぞれの正方形に中心点の標高値を持たせたデータです。


例として、富士山周辺のDEMを貼ってみました。

黒い点のように見えるのが富士山頂です。

一般的な地図には描かれていない精細な地形の起伏を確認できます。


富士山周辺のDEM画像

Joggleの地形生成には、DEMが使われています。

プレイヤーの座標情報からその周囲のDEMを取得し、瞬時にその3Dモデルを生成します。


DEMは多くの地図作製機関から有償または無償で配布されており、全世界を網羅するフリーのDEMを複数の機関から入手可能です。


有償のDEMは上記のフリーのDEMよりも高い分解能と品質を誇っていますが、非常に高価である場合がほとんどです。

ゲームで活用するには、フリーもしくは安価なDEMで十分でしょう。


ちなみに、フリーのDEMは地球だけではなく火星版も存在してます。

いつかJoggleの火星版を開発することができるかも知れません。

パーリンノイズ


ただし、現実世界の地形の起伏をゲームにそのまま使用してみると、どうしても退屈になりがちです。

関東平野のようなどこまでも平らな土地では、起伏が感じられない単調な地形が延々と続くことになります。

そこでJoggleでは、現実世界の起伏に少しノイズを与えることにより、単調さを克服しました。


このようなとき、ゲーム開発ではPerlin noise(パーリンノイズ)という技法がよく用いられます。

パーリンノイズとは、どこまでも続くランダムかつ自然なノイズを簡単な計算で得ることができるアルゴリズムです。


DEMから得られる現実の地形の起伏に、細かなパーリンノイズを混ぜることで、常に刺激に富んだ地形をプレイヤーに与えています。


Perlin Noiseの例

パーリンノイズにより細かな起伏を持たせた地形

パーリンノイズを除去した例

植物の自動生成


1/10サイズの地球を採用しているとはいえ、それだけの広さのあるオープンワールドに、何十億本もの木を一本一本植えていくことは現実的ではありません。

木や岩もまた、アルゴリズムにより自動生成されています。


このようなオブジェクトを完全なランダムで並べてしまうと、いかにも人工的な風景になります。

実際の植物の生え方は均一ではなく、植物が密集している箇所とまばらな箇所が適度に繰り返されていることが普通です。

ここでもまた、パーリンノイズを活用できます。

ノイズが白く見える辺りに植物を密集させ、ノイズが黒く見える辺りには植物を植えないようにすれば、完全なランダムよりもはるかに自然な風景になります。

もちろんそんな単純な話ではありませんが、ざっくりと言えば、そのような考え方がベースになっています。


ちなみに、世界的に有名ゲームであるマインクラフトの広大な地図もパーリンノイズにより生成されています。

ワールド内の各ブロックの標高だけではなく、「バイオーム」と呼ばれるエリアの種別、鉱石の分布、村などの特定の構造物の位置、といった情報が、すべてノイズから生み出されています。



パーリンノイズにより自然な密度で配置した植物

植物を完全にランダムに配置した例

"Joggle" - Fitness アプリのダウンロードはこちらから

Joggleは、スマホだけで楽しく運動できる、新しいジョギング体験です。あなたの走るスピードや顔の向きで、3D空間を走るキャラクターを操作し、オープンワールドメタバースの世界を冒険しましょう。運動が苦手な人にもオススメで、その場ジョギングで健康的なライフスタイルを手軽に始められます。

地図データを活用したUnity開発に参加させてください!!


Vitalify Asiaでは、Unityによる先進的な技術を使用したアプリを日々開発しています。

ゲーム開発、AR/VRアプリ開発、2Dイラスト制作、3Dモデリングを得意としています。

上記以外にも幅広い分野でのアプリケーション開発が可能ですので、お気軽にお問い合わせください。