VRChat雑記

かやのみちゃのVRChat関連の雑記ブログです

国土地理院地図3DをSTLで出力しUnityのTerrainに変換して景観を学ぶ

 

(前置き)もっと他にいい方法はあるかもしれません。なにかいいものがあったら教えて下さい。そのうち下のリンクのものも試してみようと思います。

風景を学ぶにはどうしたらいいんだろう?

Unityで遠景や大地を作るときはTerrainを使って山を作ったり植林すると思いますが、どのようにしたらリアルっぽくなるかはあまり解説がないように思います。

Blenderなどのモデリングソフトでも絵の描き方のように、テクスチャの塗り方などを説明はされますが形に関しては説明がなさそうです。ランダムで生成したり、直感で作るのが普通なのかもしれません。

ですが、自分はできれば現実の風景をもとにデッサンのように勉強したいと考えました。国土地理院の地図には等高線があるだろうから、それをもとに作ればいいと。ですが、そもそも国土地理院の地図には実は3D出力(STL,VRML,WebGL形式)の機能があります。

試しにSTL形式での出力からBlenderに読み込みFBXに。その後FBXをTerrainに変換します。

国土地理院の地図から3D出力する

まずは風景を選びます。山と海の絶景が見たいので、今回は北海道の知床岬展望台の風景にしたいと思います。Googleの地図で知床岬展望台と入れてストリートマップを見るとパノラマ写真が見えて助かります。

画像1

右上の機能から3Dを選び、大きさを選びます。カスタマイズもできるようですが、ここでは小を選びました。ちなみに地図上の拡大率そのままで出力がなされるようです。

画像2

地図の3D版が開きました。方位、大きさの表示をするとスケールがわかります。あとでUnity、Blenderで調整するときに便利だと思います。3Dプリンタ用のSTLをダウンロードします。色はUnityでTerrainとして着色するので問題ないです。

BlenderでFBXにする

画像3

BlenderでImport->STL形式を選びます。先程ダウンロードした地形のSTLファイルを読み込むとこんな感じだと思います。ここでBlederがわかるひとはいろいろ手直ししても良いと思います。自分にはまだわかりません…。

ExportからFBXで出力しておきます。

UnityでTerrainにする

FBXをUnityで読み込んだら上記記事で紹介されているスクリプトで変換をかけます。ただこの記事のスクリプトのダウンロードリンクは裏で広告が開かれたりとあまり気分がよくありません。

こちらのサイトのスクリプトと中身は全く同一なのでコピペして同名の.csファイルにしてUnityに持っていくのがおすすめです。もってゆくとUnityのエディタが拡張され、上の方にTerrainという項目が増えます。

そしてUnityのヒエラルキーに先程のFBXを導入し、寸法を合わせます。かなり大雑把にやっています。Cubeなどを使ってX=14000、Z=14000などで見積もってみて、FBXの倍率を出してみます。

画像4

だいたいX,Y,Zを100倍にしてみると寸法がだいたい合いました。上の図では半透明のCube(X,Y,Z=14000,4000,14000)を重ねています。近づくと結構荒いのですが、Terrainにするとなめらかになります。

このスケールの合わせたFBXを選択してTerrain->Object2Terrainを押してCreateTerrainをします。適当にデフォルト値のまま変換してしまいます。

画像5

うまくいくとなめらかになったTerrainが出力されます。あとは地面のテクスチャ、植林、海を設定してみます。

味付け

適当に地面テクスチャを選びます。

画像6

Standard AssetsをImportしておくと木と大地のテクスチャがあるのでおすすめです。そして適当に木を植えて…広大すぎて塗るのに重たすぎますね。なるべく3D出力の時点で絞ったほうがいいです。それかスケールを落とすか。

画像7

また、単なる白黒だと目的地がわからない…となりがちです。解決策がわからない…。上から地図を半透明で重ねてCube(100*100*100)とかなにかで目印をつけたほうがいいかもしれません。

画像8

というわけでアバターをおいて木を生やしてみましたが…うーん。失敗ですね。全然見栄えしない…。

画像9

というわけで別な地点のうまくいった風景を。こちらも国土地理院の地図から出力しています。LightingのFogがいい感じにかかっていていいですね。青空も映えます。小さい風景を切り取ってあげるとよさそうです。仮組みでCubeだけでスノーシェッドと道路を作ってみました。

ちなみにこちらの風景は柿ノ木スノーシェッドという超ド級マイナーな場所です。よかったらGoogleMapで見てみてください。一度行った地点を再現するとあー!こんな感じ!これぞVR!みたいな気持ちになれるのでおすすめです。

VRChatでアップロードして確認する際はMain CameraのClipping Planesの値のFar値を高くしないと遠景の描画をカットされてしまうのでご注意ください。が、遠すぎると今度は負荷が重くなって辛い。ちょうどいいを探したいですね。

またワールド原点の位置から10000m以上も離れてしまうとUnityの浮動小数点の計算の都合によりアバターのアウトラインなどが崩れてしまう事象が発生するそうです。なので一番見せたい風景の位置とスポーン位置を原点に置くと良いと思います。

出典の明記が必要

国土地理院の地図を利用したものはいかなるものも出典の明記が必要だと思います。このような利用はおそらくですが…出典の明記+加工を行った旨の表示で大丈夫…なはずです。

地図利用の申請不要として該当する…はずですが、VRでワールドとしてPublicにすることが該当するのかはよくわかりません…。一応Unity上で景観のために勉強するくらいが権利関係をよくわからない場合はセーフだと思います。スクリーンショットを撮ってSNSで共有する場合は出典の明記が必要だと思います。

おそらく、「作成する成果物が地図としての利用を想定していないもの」、「上記以外のうち、作成する成果物が測量成果としての正確さを要しないもの」に2つとも該当するはずなので承認は不要ですが、出典の明記は必要だと考えます。出典の記載の詳細は…どういうフォーマットがいいのかは難しそうです。

なにかご指摘ありましたらTwitterなどでお知らせいただけると幸いです。申し訳ございませんが、よろしくおねがいします…。

この記事に使用した地図の出典

最後にこちらの記事に使われた国土地理院の地図の出典を下記に記載しておきます。
地理院地図3D」を加工して作成
地理院タイル (標高タイル)を加工して作成」
「海域部は海上保安庁海洋情報部の資料を使用して作成」