空間メッシュ
空間メッシュは、実世界からスキャンした形状に基づいてメッシュを生成します。これは、実空間に基づいたコンテンツを提供し、XR体験をユーザーの周囲の空間に根付かせるのに役立ちます。空間メッシュは、現実のオブジェクトが仮想コンテンツと相互作用しているように見せたり、仮想コンテンツを覆い隠したりすることで、没入感を向上させます。
機能の有効化
この機能を使用するには、以下のOpenXRのプロジェクト設定でSpatial Meshingにチェックする必要があります。
Project Settings > XR Plug-in Management > OpenXR (Androidタブ) > OpenXR Feature Groups > Snapdragon Spaces > Spatial Meshing
ARMeshManager
ARMeshManager
コンポーネントは、XR Origin
ゲームオブジェクトの子にアタッチする必要があります。AR FoundationのAR Mesh Managerコンポーネントが何をするかについての詳細は、Unityのドキュメントを参照してください。
ARMeshManager
コンポーネントをカメラオブジェクトにアタッチすると、オブジェクトのScaleが(1, 1, 1)から(10, 10, 10)に変更されます。これにより、元のカメラスケールに戻るまで、ARグラス上でレンダリングの問題が発生します。
AR Mesh Managerコンポーネントには、メッシュが利用可能になったときに生成されるMesh Filterへの参照があります。
空間メッシュ機能は、AR Mesh Managerが公開する以下の表のプロパティをサポートします。
プロパティ | サポート | 備考 |
---|---|---|
Density | No | このプロパティの値がデフォルトの0.5から変更されると、アプリケーションのビルド時にコンソールに警告が出力されます。メッシュは固定解像度で生成されます。 |
Normals | Yes | これが有効な場合、法線はCPU上で生成されます。 |
Tangents | No | これが有効な場合、アプリケ ーションのビルド時にコンソールに警告が出力されます。 |
Texture Coordinates | No | これが有効な場合、アプリケーションのビルド時にコンソールに警告が記録されます。 |
Colors | No | これが有効な場合、アプリケーションのビルド時にコンソールに警告が記録されます。 |
Concurrent Queue Size | 備考を参照 | Snapdragon Spaces Meshing Providerで生成されるメッシュは1つだけであるため、このプロパティを変更しても影響はありません。 |
ARMeshManager
コンポーネントのmeshesChanged
コールバックをサブスクライブすることで、メッシュが追加、更新、削除されたときのデータを取得できます。
サンプルコード
private ARMeshManager _meshManager;
public void Awake() {
_meshManager = FindObjectOfType<ARMeshManager>();
}
public override void OnEnable() {
...
_meshManager.meshesChanged += OnMeshesChanged;
}
public override void OnDisable() {
...
_meshManager.meshesChanged -= OnMeshesChanged;
}
void OnMeshesChanged(ARMeshesChangedEventArgs args) {
foreach (MeshFilter meshFilter in args.added) {
...
}
foreach (MeshFilter meshFilter in args.updated) {
...
}
foreach (MeshFilter meshFilter in args.removed) {
...
}
}
制限事項
- 窓のような透明なオブジェクトは検出が困難です。オブジェクトを検出できない場合、メッシュに穴が開きます。
- 鏡のような反射率の高い表面や光沢の ある表面は、混乱を招くことがあります。メッシュが鏡の内側で検出されているように見えることがあります。
- 生成されたメッシュは、遠くのオブジェクトに対しては精度が落ちます。メッシュは、ユーザーから約5メートルの距離まで生成されます。
- 光の状態が悪い場合や、照明の状態が急激に変化する環境(ストロボライトの下など)では、メッシュを生成するのが難しい場合があります。
- メッシュの更新は、約1500ミリ秒の一定間隔で行われます。