ARCore Geospatial APIとPLATEAUを使って建物に3D都市モデルのワイヤーフレームを重ねてみた
ARCore Geospatial APIと国土交通省 3D都市モデルプロジェクト PLATEAU が提供する都市モデルを組み合わせて、現実空間の建物に3D都市モデルをワイヤーフレーム化して重ねて表示してみたので、実装するのに使った技術について解説します。
長くなりそうなので、まずはGeospatial APIとPLATEAUについて書きます。
ARCore Geospatial APIとは
GoogleがGoogle I/O 2022で発表したVPS(Visual Positioning Service/System)です。VPSは、カメラ映像とスキャン済みの空間情報を照合して、仮想と現実の空間を位置合わせする技術です。
VPSサービスはGoogle以外の会社も提供してきましたが、それらはスペースの事前マッピングが必要でした。
Geospatialはグローバルスケールで利用でき、コンテンツをリモートで配置でき、さらにスペースマッピングも必要ないことが、GPSや競合他社のVPS、Googleが既に提供しているCloud Anchorsと異なる特徴です。
GPSやARCore Cloud AnchorsとGeospatial APIの比較については以下の動画パートが詳しいです。
自分はGeospatial APIをiOSとAndroid、どちらの環境でも同じコードで動かしたかったので、Unityが提供しているARアプリ作成ライブラリ ARFoundationを使って、Geospatial APIを動かしてみました。
初期設定手順はここにまとまってました。
元となるコードはここからダウンロードしました。
上記のサンプルコードですが一箇所注意点があります。ネットワークなどに繋がらない場合に強制的にアプリを終了させる処理が入ってるので、その箇所をコメントアウトしないとクラッシュが頻発します。
こちらの記事を参考にして修正しましょう。
PLATEAUとは
Project PLATEAU は、日本の都市の3D都市モデルの整備を推進するプロジェクトです。国土交通省が主導しており、整備された3D都市モデルはオープンデータとして公開されてます。
今回は建物に3D都市モデルのワイヤーフレームを重ねるため、PLATEAUが提供する3D都市モデルを利用しました。
東京都の都市モデルは以下からダウンロードできます。
都市モデルが東京都のどの地域と紐づいてるかについては、こちらのページで確認しました。
CityGML
PLATEAUが提供する都市モデルは国際標準規格のCityGMLというデータフォーマットで配布されてます。
CityGMLについては以下のページが詳しいです。
CityGML は LOD (Level of Detail)と呼ばれる概念を持っており、詳細度の異なる様々な情報を統合的にデータとして管理できるようになってます。
以下は東京都世田谷区、渋谷区、目黒区、港区、品川区のCityGMLですが、このファイルの中にはそれらの地域に紐づくLODが含まれてます。
現在、PLATEAUのCityGMLではLOD1から4までのデータが提供されてます。
今回の開発ではLOD2以上のデータをAR表示したかったのですが、LOD2は提供エリアが限られてるので、消去法でLOD1を使いました。
- LOD1 建物の箱型モデル。作成範囲 東京23区全域(627.57k㎡)。
- LOD2 屋根形状。作成範囲 池袋地区(1.5k㎡)、新宿地区(2.57k㎡)、渋谷地区(1.39k㎡)、国立競技場地区(0.73k㎡)、品川地区(1.79k㎡)、大丸有地区(1.22k㎡)、竹芝地区(0.27k㎡)、東京都心地区(12.55k㎡)、豊洲地区(2.11k㎡)、臨海地区(4.34k㎡)、羽田空港地区(3.56k㎡)、合計(32.02k㎡)
- LOD3 開口部
- LOD4 室内
CityGMLの仕様については以下のページのHandbook of 3D City Modelsにとても詳細にまとまってます。
前編は以上です。後編に続きます。