本文へスキップ

メッシュ・フィルタリングでセマンティック・チャンネルを除外する方法

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

使用可能なセマンティック・チャンネルのリストについては、セマンティックを参照してください。

Example of Mesh Filtering being turned on and off

前提条件

ARDKがインストールされたUnityプロジェクトと、基本的なARシーンが必要です。 詳しくは、ARDK 3のインストールおよび基本ARシーンの設定を参照してください。

プロジェクトには、Lightship Meshingサブシステムも必要です。 プロジェクトにメッシングを追加するには、メッシュを作成するの手順に従ってください。

セマンティック・メッシュ・フィルタリングを設定する

セマンティック・メッシュ・フィルタリングを設定するには、次の手順を行います。

  1. HierarchyXROriginCamera Offset を展開し、 Main Camera を選択します。
  2. Inspector で、 Add Component をクリックし、 ARSegmentationManagerMain Camera に追加します。
  3. Hierarchy で、メッシュ設定時に作成した MeshManagerGameObject を選択します。
  4. 次に、 Lightship Meshing Extension を見つけ、 Mesh Filtering の横にあるボックスにチェックを入れて設定を有効にします。
  5. Enable Allow List(許可リストを有効にする)Enable Block List(ブロックリストを有効にする) の2つのオプションが表示されます。 使用するリストを選択し、各リストの下にある + をクリックしてスロットを追加します。 スロットを追加したら、許可または除外するセマンティックチャンネルの名前を1行ずつ入力します。 以下の例では、 ground チャンネルが許可リストに含まれているため、地面のみがキャプチャされます。
Example usage of a semantic filtering allowlist

許可リストとブロックリストでは、一度無効にして再度有効にしても、設定やチャンネルリストは記憶されます。

推奨される使用方法

セマンティックチャンネルは、さまざまな一般的なオブジェクトや構造物に適用されますが、メッシュを作成する際には通常含めたくない要素もあります。 少なくとも、skyperson がメッシュに含まれないように、ブロックリストで除外することをお勧めします。

Example usage of a semantic filtering blocklist

また、許可リストとブロックリストを組み合わせて、シーンの特定の部分をメッシュとしてキャプチャすることもできます。 例として、草原を通る道のメッシュをキャプチャする場合、groundを許可し、skygrassをブロックすることで、草のない地面だけがキャプチャされ、道のメッシュが作成されます。 他にも、興味を引く建物のメッシュをキャプチャする場合、building を許可し、 persongroundsky をブロックすることで建物だけをキャプチャできます。

Example usage of both semantic filtering lists

スクリプトの例

このスクリプトは、コードでメッシュ・フィルタリングを使用する基本的な例を示しています。 許可リストを定義し、そのリストが有効であることを確認してから、メッシュ・フィルタリングのオンとオフを切り替えるメソッドも紹介します。

クリックして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;
}
}