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

空間メッシュ (実験的)

はじめに

WARNING

パッケージとSnapdragon Spaces Service側の最適化により、現時点ではリリース間の後方互換性が失われているため、この機能は実験的とされています。

このサンプルでは、現実世界の環境に近似した空間メッシュを生成して可視化する方法を紹介します。

空間メッシュの基本的な情報や、AR Foundationの AR Mesh Manager コンポーネントの機能については、Unityのドキュメントを参照してください。

機能の有効化

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

サンプルのインポート

まだサンプルをインポートしていない場合は、以下の手順でインポートすることができます。

  1. 基本パッケージのインポート
  2. 基本サンプルのインポート

サンプルシーンは以下の場所に存在します。
Assets/Samples/Snapdragon Spaces/0.XX.0/Core Samples/Scenes/Spatial Meshing Sample/Spatial Meshing Sample.unity

サンプルの仕組み

ARMeshManager

ARMeshManagerコンポーネントは、ARSessionOriginゲームオブジェクトの子にアタッチする必要があります。このコンポーネントには、メッシュが利用可能になったときに生成されるMeshFilterへの参照があります。 alt text

WARNING

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

以下のプロパティはサポートされていません:

  • 生成されたメッシュのDensityの変更は現在サポートされていません。
  • TangentsTexture CoordinatesColorsは現在メッシュの一部として生成されません。ARMeshManagerコンポーネントからこれらのプロパティのバッファにアクセスすると、nullの結果が生成される場合があります。
  • 現在、Concurrent Queue Sizeの変更はサポートされていません。

Normalsプロパティはデフォルトで有効になっています。

TIP

サポートされていないARMeshManagerコンポーネントのプロパティを変更すると、アプリのビルド時にコンソールに警告が表示されます。

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) {
...
}
}

Spaces AR Mesh Manger Config

AR Mesh Managerコンポーネントには、Snapdragon SpacesのUnityパッケージのサブシステムの実装でサポートされていないプロパティがあります。
サポートされていないプロパティを使用しようとすると、ビルドが実行され、Spatial Meshing(Experimental)機能が有効になっているときに警告が表示されます。

生成されたメッシュを設定するための追加オプションがある(オプションの)Spaces AR Mesh Manager Configコンポーネントを使用することをお勧めします。
このコンポーネントを使用すると、Spatial Meshingプロバイダは、ランタイム側から来るTrackingOriginMode.Floor関連のカメラの高さのオフセットも処理できます。
このコンポーネントを使用しないと、メッシュが間違った位置に表示される可能性があります。

このコンポーネントはARMeshManagerコンポーネントと同じゲームオブジェクトにアタッチする必要があります。 alt text

  • CPU法線を計算する場合

    • 有効にすると、CPU法線がメッシュの各頂点について計算されます。
    • 一部の頂点はメッシュ内で繰り返されることがあります(異なるインデックスを使用)。
    • これは生成されたメッシュに目に見える継ぎ目を生じさせます。
    • メッシュ内の各インデックスについて、そのインデックスを参照する各三角形は結果の法線に寄与しますが、(繰り返される頂点の)異なるインデックスは異なる法線を持つことがあります。
    • ARMeshManagerコンポーネントのCalculate CPU NormalsプロパティとNormalsプロパティの両方が有効になっていないか、両方が無効になっている場合、アプリのビルド時にコンソールに説明の警告が出力されます。
  • スムージング法線を使用する場合

    • 有効にすると、各頂点のCPU法線がスムージングされます。
    • 同じ空間で異なるインデックスを持つ頂点を参照するすべての三角形は、それらの重複頂点を同じ頂点であるかのように扱います。
    • このため、検出されたジオメトリのハードエッジがうまく定義されなくなることがありますが、継ぎ目の見た目は軽減されます。
    • 平滑化された法線を計算すると処理能力が上がり、パフォーマンスに影響します。

デフォルトでは、サンプルを開くと、検出された環境に適応したポリゴンを持つメッシュが生成されます。

  • Calculate CPU Normalsプロパティが有効な場合、メッシュはMesh With Cpu Normalsマテリアルを使用してStandardシェーダでビジュアライズされます。
  • Calculate CPU Normalsプロパティが無効の場合、メッシュは視覚化のみを目的として法線を生成するカスタムMeshVisualization.shaderで視覚化されます。