メッシング
メッシングは、深度データとトラッキングデータを使用して、スキャンされた現実の世界の推定ジオメトリを表すメッシュを生成する機能です。
標準の ARMeshManager
(opens in new window)をシーンに配置することで、開発者は、仮想オブジェクトが現実世界の環境と相互作用することを可能にするライブメッシュにアクセスすることができます。 例えば、メッシュ化されたシーンに投げ込まれたバーチャルボールは、床や壁でリアルに跳ね返ります。
Niantic Lightship SDKがUnityで有効になっている場合でも、メッシングはUnityのAR Foundation Meshing Subsystem(新しいウィンドウで開きます)を通じて提供され、標準の ARMeshManager
(新しいウィンドウで開きます)を使用して有効にします。 Lightshipはデフォルトの実装をオーバーライドし、標準インターフェースを通じてNiantic独自のメッシュ生成技術を提供します。
メッシングは、LiDARとLiDAR以外のデバイスの両方で機能します。 この機能はAndroidとiOSの両プラットフォームで動作します。 ライダーデバイスのサポートについては、シーンに[AROcclusionManager] (https://docs.unity3d.com/Packages/com.unity.xr.arfoundation@5.0/api/UnityEngine.XR.ARFoundation.AROcclusionManager.html) (opens in new window)が存在することを確認してください。
メッシュブロック
3D世界は一定の大きさの "ブロック "に分割され、各メッシュブロックの名前は3D世界での位置に対応している。 Meshing を実行すると、XROrigin
> Trackables
の下のシーン階層に新しいメッシュブロックが作成されます。 各ブロックは、ARMeshManager
で指定されたMesh Prefabによって定義された独自のレンダラーとコライダーを持ちます。 メッシュブロックは、3D表現に新しいデータが追加されると、継続的に更新されます。
メッシュ拡張
Lightshipのメッシング・システムは、距離、品質、クリーンアップのメッシング・ルールを微調整できる追加オプションを公開しています。
Lightship Meshing Extension スクリプトを Meshing オブジェクトに追加すると、これらの設定にアクセスできるようになります:
- 目標フレームレート:メッシュ更新ルーチンを実行する1秒あたりの回数。
- ARフュージョンのパラメータ:
- 最大統合距離(Maximum Integration Distance):深度サンプルを3Dシーンに統合するための遠距離しきい値(メートル単位)。 カメラからこの距離以上離れると、新しいメッシュブロックは生成されない。
- ボクセルサイズ(Voxel Size):シーン内の個々のボクセル要素のサイズ(メートル単位)。 値を大きくするとメモリは節約できますが、サーフェスの精度は落ちます。
- 距離ベースのボリュームクリーンアップを有効にします:これを有効にすると、(新しいメッシュが生成される領域の外に移動した時点で)ボリュームメトリック表現内のすでに処理された要素をクリーンアップすることで、メモリを節約し、レイテンシを滑らかにします。
- ARメッシュパラメータ:
- メッシュブロックのサイズ:メッシュフィルターとメッシュコライダーの生成に使用するメッシュブロックのサイズ。
- メッシュ除去距離(Mesh Culling Distance):メッシュブロックがシーンから削除される距離。 カリングを無効にするには0を設定します。
- メッシュ・デシメーションを有効にする:メッシュから余分な三角形を削除してメモリを節約するために有効にします。
- メッシュフィルタリング:
- メッシュ・フィルタリングは有効ですか?メッシュフィルタリングを有効にするには、このボックスにチェックを入れます。
メッシュフィルター(Mesh Filtering)
メッシュ・フィルタリングは、セマンティック・セグメンテーションを使用して、メッシュのセクションを地面や
空などの
世界の共通部分として識別し、その情報を使用して、ユーザー定義の許可リストとブロックリストを使用して、最終メッシュの一部とすべきものを決定します。 例えば、空を
含むブロックリストは最終メッシュから空を削除し、地面を
含む許可リストは地面以外のすべてを除外する。 詳しくは、メッシュ・フィルタリングでセマンティック・チャンネルを除外する方法をご覧ください。
長距離メッシュ
例えば、 Voxel Sizeを大きくし、 Enable Distance Based Volumentric Cleanupをオンにし、 Maximum Integration Distance と Mesh Culling Distance を20メートルから40メートルの間で大きくすることで、より大きな距離をメッシュするようにアプリケーションを設定することができます:
これらの設定は、ハイエンドのデバイスにのみ推奨されます。 対応デバイスについては、 Google ARCore デバイスリスト および Apple ARKit デバイスリストを参照してください。
- Target Frame Rate: 20
- AR Fusion Parameters:
- Maximum Integration Distance (最大積分距離): 40
- Voxel Size (ボクセルサイズ): 0.05
- Enable Distance Based Volumentric Cleanup: True
- AR Meshing Parameters:
- Mesh Block Size: 1.4
- メッシュ除去距離:40 ( >= 最大統合距離)
- Enable Mesh Decimation: True
注意:ARMeshManagerのConcurrent Queues Sizeを増加させ、メッシュの距離を増加させ、サーフェスされるタイルの数に対応できるようにする必要があります。 しかし、これはCPUやGPUの使用量を増加させるので、あなたのシナリオに合わせて調整する必要がある。 LDM >20をハイエンド・デバイスで使用することをお勧めします。
ライダー装置
ライダー・デバイスでは、ライダー深度またはライトシップ深度のいずれかでライトシップ・メッシングを使用することができます。 ライダー深度を使用するには、Niantic Lightship Settingsメニュー(Lightshipトップメニュー > Settings)でPrefer LiDAR if Availableが有効になっており、シーンに[AROcclusionManager] (https://docs.unity3d.com/Packages/com.unity.xr.arfoundation@5.0/api/UnityEngine.XR.ARFoundation.AROcclusionManager.html) (opens in new window)が存在することを確認します。 (オクルージョンのプリファレンス・モードとして「オクルージョンなし」が選択されていても、メッシュ作成はサポートされます)。
ライダーの深度は、最大積分距離が5メートル程度までしか対応できない。 ユーザーから遠く離れたメッシュブロックを生成したい場合は、Prefer LiDAR if Availableを無効にし、代わりにLightship Depthを使用してください。