空間メッシュ
空間メッシュは、実世界からスキャンした形状に基づいてメッシュを生成します。これは、実空間に基づいたコンテンツを提供し、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) {
...
}
}