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