PLATEAUの3D都市モデルを使ったARアプリケーション開発を行うための支援機能を提供します。
| 更新日時 | 更新内容 |
|---|---|
| 2024/07/26 | 対応バージョン追記、一部リンクの修正 |
| 2024/01/30 | テンプレートプロジェクトの公開 |
| 2023/12/25 | マーカーによるPLATEAUモデルの位置合わせ機能 |
| 2023/10/28 | AR Extensions 初回リリース |
| 2024/2/20 | インストール方法に関する手順をREADMEに追記 |
[!Warning] HDRP (High Definition Rednering Pipeline) および Built-in Rendering Pipeline では動作しません。
本リポジトリでは構築済みのテンプレートプロジェクトを提供しています。以下の利用手順ではこのテンプレートプロジェクトを基本としたARアプリの構築手順を説明します���
AR Extensions リポジトリの “/~Templates” ディレクトリの中にある “AR Template” ディレクトリを任意の場所にコピーし、Unity Hub でコピーしたプロジェクトを開いてください。
テンプレートプロジェクトの詳細はこちらのドキュメントをご参照ください。
テンプレートプロジェクトのUnityバージョンは2021.3.35f1です。手元にない場合は Unity Hub よりインストールしてください。
AR用テンプレートプロジェクトを利用せず、既存のプロジェクト等で PLATEAU SDK-AR-Extensions for Unity を利用する場合は以降の手順を参考に各種パッケージをインストールしてください。
AR Extensions は PLATEAU SDK-Toolkits for Unity の機能を利用しているため、AR Extensionsを利用するためにはこちらをインストールする必要があります。
こちらを参照して PLATEAU SDK-Toolkits for Unity をイン���トールしてください。
PLATEAU SDK-AR-Extensions では Google ARCore Extensions の機能である Geospatial API を利用するため、こちらをインストールする必要があります。
Unityプロジェクトに Google ARCore Extensions をインストールする方法は公式ドキュメントに記載されているため、こちらを参照して Google ARCore Extensions をインストールしてください。
AR Extensions では各機能を使用したサンプルアセットおよび構築済みのARシーンを提供しています。このサンプルに含まれるシーンを用いることで、PLATEAUの3D都市モデルを使ったARアプリケーションをすぐに体験することができます。
また、構築済みのアセットを見ることで、各機能の具体的な使い方を理解することもできます。
メニューからPackage Managerを開き、AR Extensions のサンプルをインポートしてください。
インポートされたサンプルは “Assets/Samples” ディレクトリに配置されます。以下の手順では Assets/Samples/PLATEAU AR Extensions for Unity/${AR Extensions バージョン}/AR Samples のディレクトリを「サンプルフォルダ」とします。
サンプルフォルダの Scenes ディレクトリには以下のシーンが含まれてい��す。
以���のドキュメントを参考にPLATEAU SDKでARアプリケーションを利用する付近の3D都市モデルをインポートします。
都市モデルのインポート
インポートが完了したら、3. 3D都市モデルのAR空間内位置合わせ機能の項目を参考に、位置合わせコンポーネント ( PlateauARPositioning )を設定してください。
Geospatial API を利用するためには、 Google Cloud プロジェクトを用意し、ARCore API の認証を設定する必要があります。ARCore API を有効化し、API認証を設定することで端末から Geospatial API を利用することができるようになります。設定方法については別のドキュメントにて解説されているため、そちらを参考に設定してください。
PLATEAU Tutorials TOPIC14|VR・ARでの活用[3/3]|Google Geospatial APIで位置情報による3D都市モデルのARを作成する
Unityエディターメニューの File > Build Settings を開き、ビルドするサンプルシーンをシーン一覧に登録します。
Build Settingsに表示されているプラットフォームからAndroidもしくはiOSを選択し、「Switch Platform」を押下してプラットフォームを切り替えます(この操作には数分かかります)。
その後、Build Settingsの「Build」ボタンを押下し、出力先を選択してビルドを開始します(iOSの場合はフォルダ、Androidの場合は.apkファイルもしくはAndroid Gradleプロジェクト)。
ビルドが完了したら、各プラットフォームに合わせて端末へアプリケーションをインストールしてください。
サンプルアプリの右上の設定メニューでは下記のような設定を行うことが可能です。
手動位置合わせ
3D都市モデルの座標位置をxyzの三軸に沿って移��させ、位置を調整することが可能です。
建物マテリアルの色設定
表示する3D都市モデルの色をRGBAスライダーを動かすことで変更することが可能です。

