シーンモデルの使用
更新日時: 2025/06/03
このページでは、シーンモデルを実装する方法、スペースの設定を通してシーンモデルをキャプチャする方法、そしてシーンアンカーが現実世界の環境データへのアクセスを提供する方法について学びを深めることができます。
シーンモデルは、現実空間を一元的かつ包括的に表現したものです。アプリによって簡単にインデックス化とクエリが可能な形状情報と意味情報を提供します。
スペースの設定は、キャプチャフローを通してユーザーにガイドを提供する、システム管理プロセスです。ユーザーによって
アクセス許可を与えられたすべてのアプリがアクセスできる、単一の
シーンモデルをキャプチャします。
シーンモデルと
スペースの設定に関する基本情報について詳しくは、
シーンの概要をご覧ください。
シーンモデルは多数の
シーンアンカーで構成され、各シーンアンカーにはそのインテントを示す補足データが保持されています。アンカーフレームワークは、
エンティティコンポーネントシステムのパターンと密接に連携しています。
エンティティは一意の識別子を伴う保存可能なデータ型で、
コンポーネントはデータを含み、
エンティティ上に保存されます。
システムは、必要な
コンポーネントを持つすべての
エンティティ上で全体的に動作します。
シーンモデルの文脈において、
シーンアンカーは
エンティティであり、その上に任意の数の
コンポーネントを保持することができます(セマンティック分類、2Dバウンディング平面、Locatableなど)。
スペースの設定(旧称はシーンのキャプチャ)は、シーンモデルをキャプチャするプロセスです。デバイス上で動作しているすべてのアプリが同じ環境データにアクセスできるよう、システムによって管理されています。これは、各アプリがそのライフサイクル中に環境をスキャンしなければならないパラダイムとは対照的です。
スペースの設定はユーザー主導のプロセスです。最初に、環境をスキャンしてスペースメッシュを取得し、スペース情報(床から天井の高さ、壁、オブジェクトなど)を抽出します。その後、ユーザーがエラーの修正(壁の位置合わせ)と欠落情報(ルームのオブジェクト)の追加を行い、プロセスを完了します。プロセスは、システムまたはアプリによって起動されます。
現在のところ、Linkを通じてスペースの設定を実行することはできません。Linkを経由してシーンモデルを読み込むには、その前にデバイス上でスペースの設定を実行する必要があります。
シーンモデルには機密性の高いユーザーデータが含まれているため、アプリがデータにアクセスできるかどうかはユーザーによって完全に制御されます。アプリは、アプリのマニフェストファイルを通して、アクセス許可を使用するインテントを宣言する必要があります。その後、実行時にアクセス許可をリクエストしてユーザーの承認を求めます。
シーンアンカーがシーンモデルによって表現される環境を示すためには、コンポーネントが必要です。コンポーネントがデータを提供するには、コンポーネントが有効にされていなければなりません。したがってアプリは、シーンアンカーが特定のコンポーネントをサポートするかどうか、および、そのコンポーネントが有効になっているかどうかの両方をクエリする必要があります。
シーンアンカーは、スペースの設定プロセスを通してしか作成できないため、この種のアンカーをシステム管理型と呼びます。一方、空間アンカーはユーザー管理型です。
シーンアンカーはスペースの設定時にMeta Horizon OSによって作成されますが、空間アンカーはアプリにより作成されます。シーンアンカーには、アンカーのポーズなど、シーン特有の他の情報が含まれています。最後の点として、アプリが作成できるのは空間アンカーのみですが、シーンアンカーにクエリをかけることはできます。
Locatableコンポーネントは、このアンカーがトラッキング可能であることをシステムに知らせます。有効化されると、アプリがアンカーのポーズ情報を継続的にクエリすることができます。これは、アンカーのライフサイクルにおけるトラッキングの精度の差によって変わります。
RoomLayoutコンポーネントは、壁、天井、床を構成するアンカーへの参照を含みます。AnchorContainerコンポーネントは、子アンカーのリストへの参照を含みます。
Bounded2DコンポーネントとBounded3Dコンポーネントは、アンカーの寸法に関する情報を提供します。寸法をキャプチャするサイズプロパティ、および、2D/3Dバウンディングボックスの原点と、Locatableコンポーネントで定義されるアンカーの原点との差を示すオフセットプロパティを持ちます。TriangleMeshコンポーネントは、アンカー用にインデックス化された三角メッシュを提供します。Boundary2Dコンポーネントは、アンカーのポリゴンアウトラインへのアクセスを提供し、これは一般的に床のアンカーでよく見られます。
SemanticClassificationコンポーネントは、アンカーを多数のカテゴリに分類します。以下に、すべての分類をまとめたリストを示します。
StorableコンポーネントおよびShareableコンポーネントは、空間アンカーにのみ適用されます。
シーンアンカーはシステムが管理するため、サポートされるコンポーネントは事前に規定されています。
ルームのシーンアンカーには、天井、壁、床を参照するRoomLayoutコンポーネントと、ルームのシーンアンカーをすべて保持するAnchorContainerコンポーネントがあります。
2D要素(壁、天井、床、窓、ウォールアートなど)のシーンアンカーには、アンカーの位置を取得するLocatableコンポーネント、ラベルのためのSemantic Classificationコンポーネント、バウンディングボックスの寸法用のBounded2Dコンポーネントがあります。また、ポリゴンアウトライン用のBoundary2Dコンポーネントを含むこともあります(床は、このコンポーネントを使って壁で構成された部屋のアウトラインを示します)。
3Dのみのシーンアンカー(スクリーン、植物、その他など)は、2Dの シーンアンカーに似ていますが、Bounded2Dの代わりにBounded3Dコンポーネントを有しています。
2Dと3Dの両方にあてはまるシーンアンカーもあります(テーブル, ソファー、ベッド、ストレージなど)。この場合、3Dコンポーネントはバウンディングボリュームを表し、2Dコンポーネントは機能サーフェスとして知られる関心領域に相当します。このようなアンカーは2Dアンカーに似ていますが、Bounded3Dコンポーネントも含んでいます。
シーンメッシュは、単一の静的アーティファクトでスペース全体をカバーする三角メッシュです。ルームのレイアウト要素(壁、天井、床)の近くのサーフェスにスナップされ、スペースの中にある他のすべての物体の境界線を大まかに示します。一般的なシーンアンカーとして表現されますが、このオブジェクトのインスタンスはスペースごとに1つしかありません。
シーンメッシュのシーンアンカーには、アンカーの位置を取得するLocatableコンポーネントと、GLOBAL_MESHラベル用のSemantic Classificationコンポーネントと、形状を提供するTriangleMeshコンポーネントがあります。
シーンアンカーは、デフォルトの
OpenXR座標系に対応する直交右手座標系で定義されます。一方Unityは、
左手座標系を使います。これが、
シーンアンカーの向きと寸法に整合するオブジェクトをスポーンさせるための
設計時間の検討と、各3D位置の
実行時変換(ほとんどの場合開発者には非表示)につながります。
セマンティック分類は、事前に規定されたシステム管理のオブジェクトタイプにシーンアンカーを分類します。セマンティッククラスは、基本的な形状の特徴を超えてオブジェクトを分類することで、分類固有のゲームロジックを提供する可能性をアプリ開発者にもたらします。
セマンティックラベル | 説明 | 幾何学表現 |
ルームの構造 | | |
CEILING | 天井 | 2D |
DOOR_FRAME | ドアの枠。壁面内に存在していなければならない | 2D |
FLOOR | 床 | 2D |
INVISIBLE_WALL_FACE | オープンルームを囲むためにスペースの設定によって追加された壁面 | 2D |
WALL_ART | 壁面アート。壁面内に存在していなければならない | 2D |
WALL_FACE | 壁面 | 2D |
WINDOW_FRAME | 窓枠 - 壁面内に存在していなければならない | 2D |
ルームの内容 | | |
COUCH | ソファー | 2D (シート)と3D (立体) |
TABLE | テーブル | 2D (テーブル上面)と3D (立体) |
BED | ベッド | 2D (サーフェス)と3D (立体) |
LAMP | ランプ | 3D |
PLANT | 植物 | 3D |
SCREEN | スクリーン | 3D |
STORAGE | 保存容器 | 2D (単一の棚)と3D (立体) |
メッシュのオブジェクト | | |
GLOBAL_MESH | スペースの設定中にキャプチャされたユーザーのスペースの三角メッシュ | |
未分類のオブジェクト | | |
OTHER | 一般的な立体 | 3D |
このラベルリストは進化しており、サポートされる2Dオブジェクトと3Dオブジェクトは定期的に追加されています。そのため、OTHERタイプはフォールバックと考えてください。今後、OTHERがタイプではなくなる可能性があり、このラベルを付けているオブジェクトは、変更が必要になるかもしれません。
シーンモデルとスペースの設定/シーンキャプチャの仕組みについて学んだところで、Unityのデータにアクセスしてみましょう。