へっぽこ技術ブログです

【Unity】Project Plateau(プラトー)の「横浜市の3D都市モデル」をUnityで使う手順例の覚書

【Unity】Project Plateau(プラトー)の「横浜市の3D都市モデル」をUnityで使う手順例の覚書

www.mlit.go.jp

 

国土交通省が主導する3D都市モデルのオープンデータ化プロジェクト「Project Plateau(プラトー)」の、横浜市のモデルがCityGML形式で公開されているので、(1)それを入手して (2)Unityで使いやすいようにFBX形式に変換して (3)Unityに導入するまでの手順の覚書。入門記事としてご覧ください。

変換処理にはマシンパワーがそれなりに必要です。特にメインメモリの容量が多いPCの使用をお勧めします。

この記事を書いてる人間はこの作業に関わるまで地理データもCityGML形式やらも知らなかったくらいなので、色々察してご容赦ください。

 


 

■概略

横浜市の3D都市モデルを以下のサイトから入手する

www.geospatial.jp

FME Desktopをインストールする

www.safe.com

・Plateau公式の手順書に沿ってFBX形式に変換する

www.mlit.go.jp

https://www.mlit.go.jp/plateau/file/libraries/doc/plateau_doc_0007_ver01.pdf

 

・FBX形式になったデータをUnityのプロジェクトに導入する

docs.unity3d.com

 


 

 ■手順の覚書

 (1) Plateauの横浜市データを入手する

Googleで「Plateau みなとみらい」あたりで検索して配布サイトまで辿り着く。

f:id:Hiesuke:20210619163409p:plain

https://www.geospatial.jp/ckan/dataset/plateau-14100-yokohama-city-2020

・CityGML形式の「詳細」欄をクリックし、ダウンロードを選ぶ。

f:id:Hiesuke:20210619163552p:plain

f:id:Hiesuke:20210619164233p:plain

ダウンロードされたファイル

・展開する。

 

(2) CituyGML形式からFBX形式に変換する

Plateau式の手順書に従って、変換にはFME Desktopを使用する。

FME Desktopは有料ソフト。3万円台くらいなら買ってみようかな~と思ったけど30万円台だったので日和る。というか、個人のお遊びとしてはちょっと手が出せない。
・ただ、FME DesktopにはTrial版やHome Use版、Students版、Non-Profit &Research版などの無料で使用(試用)できるものがあるのでそれを使わせていただく。※自分はHome Use版を申請させていただきました。商用利用の方は製品版ライセンスをお買い求めください。

fmesupport.com

 

FME Desktopをインストールする。申請から1days以内にライセンス(シリアルナンバー)が届くが、届かないうちにインストールしてもTrial版としての使用が可能。

 ・手順書のp.11に「1.2 FBX形式への変換」が載っているのでそれを見ながら作業する。自分は最初の行の「添付のcitygml2fbx.gmwt」というファイルがローカルPC上に見つからなかったので、以下のProject Plateau公式リポジトリから入手した。

github.com

github.com

 

f:id:Hiesuke:20210619171444p:plain

citygml2fbx.fmwt

 ・citygml2fbx.fmwtをダブルクリックするとFME Workbenchなるソフトウェアが起動する。

 

■変換するエリアを指定

・変換を行う前に、横浜市のどのエリアを変換するのかを考える。

・Plateauのデータは以下のようにエリアが区切られている。

 ※展開した横浜市のデータフォルダに入っている「索引図.pdf」に載ってます。

f:id:Hiesuke:20210619234907p:plain

横浜市_構築範囲図(全体図)

・更に細分されたこのピンク色のあたりがビルにテクスチャが貼られたLOD2というデータが入っているのでオススメ。

f:id:Hiesuke:20210619235440p:plain

横浜市_構築範囲図(4/5)からの抜粋

・ちなみにGoogle Mapsと対比させるとこんな感じ。みなとみらいや横浜駅のあたりですね。

f:id:Hiesuke:20210620000104p:plain

Google Mapsからの抜粋

・というわけで、とりあえずエリアとしては「53391540」を選ぶことにしましょうか。

 ・以下は、ほぼ公式手順書通りの手順を書いただけです。悪しからず。

・まずは次の手順で変換するエリアの建物情報を指定する。

FME Workbenchの左上に表示されている『 Input: bldg [CITYGML] 』上で右クリックして『Edit 'Input: bldg~~』を選ぶ。 ※ビルディングの略でbldgですね(たぶん…)

f:id:Hiesuke:20210620000703p:plain

Input: bldgの上で右クリックして...

・表示されたダイアログの『…』をクリック。

f:id:Hiesuke:20210620001111p:plain

Souurceを選ぶファイルダイアログを開く「…」をクリック

横浜市のデータを展開したフォルダの中にある「udx」フォルダの更に中にある「bldg」フォルダを開き、「53391540_bldg_6697_op.gml」というファイルを選んで「開く」ボタンを押す。

f:id:Hiesuke:20210620001549p:plain

53391540_bldg_6697_op.gml というファイルを選んで「開く」

 ・「OK」ボタンを押してダイアログを閉じる。

 

・続いて以下の手順で地形情報を指定する。