メニューより PLATEAU > PLATEAU Toolkit > AR Extensions を選択し、AR Extensions ウィンドウを開いて、それぞれの機能を利用することができます。
PLATEAU SDKを用いてシーンにインポートされた3D都市モデルオブジェクト ( PLATEAUInstancedCityModel )のマテリアルを一括で変更します。
設定するマテリアルを選択し、「シーン上の都市モデルのマテリアルを変更」を押下することでマテリアルが変更されます。
「ARオクルージョン遮蔽用マテリアルの参照を取得」を押下すると、遮蔽用マテリアルの参照がフィールドに設定されます。ARオクルージョン機能の利用方法に��いては後述する「ARオクルージョン機能の利用方法」を参照してください。
AR Extensions が提供する PlateauARPositioning コンポーネントを3D都市モデルにアタッチして設定することで、その3D都市モデルをAR空間内の実際の位置に自動的に配置することができます。
サンプルプロジェクトに設定済みのコンポーネントが含まれているので、以下の手順の参考にしてください。
PlateauARPositioning を設定する新しくゲームオブジェクトを作成し、 PlateauARPositioning コンポーネントをアタッチします。以下ではこのオブジェクトを「位置合わせオブジェクト」と呼ぶことにします。
Geospatial Controller ( PlateauARGeospatialController ) はサンプルに含まれる「AR」プレハブの中にある「GeospatialController」を利用するか参考にして新しく作成したものを設定します。
Geoid Height Provider は新たにゲームオブジェクトを作成し、サンプルの GsiGeoidHeightProvider をアタッチして設定します。
[!Note] これらのオブジェクトは位置合わせオブジェクトが必要とするコンポーネントですが、具���的な実装は AR Extensions に含まれておらず、これらは抽象的なインターフェースとして提供されています。これはそれぞれの機能が利用されるアプリケーションに大きく依存するためです。そのため、これらのインターフェースの具体的な実装はサンプルとしてそれぞれ
GeospatialControllerクラスとGsiGeoidHeightProviderクラスとして提供されています。
PlateauARPositioning の Plateau City Model に3D都市モデルオブジェクトをセットします。CesiumGeoreference がアタッチされているオブジェクトを位置合わせオブジェクトの子オブジェクトとして配置します。PlateauARPositioning の Cesium Georeference と Cesium 3D Tileset にそれぞれ対象のオブジェクトをセットします。PlateauARPositioning は SetOffset(Vector3 offset) というメソッドを公開しています。このメソッドにオフセット値を渡すこと���、Geospatial API によって配置される位置を調整することができます。
現実世界に配置したARマーカー画像を用いた地面の高さの位置合わせ機能です。
PlateauARMarkerGroundController を位置合わせオブジェクトにアタッチして使用します。
Building Layer に3D都市モデルのレイヤーを指定します。ARオクルージョンを設定している場合、3D都市モデルのレイヤーは遮蔽するオブジェクト用レイヤーが設定されているはずなので、そちらを設定します。
ARTrackedImageManager を以下のドキュメントを参照して設定します。その後、設定した ARTrackedImageManager を PlateauARMarkerGroundController にセットします。
AR Tracked Image Manager コンポーネント
ARTrackedImageManager の XRReferenceImageLibrary に登録したARマーカー画像をARアプリケーションの実行時に認識させることで、その画像を認識した場所を地面として高さを調整することができます。
地面の位置合わせを適用するためには、次のように取得できる高さの差を位置合わせオブジェクトのオフセットに指定することで建物の地面の高さを調整することができます。
Vector3 offset = Vector3.zero;
offset.y = -m_ARMarkerGroundController.HeightGap;
m_ARPositioning.SetOffset(offset);
[!Note] ARマーカーを用いた高さ合わせ機能は後述のARマーカーを用いた位置合わせ機能とは異なる機能で、単体で使用することはできません。 高さ合わせ機能はGeospatial APIを使用する際に、表示高さをARマーカーを用いて補正する機能です。 位置合わせ機能はGeospatial APIの代わりにマーカーを使用して位置合わせを行う機能なので、Geospatial APIと併用することができません。
Geospatial APIなどを利用する代わりにARマーカーを利用することで、オフライン環境やGPSが取得できないトンネル・屋内などの環境でも3D都市モデルをAR空間上に位置を合わせて表示させることができます。
AR Session や AR Session Origin をシーンに用意します。PlateauARMarkerCityModel コンポーネントをアタッチします。
PlateauARMarkerCityModel の各フィールドを設定します。
都市モデルオブジェクト にインポートした3D都市モデルを設定します。マーカー画像ライブラリ に AR Tracked Image Manager がアタッチされたオブジェクトを設定します。マーカー画像ライブラリ を設定すると、ARマーカー設定が行えるようになります。「+」ボタンを押下し、マーカー設定を追加します。
以上でARマーカー位置合わせの設定は完了です。
ARマーカー位置合わせを設定したシーンをビルド設定に追加し、アプリケーションをビルドして端末にインストールしてください。
印刷したARマーカーを設定したARマーカー位置オブジェクトに対応する場所に置き、アプリケーションで読み取ると、ARマーカーから計算した相対位置に3D都市モデルが表示されます。
[!Note] ARテンプレートプロジェクトではARオクルージョンのための設定が構築されています。そのため、ARテンプレートをベースに開発をする場合はARオクルージョンのプロジェクト設定は不要です。
遮蔽するオブジェクトが使用するマテリアルを用意します。このマテリアルが遮蔽する側の透明のマテリアルになります。このマテリアルは後述するAR Occlusion Renderer Featureによって描画時に差し替えられます。
[!Warning] このマテリアルを直接遮蔽する側のオブジェクトに設定しないのでご注意ください。
ARオクルージョンを設定するためには、遮蔽する側と遮蔽される側の2つのレイヤーを用意する必要があります。ここでは遮蔽する側をAR Occluder、遮蔽される側をAR Occludeeとして説明しますが、必ずしも名前が一致している必要はありません。レイヤーの順序は他の要件を考慮の上設定してください。
Universal Renderer DataはURPプロジェクトの描画の設定をするファイルです。URP描画設定は状況に合わせた複数のURP設定が用意されていることもあり、UnityでURPプロジェクトを作成すると、3つのUniversal Renderer Dataとそれらに対応したUniversal Renderer Pipeline Assetがデフォルトで作成されます(HighFidelity、Balanced、Performant)。
それぞれ、想定されるプラットフォームのスペックなどに合わせた描画設定がされています。例えば、モバイル向けにビルドする場合はBalancedやPerformantを使用し、PC向けにはHighFidelityやBalanced を使用します(これらはProject SettingsのQualityタブからプラットフォームごとに設定することができます)。
ARオクルージョンによって遮蔽されるオブジェクト(AR Occludeeレイヤー)は後述するARオクルージョン用のRenderer Featureによって描画されます。そのため、デフォルトで描画されるレイヤーからAR Occludeeレイヤーを削除します。描画はOpaque Layer MaskとTransparent Layer Maskの2つがあるため、それぞれからAR Occludeeレイヤーのチェックを解除してください。
ARオクルージョンを動作させるためにはRenderer Featureに AR Extensions が用意する PlateauAROcclusionRendererFeature を追加する必要があります。
“Add Renderer Feature” から上記のRenderer Featureを追加し、それぞれのフィールドを設定してください。
| AR Occludee Mask | 作成した遮蔽されるオブジェクトのレイヤーマスク |
| AR Occluder Mask | 作成した遮蔽するオブジェクトのレイヤーマスク |
| AR Occluder Material | 作成した遮蔽オブジェクト用の透明マテリアルの参照 |
ここまでで、設定ファイルの変更は完了です。
遮蔽する側のオブジェクトのレイヤーを作成したAR Occluderレイヤーに変更します。
親オブジェクトだけでなく、すべての子オブジェクトのレイヤーも一括で変更してください(親オブジェクトのレイヤーを変更すると、子オブジェクトのレイヤーを変更するかどうかのウィンドウが表示されます)。
AR Extensions パッケージの Materials フォルダに遮蔽するオブジェクトに設定するための “ZWrite” というマテリアルを用意しています。遮蔽する側のオブジェクトにはこのマテリアルを設定してください。
AR Extensions ウィンドウに用意している機能を使うことで、シーン内の都市モデルのマテリアルを一括で変更することができます。ストリーミングを用いる場合は Cesium3DTileset コンポーネントの Opaque Material フィールドを設定してください。
遮蔽されるオブジェクトのレイヤーを作成したAR Occludeeレイヤーに変更します。
以上で、ARオクルージョンをオブジェクトに設定することができます。
