Google ARCore XR Plugin の概要
Google ARCore XR Plugin パッケージを使用すると、Unity のマルチプラットフォーム XR API を介した ARCore サポートを有効にできます。このパッケージは、以下の XR サブシステムを実装します。
このバージョンの Google ARCore XR Plugin は、ARCore 1.31 を使用し、以下の機能をサポートしています。
- デバイスのローカライゼーション
- 水平面検出
- 垂直面検出
- 点群
- パススルーカメラビュー
- 照明推定
- アンカー
- 方向付き特徴点
- ヒットテスト
- セッション管理
- ARCore APK オンデマンドインストール
- 2D 画像トラッキング
- フェイストラッキング
- 環境プローブ
- オクルージョン
このパッケージは、以下のサブシステムはサポートしていません。
Google ARCore XR Plugin のインストール
XR Plug-in Management の設定で ARCore プラグインを有効にすると、Unity は自動的に ARCore パッケージをインストールします (必要な場合)。手順については、ARCore プラグインの有効化 を参照してください。
さらに、AR Foundation パッケージをインストールすることもできます。このパッケージは、Google ARCore XR Plugin を使用し、多くの有用なスクリプトとプレハブを提供します。このパッケージの詳細については、AR Foundation に関するドキュメント を参照してください。
Tip
また、このパッケージは、Unity Package Manager を使用してインストールおよびアンインストールすることもできます。Package Manager を使用してインストールしても、プラグインが自動的に有効になるわけではありません。XR Plug-in Management の設定 で有効にする必要があります。Unity Package Manager を使用したパッケージのインストール方法の詳細については、レジストリからのインストール を参照してください。
プロジェクト設定
ARCore アプリケーションに影響を与えるプロジェクト設定については、プロジェクト設定 を参照してください。
AR の必須または任意の指定
ARCore には、必須または任意のフラグを付けることができます。デフォルトでは、プラグインを有効にすると、ARCore は必須となります。この場合、アプリケーションは AR をサポートするデバイスにのみインストールできます。AR を任意として指定した場合、アプリケーションはすべての Android デバイスにインストールできます。
この設定の変更方法については、ARCore のサポート要件の設定 を参照してください。
プロジェクトの検証
Google ARCore XR Plugin パッケージはプロジェクトの検証をサポートしています。プロジェクトの検証は、プロジェクト設定の潜在的な問題を検出するために Unity エディターがチェックする一連のルールです。Google ARCore XR Plugin でチェックされるルールの詳細については、Project Validation のセクションを参照してください。
Google ARCore XR Plugin の使用
ほとんどの場合、ARCore API を直接使用するのではなく、AR Foundation パッケージが提供するスクリプト、プレハブ、アセットをハンドヘルド AR アプリケーションのベースとして使用する必要があります。Google ARCore XR Plugin は、Unity のマルチプラットフォーム XR API を使用して Google の ARCore プラットフォームをターゲットにするために必要なネイティブのエンドポイントを実装することにより、Android プラットフォームで AR Foundation 機能をサポートします。
Android ARCore 固有の機能にアクセスする必要がある場合は、Google ARCore XR Plugin API を使用します。AR Foundation リポジトリ の ARCoreFaceRegions のサンプルで、ARCore の機能の使用例を紹介しています。
Unity での AR アプリケーション開発に関する一般的な情報については、AR Foundation の使用 を参照してください。
セッション
ARCore は XRSessionSubsystem.GetAvailabilityAsync
を実装します。この関数をつかって、現在 ARCore を実行しているデバイスがサポート対象かどうかを判断するために使用します。ARCore のサポート対象デバイスのリストは頻繁に更新され、新たなデバイスが追加されてます。ARCore のすべてのサポート対象デバイスのリストについては、ARCore 対応デバイス を参照してください。
ARCore がまだデバイスにインストールされていない場合、アプリケーションは Google Play ストアに照会して、そのデバイスに対応しているバージョンの ARCore があるかどうかを確認する必要があります。そのためには、GetAvailabilityAsync
を使用して、コルーチン内で使用できる Promise
を返します。ARCore の場合、この照会に時間がかかることがあります。
デバイスはサポートされていても、ARCore がインストールされていないか、更新が必要な場合は、XRSessionSubsystem.InstallAsync
を呼び出します。これも Promise
を返します。
詳細については、ARSubsystems セッションに関するドキュメント を参照してください。
点群サブシステム
レイキャストは、レイキャストがヒットしたアイテムの Pose
を返します。特徴点に対してレイキャストを使用すると、ポーズの向きは、特徴点が表すと思われるサーフェスの推定値を提供します。
点群サブシステムは追加リソースを必要としないため、有効にしてもパフォーマンスに影響はありません。
ARCore の点群サブシステムは、1 つの XRPointCloud
しか生成しません。
詳細については、ARSubsystems 点群サブシステム を参照してください。
平面トラッキング
ARCore は、平面のサブサンプションをサポートします。つまり、ある平面を別の平面の中に含めることができます。Unity は、含まれている (組み込まれている) 平面を保持し、更新することはありません。
ARCore は、すべての平面に境界点を提供します。
ARCore の平面サブシステムは、追加の CPU リソースを必要とし、多くの電力使用が生じる可能性があります。水平および垂直の平面検出を有効にすると、追加のリソースが必要になります。電力を節約するために、アプリケーションで必要がない場合は、平面検出を無効にしてください。
平面検出モードを PlaneDetectionMode.None
に設定すると、サブシステムで Stop
を使用した場合と同じように動作します。
詳細については、ARSubsystems 平面サブシステムに関するドキュメント を参照してください。
画像トラッキング
ARCore で画像トラッキングを使用するには、参照画像ライブラリを作成する必要があります。作成方法については、画像トラッキングに関する AR サブシステムのドキュメント を参照してください。
Android 向けにプレイヤーをビルドするとき、ARCore のビルドコードは参照画像ライブラリごとに imgdb
ファイルを作成します。ARCore はこれらのファイルを、Unity がランタイムにアクセスできるように、プロジェクトの StreamingAssets
フォルダーの HiddenARCore
という名前のサブディレクトリに作成します。
ARCore では、AR 参照画像として .jpg または .png ファイルを使用できます。XRReferenceImageLibrary
にある参照画像が .jpg でも .png でもない場合、ARCore のビルドプロセッサーは、ARCore で使用できるように、テクスチャを .png に変換します。
Texture2D
を .png にエクスポートする際に、テクスチャのインポート設定 で Read/Write Enabled が無効になっていて、かつ Compression が None に設定されていると、エクスポートが失敗することがあります。
参照画像のソースアセットとしてではなく、ランタイムにテクスチャを使用する場合は、ソースアセット用に別の .jpg または .png のコピーを作成します。これにより、テクスチャのインポート設定によるランタイムのパフォーマンスへの影響が軽減されます。
参照画像の寸法
ARCore での画像検出を向上させるために、画像の寸法を指定できます。参照画像の寸法を指定すると、ARCore は画像の幅を受け取り、画像のアスペクト比から高さを算出します。
フェイストラッキング
フェイストラッキングの詳細については、ARSubsystems のフェイストラッキング に関するドキュメントを参照してください。
ARCore の顔のサブシステムは、"領域" へのアクセスを可能にするフェイストラッキングメソッドを提供します。領域は ARCore 固有のものです。ARCore は、顔の特徴を定義する以下の領域へのアクセスを提供します。
- 鼻の頭
- 額の左側
- 額の右側
各領域には、Pose が関連付けられています。顔の領域にアクセスするには、以下のスクリプトを使用して、ARCoreFaceSubsystem のインスタンスを取得します。
XRFaceSubsystem faceSubsystem = ...
# if UNITY_ANDROID
var arcoreFaceSubsystem = faceSubsystem as ARCoreFaceSubsystem;
if (arcoreFaceSubsystem != null)
{
var regionData = new NativeArray<ARCoreFaceRegionData>(0, Allocator.Temp);
arcoreFaceSubsystem.GetRegionPoses(faceId, Allocator.Temp, ref regionData);
using (regionData)
{
foreach (var data in regionData)
{
Debug.LogFormat("Region {0} is at {1}", data.region, data.pose);
}
}
}
# endif
照明推定
ARCore の照明推定には、以下の 2 つの動作モードがあります。
LightEstimationMode.AmbientIntensity
: 色補正と平均ピクセル輝度に関する情報を提供します。LightEstimationMode.EnvironmentalHDR
: メインライトの向き、HDR カラー、およびアンビエントの SphericalHarmonicsL2 の推定値を提供します (球面調和関数の詳細については、SphericalHarmonicsL2 を参照してください)。
両方のモードを同時に使用することはできません。
ARCore の フェイストラッキング と 環境プローブ は、照明推定モードを使用するか、光源推定モードに影響を及ぼします。これらのサブシステムの一方または両方が存在し、enabled
になっている場合、設定に応じて照明推定モードの動作が変化します。
機能 | サポートされる照明推定モード | 変更可能 |
---|---|---|
フェイストラッキング | LightEstimationMode.AmbientIntensity 、LightEstimationMode.Disabled |
はい |
環境プローブ | LightEstimationMode.EnvironmentalHDR |
いいえ |
フェイストラッキング: ARCore では、フェイストラッキングが有効な場合、
LightEstimationMode.EnvironmentalHDR
がサポートされないため、このモードが指定されていると、レンダリングが機能しなくなります。エラーを防ぐには、フェイストラッキングが有効な場合はLightEstimationMode.AmbientIntensity
またはLightEstimationMode.Disabled
を設定します。設定しなかった場合、ARCore によってLightEstimationMode.Disabled
が適用されます。環境プローブ: ARCore の環境プローブがキューブマップを更新できるように、照明推定モードを
LightEstimationMode.EnvironmentalHDR
に設定する必要があります。これにより、ARCore にこの設定の所有権が渡されます。
カメラ設定
XRCameraConfiguration には、IntPtr
フィールド nativeConfigurationHandle
が含まれています。これはプラットフォーム固有のハンドルです。ARCore の場合、このハンドルは ArCameraConfiguration
へのポインターです。ネイティブオブジェクトは Unity によって管理されます。手動で除去しないでください。
オクルージョン
XROcclusionSubsystem の ARCore 実装は、環境深度テクスチャ はサポートしていますが、ヒューマンセグメンテーションに関連するその他のテクスチャはサポートしていません。
録画と再生
ARCore では、ArSession を .mp4
に記録して、後で再生できます。この機能をサポートするために、ARCoreSessionSubsystem は以下のメソッドを公開します。
録画を開始するには、ArRecordingConfig を指定します。これにより、Unity が録画を保存するファイル名とその他のオプションを指定します。StopRecording
を呼び出すと録画が停止します。録画を停止すると、Unity は ArRecordingConfig
で指定された .mp4
ファイルを作成します。これには ARCore が必要とするカメラフィードとセンサーデータが含まれています。
ビデオを再生するには、StartPlayback
メソッドを使用し、以前の録画時に作成された .mp4
ファイルを指定します。
ARCore で記録したファイルを開始または停止するには、ARCoreSessionSubsystem でセッションを一時停止します。セッションの一時停止と再開には、0.5 秒から 1.0 秒かかります。
ノート: ビデオ録画にはセンサーデータは含まれますが、計算結果は含まれません。ARCore は常に同じ出力を生成するわけではないため、同じ録画を再生しても、トラッカブル (trackable) が同じになるとは限りません。例えば、同じ録画を複数回再生すると、平面の検出結果が変わる場合があります。
技術に関する詳細
要件
Google ARCore XR Plugin のこのバージョンは、Unity エディターの以下のバージョンと互換性があります。
- 2021.2
- 2021.3
- 2022.1
- 2022.2
既知の制限事項
- ケルビン単位の色温度は、現在サポートされていません。
- XROcclusionSubsystemDescriptor のプロパティの supportsEnvironmentDepthImage と supportsEnvironmentDepthConfidenceImage は、サポートを決定する前にセッションが必要です。セッションがない場合、これらのプロパティは
false
を返します。セッションが確立されると、これらのプロパティはtrue
を返す場合があります。
パッケージの内容
このバージョンの Google ARCore XR Plugin には、以下が含まれます。
- 上記の XR サブシステムの実装を提供する共有ライブラリ
- カメラ画像のレンダリングに使用するシェーダー
- プラグインのメタデータファイル