LoginSignup
6
2

More than 1 year has passed since last update.

【Unity】PLATEAU SDK for Unityの基本的な利用方法~利用時の注意点

Last updated at Posted at 2023-01-05

PLATEAU SDK for Unity

Unity向けにPLATEAUの都市モデルのインポートをサポートするSDKです。

バージョン情報

諸々名前 バージョン
Unity 2020.3.4f1
PLATEAU SDK for Unity 0.5.1

基本的な利用方法

(個人的に勝手に期待していたこととして)緯度経度および範囲指定など行えば都市モデルをランタイムでロードする機能についてはサポートされていません。

というかそのようなUnity×ランタイムロードの部分はおそらくこのSDKがサポートするという話は今後もなく、事前インポートにおける処理の重さ範囲指定してモデルを取得するまでの難解なフローについてを解決してくれるツールだと思います。(勝手な推測)

その点を踏まえてこのSDKで試したことの流れとしては以下になります。

  1. UnityにPLATEAU SDK for Unityを導入する
  2. CityGMLをG空間情報センターのWebページからダウンロードする
  3. DLしてきたCityGMLをPLATEAU SDK for Unityを使って参照し、指定範囲のモデルデータをImportする
  4. 必要に応じてImportしたモデルをExportする

詳細な手順はドキュメントに記載があるので非常にわかりやすく、助かりました。
【参考リンク】:PLATEAU SDK for Unity

詰まった点

ドキュメントは導入まで非常に丁寧に書かれており、Import成功までたどり着くのにそれほど時間はかかりませんでした。その先の実機ビルドまでにいろいろ詰まったのでメモします。


CityGMLのファイルサイズ

以下サイトから東京都23区のCityGMLが取得できます。
【参考リンク】:3D都市モデル(Project PLATEAU)東京都23区

この23区分まとめてダウンロードを行うことでマップのどの部分を取得すべきか、という範囲指定の作業が以下GIFのようにUnityEditor上で行えます。
P.gif

ただ、注意点として23区分すべてのCityGMLは解凍するとかなりのデータサイズがあります。2022/12月時点で取得したデータは61.4GBと表示されました。

image (1).png

「23区分もデータは要らないので、ほしいデータだけダウンロードする」というやり方も可能ですが、そうなると結局自分のほしいデータがどの区画なのか、G空間情報センターに公開されている区画番号が記載された画像とGoogleマップを交互ににらめっこする必要があります。

このあたりはトレードオフで仕方がないことなのかもしれません。
何か良い手法をご存じの方いらっしゃいましたらコメントお願いします。


データの保存場所

CityGMLの情報をもとにUnityにロードされたデータはStreamingAssets配下にあります。ただし、.PLATEAUという隠しフォルダに配置されるため、UnityEditor上からMeshファイル、Material、Textureなどを参照することができません。
image (2).png

この影響かどうかはわかりませんが、Importの手順を経て生成されたPLATEAUモデルをPrefab化して再配置を試みた場合、MeshファイルやMaterialの参照が切れる問題に悩まされました。
P_SDK.gif

推測ですが、そういったImportしたモデルを直接別プロジェクトや別シーンに再配置するような挙動は想定していないようです。

何かの事情で元データをPrefab化したり、編集したいときはSDKにExport機能があるので、一度Exportして任意のフォルダに再配置することをお勧めします。


ビルド時のエラー

Unityのバージョン依存な話のようですが、StreamingAssetsに巨大なデータサイズのファイルが存在している場合、Androidだとエラーが出てビルドできないようです。

【参考リンク】:AAPT2 aapt2-4.1.0-6503028-windows Daemon #1: Unexpected error during link, attempting to stop daemon.

現時点で打開策を見つけられなかったので、利用する3DモデルだけExportした後、Importしたアセット群は削除しました。


モデルの持つメタデータ

PLATEAUのモデルの原点は若干ずれた位置に表示されます。

image3.png

個人的にこのSDKの一番ありがたい点として、これまでUnityから利用する際は以下記事のように工夫が必要だった原点のメタデータ(緯度経度など)をインスペクターに表示してくれることです。

【参考リンク】:Geospatial APIでPLATEAUのCityGML建物モデルを配置する

ここで解釈を間違えてハマったこととして、高さが0になっている点です。
たしかに、この原点の位置は0を示していますが、モデルたちは微妙にこの0より高い位置にあったり、低い位置にあったりします。理由として、PLATEAUは標高をベースに作られたモデルであるため、この原点に比べて高低差のある位置に表示されます。

なので、GeoSpatialAPIなどの"高度"を指定してコンテンツ作りを行う場合は、PLATEAU SDKでImportしたモデルは標高分浮いている/沈んでいる状態であることを意識する必要があります。

【参考リンク】:【Unity】GeoSpatialAPIの基礎理解~空間共有コンテンツ作成まで

おわりに

まだフィードバック用リリース版とのことでしたが、ハッカソンにて利用させていただき、無事優勝することができました。

ハッカソンは短い期間でしたが、PLATEAU SDK for Unityで大きく進捗を阻まれることなく非常に使いやすいツールでした。今後も利用させてもらいます。ありがとうございます。

(他にも同じ声があれば検討していただきたいこととして、緯度経度と範囲入力したらランタイムで取得できる、みたいな機能を公開してくれたらすごくうれしいです)

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2