メインコンテンツまでスキップ
バージョン: 1.0.1

空間メッシュ

空間メッシュは、実世界からスキャンした形状に基づいてメッシュを生成します。これは、実空間に基づいたコンテンツを提供し、XR体験をユーザーの周囲の空間に根付かせるのに役立ちます。空間メッシュは、現実のオブジェクトが仮想コンテンツと相互作用しているように見せたり、仮想コンテンツを覆い隠したりすることで、没入感を向上させます。

機能の有効化

この機能を使用するには、以下のOpenXRのプロジェクト設定でSpatial Meshingにチェックする必要があります。
Project Settings > XR Plug-in Management > OpenXR (Androidタブ) > OpenXR Feature Groups > Snapdragon Spaces > Spatial Meshing
alt text

ARMeshManager

ARMeshManagerコンポーネントは、XR Originゲームオブジェクトの子にアタッチする必要があります。AR FoundationのAR Mesh Managerコンポーネントが何をするかについての詳細は、Unityのドキュメントを参照してください。

WARNING

ARMeshManagerコンポーネントをカメラオブジェクトにアタッチすると、オブジェクトのScaleが(1, 1, 1)から(10, 10, 10)に変更されます。これにより、元のカメラスケールに戻るまで、ARグラス上でレンダリングの問題が発生します。

alt text
AR Mesh Managerコンポーネントには、メッシュが利用可能になったときに生成されるMesh Filterへの参照があります。

空間メッシュ機能は、AR Mesh Managerが公開する以下の表のプロパティをサポートします。

プロパティサポート備考
DensityNoこのプロパティの値がデフォルトの0.5から変更されると、アプリケーションのビルド時にコンソールに警告が出力されます。メッシュは固定解像度で生成されます。
NormalsYesこれが有効な場合、法線はCPU上で生成されます。
TangentsNoこれが有効な場合、アプリケーションのビルド時にコンソールに警告が出力されます。
Texture CoordinatesNoこれが有効な場合、アプリケーションのビルド時にコンソールに警告が記録されます。
ColorsNoこれが有効な場合、アプリケーションのビルド時にコンソールに警告が記録されます。
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ミリ秒の一定間隔で行われます。