・『Input: dem [CITYGML]』の上で右クリックして『Edit 'Input: dem~~』を選ぶ。 ※demってなんの略ですかね?

f:id:Hiesuke:20210620002525p:plain

Input: dem の上で右クリックして...

・ダイアログの「…」をクリックし、

f:id:Hiesuke:20210620002736p:plain

「…」を選んで

・今度は「udx」の中の「dem」フォルダから「53391540_dem_6697_op.gml」を選んでから「開く」ボタンを押す。

f:id:Hiesuke:20210620002957p:plain

53391540_dem_6697_op.gml というファイルを「開く」

・更に「OK」を押してダイアログを閉じる。

 

■FBX形式の保存場所を指定

 ・更に、次の手順で変換後のFBX形式データを出力する場所を指定する。

 ・変換した後のファイル群をまとめて保存するためのフォルダを新規作成(例:FBX_OUTPUT)して、更にそれぞれのエリアごとの変換後ファイル群を入れるフォルダも新規作成(例:53391540などとエリアのわかるフォルダ名)して保存をすると良いですよ。下のような感じ。

f:id:Hiesuke:20210701111341p:plain

FBX変換して出力するフォルダの作成例

 

・Output: bldg_lod2 [FBX] の上で右クリックして、「Edit ’Output~~」を選ぶ。

f:id:Hiesuke:20210620004144p:plain

出力先のフォルダを指定する

・先ほどまでと同様に『…』をクリックし、FBXデータを出力するフォルダを指定する。 ※bldg_lod2はビルにテクスチャが付いたちょっといい感じの建物データ(らしい)

・同じ操作を Output: bldg_lod1 [FBX] と Output:dem [FBX] でも行って出力先のフォルダを指定する。指定するフォルダはすべて同じで良い。

 

 

 ※元の手順書では変換処理の前に緯度経度情報の変換指定の変更処理が書かれています。ここでは、横浜のデータでは変更不要だったので割愛してますが、余裕のある時にぜひ元の手順書を読んでくださいね。

 

・ここまで指定ができたら、次の手順で変換処理を行う。

FME Workbenchの「Run」ボタンをクリックする。

f:id:Hiesuke:20210620005333p:plain

Runボタン

・更にダイアログの「Run」ボタンを押す。

 

・うまく変換出来たら、出力先として指定したフォルダに以下のようなフォルダ1つ&ファイル3つが作成されているはずです。※lod2対応エリアの場合

f:id:Hiesuke:20210620010244p:plain

出力されたファイル群

 

(3) Unityで使用する

・Unityでプロジェクトを作成する。テンプレートは3Dで。

・Projectウインドウに出力先フォルダをD&Dしてプロジェクトに導入する。変換後のファイルやフォルダをまとめて保存してあるフォルダごとしたほうがいいですよ。

※ここでは、FBX_OUTPUTフォルダの下に53391540, 53391541, 53391550と3つのフォルダを作成してそれぞれのエリアを変換しているということで説明します。

f:id:Hiesuke:20210701111341p:plain

変換後のフォルダ構成

・ProjectウインドウのAssetsに、以下のようにフォルダとファイルが導入されます。

f:id:Hiesuke:20210701112828p:plain

Unityにフォルダとファイルを導入

・Hierarchyウインドウ > + > Create Emptyと選択し、空のGameObjectを作成する。

・作成されたGameObjectの名前をエリアの名称(例:53391540)に変える。更に、Inspectorウインドウを使って、Transformコンポーネントの値を以下のように変える。

f:id:Hiesuke:20210701113210p:plain

Transformコンポーネントの値

・同様に空のGameObjectを作成し、使用したいすべてのエリア分の設定を行う。

f:id:Hiesuke:20210701113512p:plain

3つのエリア(の空のオブジェクト)を作成

・Projectウインドウに導入した各エリアのdem, lod1, lod2というファイルを、Hierarchyウインドウに作成したそれぞれのエリア用のオブジェクトにD&Dして子要素にする。

f:id:Hiesuke:20210701114246p:plain

dem, lod1, lod2をドラッグ&ドロップ

f:id:Hiesuke:20210701114416p:plain

子要素となった状態

■確認

・試しに、Hierarchyウインドウにあるdem(どれでも良い)をダブルクリックしてSceneビューで確認してみましょう。以下のように、エリアが接続された状態で配置されていることがわかるはずです。※ALTキーを押しながらマウスボタンを押してドラッグで回転します。

f:id:Hiesuke:20210701114843p:plain

 

・カメラの位置がオブジェクトから離れすぎているので、Gameビューで小さ~~くしか表示されていません。HierarchyウインドウのMain Cameraを選択し、TransformのPositionの値を以下のように設定してみてください。

f:id:Hiesuke:20210701115459p:plain

Main CameraのPosition指定例

・こんな感じになりました。

f:id:Hiesuke:20210701115544p:plain

Gameビューの例

・カメラのTransformの値を色々変えて試してみましょう。

f:id:Hiesuke:20210620012242p:plain

Unityエディタの画面(Gameビュー)

 

 

とりあえずおしまい。

Blog for ”Code for Yokohama”