へっぽこ技術ブログです

【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形式データを出力する場所を指定する。

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

f:id:Hiesuke:20210620004144p:plain

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

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

・同じ操作を Output: bldg_lod1 [FBX] と Output:dem [FBX] でも行って出力先のフォルダを指定する。指定するフォルダはすべて同じで良い。※変換ごとに「53391540」などのエリアの番号などでフォルダを新規作成して、そのフォルダを指定したほうが良いと思う。

 

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

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

f:id:Hiesuke:20210620005333p:plain

Runボタン

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

 

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

f:id:Hiesuke:20210620010244p:plain

出力されたファイル群

 

(3) Unityで使用する

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

・Projectウインドウに出力先フォルダをD&Dしてプロジェクトに導入する。

・導入したフォルダの中にあるdem, lod1, lod2というfbxファイルをHierarchyウインドウにD&Dしてシーンに導入する。

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

f:id:Hiesuke:20210620011847p:plain

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

f:id:Hiesuke:20210620012242p:plain

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

とりあえずUnityに持ってこれたので良かった良かった。なんかWarningが出ていたけど。今のままでは複数のエリアを綺麗に配置することに苦労するので、変換時に何か設定がいるのかな?

 

 

とりあえずおしまい。

Blog for ”Code for Yokohama”

【Unity】Visual StudioでGameObjectクラスなどが認識されないエラーが出たときの対処方法 ※覚書

プロジェクトのフォルダ直下にある拡張子が .csproj と .sln のファイルを削除してから開きなおすと良いみたい。

これらのファイルは無ければUnityエディタが自動的に作ってくれると公式サイトにも書いてあるので、削除しちゃっても安心です。

 

docs.unity3d.com

【AR】【Androiod】AR Foundationの勉強進捗状況 ※覚書

AR Foundationのサンプルプロジェクト(arfoundation-samples-main)にある幾つかサンプルシーンだけをつらつら読んでいてわかったことの覚書。

自分用の覚書なので間違ってたり変なこと書いてたらごめんなさい。

 

■ Assets > Scenes > SimpleAR

平面検出(Plane)と特徴点検出(Cloud Point)とレイキャスト(AR Raycast Manager)のサンプルとしてとても勉強になりました。

とりあえずMaterialの設定をいじることで、コードの記述は一切無しでPlaneの描画を任意のテクスチャに変えることができました。

 

■ Assets > Scenes > ImageTracking > BasicImageTracking

画像マーカーの使い方のサンプル。

特定の画像を認識して画像上にオブジェクトを出現させる。

特定の画像を認識させてオブジェクトを表示させるだけならコードの記述などは不要で実装できる。サンプルは画像を認識してその画像の情報をコードでオブジェクト上のUIに追記するようなもので多少複雑だったので自分なりに簡単に記述し直してみることをしてみた。ハンドラ(リスナー)の追加とtrackedImage(という名前でサンプルで使われている変数)の使い方が肝ですかね。画像ごとに別のオブジェクトを表示させるのに苦心したけど、スクリプトに数行追加するだけで実装できました。

 

■ Assets > Scenes > FaceTracking  (> FacePose.unity)

顔認識のサンプル。

サンプルがシンプル。顔の位置にオブジェクト表示させて追跡させるだけならコードの記述不要で、自分で実装するのもとてもとても簡単。

 

■ Assets > Scenes > Depth  (> SimpleOcclusion.unity)

オクルージョンのサンプル。

深度に対応して現実世界の物体の奥にオブジェクトがあるときは隠れる。面白い。サンプルはボール落とすだけであんまり面白くないけど。

サンプルプロジェクトと自分の作ったプロジェクトで、AR Occlusion Manager(Script)コンポーネントの設定項目が違うのでなんでかなーと思ったら、AR Foundationのバージョンが Unity 2020.2.4f1 のVerified版である AR Foundation 4.0.12 ではなく 新しい AR Foundation 4.1.15ではなかったからでした。

 

 

これらの作り方(入門編)の記事はいつか書くかも。

 

とりあえずここまで。

 

 

 

 

【AR】【Androiod】Unity AR Foundationって何? ※覚書

自分用の覚書

 

Unity AR Foundationって何?ってのはこちらを読んでねというのが正解です。公式が正義。

docs.unity3d.com

こちらは Unity 2020用のPluginバージョン4.1のページです。

古いバージョンのページを見ても英語なので楽するのは諦めましょう。というか、Chromeブラウザの翻訳機能を使っても結構読める日本語になる簡素な文章なので、僕みたいに英語に明るくない残念エンジニアにも嬉しいです。

 

 

