Unreal Engine上に世界地図を作る方法
Unreal Engine上に世界地図を作ろうと考えて早一年。
実はずっと作りたいものは頭の中にあったんだけど、なかなか手が動かなくて(BluePrintで実現できないことがわかっていたので)保留になってた。
→今回の範囲は100%BluePrintで大丈夫です。
待てど暮せどBluePrintでUDP受信や(ファイルシステム上の)ファイルReadができるようにならないので、あきらめて最低限C++に手を出す腹をくくり、やりたかったことを進めることにした。
で、そのアプリを作るためにはまず3Dで表示される世界地図が必要なわけです。
世界の標高データ(DEM:Digital Evelation Modelと呼ばれるらしい)を探して一晩ダウンロードをかけっぱなしにしたところ... 73GB!
この量になると、データを集約することも簡単ではない。
のでとりあえず別の方法を。
地球の情報といえばNASA。
「nasa blue marble」でググると、NASAが公開している地球の写真があり、その中に「Topology」というのがあります。
本文を見ると
”Land topography is a digital image of the three-dimensional structure of the Earth's surface.”
とあるので、これを使えばよさそうです。
このデータをGIMPで適当に縮小し、ppm(アスキー)形式でExportします。
これは、この後の作業をしやすくするためで、画像→CSVの技がある人はそれでも好いと思います。
次にUE4上でデータを取り込むための作業をします。
これは3つの手順が必要となります。
1.データ構造を定義する
2.データを準備する
3.データを取り込む
1.データ構造を定義する
Blueprints→Structureから、構造体の定義画面を立ち上げ、表に必要となるデータ形式を定義します。
2.データを準備する
先ほど画像データをExportしたppm形式をExcelなどに取り込んで、CSVのデータを生成します。
データは以下のようなファイル(ファイル名:Height.csv)になります。
データの一列目はレコード名になるので、通番などを適当に入れておきます。
No.,X,Y,Height 1,0,0,0 2,1,0,0 3,2,0,0 4,3,0,0 5,4,0,0 6,5,0,0 7,6,0,0 8,7,0,0
3.データを取り込む
ここまで来れば、あとは、UE4のコンテンツブラウザからインポートから先ほど作成したCSVファイル(ファイル名:Height.csv)を指定します。
「Choose Data Table Row Type」で、定義したStructureの名前を選択し、OKをクリックします。
さらっと終わりますが、ちゃんとDataTableが作成されて、データが取り込まれます。
で、こいつをBluePrintで試しに表示するようにしてみる。
あらよっと。
実行すると、おおぉ、いい感じ!
だけどあまりにアクター数が多すぎてちょっとリアルタイムは無理っぽい。
解像度を下げるか、もうちょっと工夫しないと厳しそうだ。
解像度を下げて再挑戦してみるけど、それでもまともに動かなかったら、こいつはお蔵入りです。
トホホ。