メッシュ・フィルタリングでセマンティック・チャンネルを除外する方法
セマンティック・メッシュ・フィルタリングでは、セマンティック・チャンネルの許可リストまたはブロックリストを設定できます。 これらは標準的な許可/ブロックリストの動作に従します。 許可リストを使用すると、リストにないすべてのチャンネルが除外され、ブロッ クリストを使用すると、リストにあるすべてのチャンネルが除外されます。
使用可能なセマンティック・チャンネルのリストについては、セマンティックを参照してください。

前提条件
ARDKがインストールされたUnityプロジェクトと、基本的なARシーンが必要です。 詳しくは、ARDK 3のインストールおよび基本的なARシーンの設定を参照してください。
プロジェクトには、Lightship Meshingサブシステムも必要です。 プロジェクトにメッシングを追加するには、メッシュを作成するの手順に従ってください。
セマンティック・メッシュ・フィルタリングを設定する
セマンティック・メッシュ・フィルタリングを設定するには、次の手順を行います。
- Hierarchy で XROrigin と Camera Offset を展開し、 Main Camera を選択します。
- Inspector で、 Add Component をクリックし、 ARSegmentationManagerを Main Camera に追加します。
- Hierarchy で、メッシュ設定時に作成した MeshManager の GameObjectを選択します。
- 次に、 Lightship Meshing Extension を見つけ、 Mesh Filtering の横にあるボックスにチェックを入れて設定を有効にします。
- Enable Allow List(許可リストを有効にする) と Enable Block List(ブロックリストを有効にする) の2つのオプションが表示されます。 使用するリストを選択し、各リストの下にある +をクリックしてスロットを追加します。 スロットを追加したら、許可または除外するセマンティックチャンネルの名前を1行ずつ入力します。 以下の例では、groundチャンネルが許可リストに含まれているため、地面のみがキャプチャされます。
 
許可リストとブロックリストでは、一度無効にして再度有効にしても、設定やチャンネルリストは記憶されます。
推奨される使用方法
セマンティックチャンネルは、さまざまな一般的なオブジェクトや 構造物に適用されますが、メッシュを作成する際には通常含めたくない要素もあります。 少なくとも、skyとperson がメッシュに含まれないように、ブロックリストで除外することをお勧めします。
 
また、許可リストとブロックリストを組み合わせて、シーンの特定の部分をメッシュとしてキャプチャすることもできます。 例として、草原を通る道のメッシュをキャプチャする場合、groundを許可し、skyとgrassをブロックすることで、草のない地面だけがキャプチャされ、道のメッシュが作成されます。 他にも、興味を引く建物のメッシュをキャプチャする場合、building を許可し、 person 、 ground 、 sky をブロックすることで建物だけをキャプチャできます。
 
スクリプトの例
このスクリプトは、コードでメッシュ・フィルタリングを使用する基本的な例を示しています。 許可リストを定義し、そのリストが有効であることを確認してから、メッシュ・フィルタリングのオンとオフを切り替えるメソッドも紹介します。
クリッ クしてToggleMeshFiltering.csを表示
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Niantic.Lightship.AR.Meshing
public class ToggleMeshFiltering : MonoBehaviour
{
    [SerializeField] private LightshipMeshingExtension _meshingExtension;
    // Startメソッドは最初のフレームが更新される前に呼び出される
    void Start()
    {
      // 許可リストを定義
      _meshingExtension.AllowList = new List<string>() {"ground"};
      _meshingExtension.IsFilteringAllowListEnabled = true;
    }
    void ToggleMeshFiltering()
    {
      _meshingExtension.IsMeshFilteringEnabled = !_meshingExtension.IsMeshFilteringEnabled;
    }
}