以下は日本語訳ではありません。自分用の適当で意訳しまくり抜粋しまくりの覚書です。

■AR Foundatioとは

 Unityで使えるマルチプラットフォーム対応のAR開発機能だよ。ただし、インターフェースの提供だけなのでAR機能は以下のプラットフォームごとのパッケージも必要ね。

   Android用  : ARCore XR Plugin

   iOS用    : ARKit XR Plugin

   Magic Leap用 : Magic Leap XR Plugin

   HoloLens用  : Windows XR Plugin

 ちなみにこんなことができるよ。

   Device tracking : モノの位置と向きを検知する

   Plane detection : 平面(水平および垂直)を検出する

   Point cloud : 特徴点(特徴的な部分)の認識をする

   Light estimation : 色温度と明るさを推定する

   2D image tracking : 2次元画像をマーカーに使う

   3D object tracking : 3次元物体をマーカーに使う iOSのみ。

  ほかにも Face tracking(顔認識)とかOcclusion(深度検出)とかあるよ。詳細は公式読んでね。

 

■Platformサポート

 ARKitはたくさん使えるよ、もりもりと。ARCoreはちょっと使えないのあるよ。他はまぁこれからですかね。

AR Subsystemというプラットフォーム非依存のインタフェースで機能を使うよ。Subsystemは個別プラットフォームごとに実装がされていてこれをProviderと呼ぶよ。

 

■AR Foundationのインストール

 Package Managerから AR Foundation とプラットフォームごとのPluginをインストールしてね。

 

■用語集

用語 説明
Tracking ラッキング。カメラを移動させたときに現実世界で追跡(追随)させるAR機能
Trackable

ラッキング可能。平面などの現実世界の特徴を検出できること

Feature Point 特徴点。ARデバイスは特徴的な部分を検出して「環境マップ」を作成している
Session ARセッション。
Session Space セッション空間。ARセッションが開始された位置を原点 (0, 0, 0) とした座標系。

 

■AR Foundationの使い方

 GitHubのサンプル(https://github.com/Unity-Technologies/arfoundation-samples)を読んでね。

 

 ARアプリのSceneには「AR Session」と「AR Session Origin」を配置するよ。「AR Session Origin」の子要素には「AR Camera」が付いてるよ。デフォルトのMain Cameraはいらないよ。

 これらはHierarchyウインドウ > 「+」 > XR から作成すると楽ちんだよ。空のGameObjectに下記のコンポーネントを追加するのでもいいけどね。

 

AR Session コンポーネント

 ARアプリのSceneにはARSessionコンポーネントが1つ必要であり、これがライフサイクルを制御する。デバイスでARがサポートされているかなどをセッション状態として確認することができる。

 

AR Session Origin コンポーネント

 ARセッションの原点 (0, 0, 0) を元にして現実世界の位置とか向きなどをアプリ内の空間のものに変換してくれる。

 

AR Pose Driver コンポーネント

 

AR Camera manager コンポーネント

 

AR Camera Background コンポーネント

 

AR Input Manager コンポーネント

 

 

 

 

 

 

 

【AR】【Androiod】Unity AR Foundationのサンプルプロジェクトを動かす ※覚書

自分用の覚書

 

サンプルプロジェクトをダウンロードする

 こちら(https://github.com/Unity-Technologies/arfoundation-samples)のGitHubリポジトリにアクセス。

github.com

 

「Code」ボタン > Download ZIP と選択。

f:id:Hiesuke:20210225094859p:plain

 

ダウンロードした arfoundation-samples-main.zip を展開してお好きなフォルダに用意する。

Unity Hubで「リストに追加」して開く。※Unityバージョンは2020の最新版にアップグレードしましょう

 

Package ManagerのIn Project一覧を表示して追加済みのパッケージを確認すると何やらたくさん追加されているけど、とりあえずキニシナイで環境構築のときと同じ手順でAndroidにSwitch Platformしましょう。
Scenes In Buildの欄には、様々なAR機能の確認用シーンが既に登録されています。
Player Settings...から確認するとわかりますが、PlayerやXR Plug-in Managementの項目はすでに良い感じで設定されています。

 

あとは端末(スマホ)を繋いでBuild & Runすれば実行できるはずです。

無事に実行できたならば、アプリ画面に様々な機能確認用のシーンに移動するボタン群が表示されます。

f:id:Hiesuke:20210225103224p:plain

Android(ARCore SDK Plugin)だと使えない機能が多そうです。

 

さてこれからサンプルプロジェクトを読んで色々とお勉強していかないといけませんね。山道続く・・・