本文へスキップ

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

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

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

Example of Mesh Filtering being turned on and off

前提条件

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

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

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

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

  1. Hierarchyで、XROriginCamera Offsetを展開し、Main Cameraを選択します。
  2. Inspectorで、Add Componentをクリックし、ARSegmentationManagerMain Cameraに追加します。
  3. Hierarchyで、Meshing setupで作成したMeshManager GameObjectを選択します。
  4. 次に、Lightship Meshing Extensionを見つけ、Mesh Filteringの隣にあるボックスをチェックして有効にします。
  5. 2つのオプションが表示されます:「許可リストを有効にする」と「ブロックリストを有効にする」です。 使用するリストを選択し、各リストの下にある+をクリックしてスロットを追加します。 スロットを追加したら、許可/除外したいセマンティックチャンネルの名前を1行に1つずつ入力します。 次の例では、ground チャンネルは許可リストにあるので、メッシュは地面だけをキャプチャする。
Example usage of a semantic filtering allowlist

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

推奨の使用方法

セマンティック・チャンネルは様々な一般的なオブジェクトや構造に適用され、メッシュを作成する際に通常含ませたくないものもあります。 少なくとも、ブロックリストを使ってskypersonをメッシュから除外することをお勧めする。

Example usage of a semantic filtering blocklist

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

Example usage of both semantic filtering lists

スクリプトの例

このスクリプトは、メッシュ・フィルタリングの基本的な使用例をコードで示したものである。 allowlistを定義し、そのリストがアクティブであることを確認し、メッシュフィルタリングのオンとオフを切り替える方法を提供する。

クリックして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()
{
// Allow Listの定義
_meshingExtension.AllowList = new List<string>() {"ground"};
_meshingExtension.IsFilteringAllowListEnabled = true;
}

void ToggleMeshFiltering()
{
_meshingExtension.IsMeshFilteringEnabled = !_meshingExtension.IsMeshFilteringEnabled;
}.
}