空間メッシュ
空間メッシュは、実世界からスキャンした形状に基づいてメッシュを生成します。これは、実空間に基づいたコンテンツを提供し、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ミリ秒の一定間隔で行われます。
MiRZAでのパフォーマンス期待値
- MiRZAの構造上、他のデバイスと比較してメッシュ生成のパフォーマンスが低下する可能性があります。
- メッシュ生成プロセスを最適化し最良の結果を得るために、以下のワークフローに従うことをおすすめします。
MiRZAにおける空間メッシュ作成の推奨ワークフロー
- メッシュ生成の開始:アプリケーションでメッシュ生成機能を初期化することで、メッシュ生成プロセスを開始します。
- 十分な範囲をカバーするまで部屋をスキャン:部屋の中を移動して周囲をスキャンします。メッシュ生成が必要なすべてのエリアをカバーしていることを確認してください。正確な空間マッピングのために十分な範囲をカバーすることが目標です。
- 現在のメッシュを保存してメッシュ生成を停止:部屋のスキャンが終わり、十分な範囲をカバーできたら、現在のメッシュを保存します。この手順により、メッシュデータが保持されます。
- 十分な精度と範囲をもつメッシュがその場所に固定される:保存されたメッシュはその場所に固定されたままになり、スキャンされた環境を安定して正確に再現されます。
このワークフローに従うことで、MiRZAでメッシュ生成プロセスを最適化し、空間メッシュアプリケーションにおけるパフォーマンスと精度を向上させることができます。