XR_EXT_spatial_mesh_tracking
Name String
XR_EXT_spatial_mesh_tracking
拡張機能の種類
インスタンス拡張
登録済みの内線番号
784
リビジョン
1
承認ステータス
未批准
拡張機能とバージョンの依存関係
XR_EXT_spatial_entity
寄与者
Nihav Jain、Google
Natalie Fleury、Meta
Yuichi Taguchi、Meta
Ron Bessems、Meta
Yin Li、Microsoft
Jimmy Alamparambil、ByteDance
Zhipeng Liu、ByteDance
Jun Yan、ByteDance
概要
この拡張機能は XR_EXT_spatial_entity をベースにしており、環境の三角形メッシュをトラッキングするための空間機能を定義します。この拡張機能で定義された機能によって提供される三角形メッシュは、仮想コンテンツと環境の衝突を判断するためにアプリで使用されることを目的としています。
空間メッシュ トラッキング機能
この拡張機能は、環境の三角形メッシュをトラッキングするための空間機能として XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT を定義します。平面やオブジェクトなどのエンティティのメッシュのトラッキングは、この機能ではカバーされません。代わりに、それらのエンティティをトラッキングするそれぞれの機能の XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT コンポーネントの列挙によって示さなければなりません。
XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT は、ランタイムの機能とアプリケーションによって選択された構成に応じて、ウォータータイト メッシュと非ウォータータイト メッシュの両方をアプリケーションに提供するために使用されます。
ウォータータイト メッシュとは、あらゆるサイズのギャップやスキャンされていない領域が埋められ、特定の体積ブロック内で密なメッシュを形成しているメッシュです。その名のとおり、アプリケーションが水密メッシュ内に水を満たした場合、水密ボリュームから水が漏れることはありません。スキャンされたメッシュを水密にするには、多くの場合、非常に高いコンピューティングが必要になります。ただし、一部のランタイムでは、メッシュを事前に処理することでそのコストを相殺します。
ランタイム サポート
ランタイムが環境の三角形メッシュのトラッキングをサポートしている場合、xrEnumerateSpatialCapabilitiesEXT で XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT を列挙することで、このことを示さなければなりません。
XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT をサポートするランタイムには、次の 3 つの機能があります。
- ランタイムは、非ウォータータイト メッシュ トラッキングのみをサポートしています。この場合、ランタイムは xrEnumerateSpatialCapabilitiesEXT で
XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXTを列挙しますが、xrEnumerateSpatialCapabilityFeaturesEXT でXR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXTを列挙してはなりません(水密メッシュのトラッキングを参照)。 - ランタイムは、ウォータータイト メッシュ トラッキングと非ウォータータイト メッシュ トラッキングの両方をサポートしています。この場合、ランタイムは xrEnumerateSpatialCapabilitiesEXT で
XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXTを列挙し、xrEnumerateSpatialCapabilityFeaturesEXT でXR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXTも列挙して(水密メッシュのトラッキングを参照)、アプリからの水密メッシュ トラッキング リクエストを有効にする必要があります。 - ランタイムは、ウォータータイト メッシュ トラッキングのみをサポートしています。この場合、ランタイムは xrEnumerateSpatialCapabilitiesEXT で
XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXTを列挙し、xrEnumerateSpatialCapabilityFeaturesEXT でXR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXTも列挙しなければなりません(水密メッシュのトラッキングを参照)。これにより、水密メッシュのトラッキングをサポートしていることをアプリに示します。この特定のケースでは、XR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXTの構成に関係なく、ランタイムは常に水密メッシュをアプリに返します。
構成
XrSpatialCapabilityConfigurationMeshTrackingEXT 構造体は次のように定義されます。
typedef struct XrSpatialCapabilityConfigurationMeshTrackingEXT {
XrStructureType type;
const void* next;
XrSpatialCapabilityEXT capability;
uint32_t enabledComponentCount;
const XrSpatialComponentTypeEXT* enabledComponents;
} XrSpatialCapabilityConfigurationMeshTrackingEXT;
メンバーの説明
typeは、この構造の XrStructureType です。nextは、NULLまたは構造体チェーン内の次の構造体へのポインタです。capabilityは XrSpatialCapabilityEXT であり、XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXTでなければなりません。enabledComponentCountは、enabledComponents配列内の要素の数を表すuint32_tです。enabledComponentsは XrSpatialComponentTypeEXT の配列へのポインタです。
アプリは、XrSpatialContextCreateInfoEXT :: capabilityConfigs に XrSpatialCapabilityConfigurationMeshTrackingEXT 構造体へのポインタを含めることで、XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT 空間機能を有効にできます。
capability が XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT でない場合、ランタイムは XR_ERROR_VALIDATION_FAILURE を返さなければなりません。
有効な使用方法(暗黙的)
- XrSpatialCapabilityConfigurationMeshTrackingEXT を使用する前に、
XR_EXT_spatial_mesh_tracking拡張機能を有効にする必要があります。 -
typeはXR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_MESH_TRACKING_EXTにする必要があります。 -
nextは、NULLまたは構造体チェーン内の次の構造体への有効なポインタである必要があります。関連情報: XrSpatialFeatureTrackWatertightMeshEXT -
capabilityは、有効な XrSpatialCapabilityEXT 値でなければなりません -
enabledComponentsは、enabledComponentCount個の有効な XrSpatialComponentTypeEXT 値の配列へのポインタでなければなりません。 -
enabledComponentCountパラメータは0より大きい値にする必要があります。
水密メッシュのトラッキング
XrSpatialFeatureTrackWatertightMeshEXT 構造体は次のように定義されます。
typedef struct XrSpatialFeatureTrackWatertightMeshEXT {
XrStructureType type;
const void* next;
XrBool32 enableWatertightMeshTracking;
} XrSpatialFeatureTrackWatertightMeshEXT;
メンバーの説明
typeは、この構造の XrStructureType です。nextは、NULLまたは構造体チェーン内の次の構造体へのポインタです。enableWatertightMeshTrackingは、ランタイムがスキャンされた環境のウォータータイト メッシュを計算する必要があるかどうかを示します。
水密メッシュ トラッキングをサポートするランタイムは、xrEnumerateSpatialCapabilityFeaturesEXT で XR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXT を列挙しなければなりません。XR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXT 機能を使用すると、アプリは必要に応じて水密メッシュ トラッキングを有効にし、水密メッシュ生成で発生する可能性のある追加のコンピューティングを明示的にオプトインできます。
特定の機能に対して xrEnumerateSpatialCapabilityFeaturesEXT によって XR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXT が列挙されている場合、アプリは XrSpatialFeatureTrackWatertightMeshEXT をその機能の対応する構成構造にチェーンして、追跡されたメッシュをウォータータイトにするかどうかを示すことができます。アプリケーションが enableWatertightMeshTracking を XR_TRUE に設定した場合、ランタイムは環境のウォータータイト メッシュを計算してアプリケーションに提供しなければなりません。アプリケーションが enableWatertightMeshTracking を XR_FALSE に設定した場合、ランタイムが水密メッシュ トラッキングのみをサポートしている場合(ランタイムが事前にスキャンされた環境から処理されたメッシュを提供している場合など)は、トラッキングされたメッシュが水密である可能性があります。
有効な使用方法(暗黙的)
- XrSpatialFeatureTrackWatertightMeshEXT を使用する前に、
XR_EXT_spatial_mesh_tracking拡張機能を有効にしなければなりません。 -
typeはXR_TYPE_SPATIAL_FEATURE_TRACK_WATERTIGHT_MESH_EXTにする必要があります。 -
nextは、NULLまたは構造体チェーン内の次の構造体への有効なポインタでなければなりません。
申請フロー
次の図は、環境の防水メッシュをトラッキングする場合に、アプリが空間コンテキストを構成する方法を示しています。
はい
はい
アプリには
防水メッシュが必要
アプリに必要なもの
はい
○
いいえ
いいえ
ランタイム
は「メッシュ トラッキング」
機能をサポート
ランタイム...
はい
○
いいえ
いいえ
ランタイム
は「トラック ウォータータイト メッシュ」
機能をサポート
ランタイム...
アプリが「メッシュ トラッキング機能」と「水密メッシュのトラッキング」機能を使用して空間コンテキストを作成する
アプリが空間を作成する...
アプリが現在のランタイムで機能サポートの欠如を処理する
アプリが次の不足に対応している...
アプリが、トラッキングされたメッシュを処理して、水密メッシュ自体を作成します。メッシュの穴を埋めるためにユーザーの支援が必要になる場合があります。
アプリがトランザクションを処理する... テキストが SVG ではないため、表示できません
図 29. 防水メッシュをリクエストするためのアプリフロー
保証対象の部品
XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT をサポートするランタイムは、この機能によって検出されたすべてのエンティティの保証されたコンポーネントとして、次の空間コンポーネントを提供しなければならず、xrEnumerateSpatialCapabilityComponentTypesEXT でそれらを列挙しなければなりません。
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXTXR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT
境界付き 3D コンポーネント
境界付き 3D コンポーネントは、それが配置されているエンティティの中心と範囲を提供します。このコンポーネントから提供されるデータにより、アプリケーションは視錐台の外にあるエンティティを簡単に除外できます。
詳しくは、境界付き 3D をご覧ください。
Mesh 3D コンポーネント
メッシュ 3D コンポーネントは、それが存在するエンティティの 3D メッシュを提供します。詳しくは、Mesh 3D をご覧ください。
体積セグメンテーション(チャンキング)
ランタイムは、アプリケーションが視錐台の外にあるメッシュ ブロックを簡単にカリングできるように、メッシュをボリューメトリック ブロック(チャンク)にセグメント化することがあります。このような場合、ランタイムは、そのような各ボリューム ブロックを個別のエンティティとして扱い、そのような各エンティティ(ボリューム ブロック)に保証コンポーネントのセットを配置しなければなりません。ランタイムがこのように水密メッシュを提供している場合、各ボリュメトリック ブロックは個別に水密ではありませんが、ブロックのグループが水密メッシュを形成します。このようなシナリオでは、ランタイムは各エンティティ(ボリューメトリック ブロック)に XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT コンポーネントを追加しなければなりません。また、ウォータータイト メッシュを形成するブロック全体で、親エンティティの値が同じでなければなりません。これにより、アプリケーションは、どのチャンクが組み合わさって防水メッシュを形成しているかを識別できます。
隣接するボリューメトリック ブロックのメッシュは頂点を共有しても構いませんが、1 つのボリューメトリック ブロックの三角形は、隣接するボリュームの三角形と重複してはなりません。
オプション コンポーネント
メッシュの法線
コンポーネント データ
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_NORMALS_EXT は、データに XrSpatialBufferEXT を使用します。XrSpatialBufferEXT :: bufferId は、このコンポーネントが配置されているエンティティのメッシュの頂点法線を含むバッファを表します。XrSpatialBufferEXT :: bufferType は XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT でなければなりません。XR_SPATIAL_COMPONENT_TYPE_MESH_3D_NORMALS_EXT を持つエンティティには、XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT も必要です。このコンポーネントによって提供される法線は、XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT コンポーネントの XrSpatialMeshDataEXT :: vertexBuffer で提供される頂点に対応しなければなりません。
データをクエリするコンポーネント リストの構造
XrSpatialComponentMesh3DNormalsListEXT 構造体は次のように定義されます。
typedef struct XrSpatialComponentMesh3DNormalsListEXT {
XrStructureType type;
void* next;
uint32_t meshNormalsCount;
XrSpatialBufferEXT* meshNormals;
} XrSpatialComponentMesh3DNormalsListEXT;
メンバーの説明
typeは、この構造の XrStructureType です。nextは、NULLまたは構造体チェーン内の次の構造体へのポインタです。このような構造体は、コア OpenXR またはこの拡張機能では定義されていません。meshNormalsCountは、meshNormals配列内の要素の数を表すuint32_tです。meshNormalsは XrVector3f の配列です。
XrSpatialComponentMesh3DNormalsListEXT が XrSpatialComponentDataQueryResultEXT :: next の次のチェーンにあり、XrSpatialComponentDataQueryConditionEXT :: componentTypeCount がゼロではなく、XR_SPATIAL_COMPONENT_TYPE_MESH_3D_NORMALS_EXT が XrSpatialComponentDataQueryConditionEXT :: componentTypes に含まれていない場合、ランタイムは xrQuerySpatialComponentDataEXT から XR_ERROR_VALIDATION_FAILURE を返さなければなりません。
meshNormalsCount が XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput より小さい場合、ランタイムは xrQuerySpatialComponentDataEXT から XR_ERROR_SIZE_INSUFFICIENT を返さなければなりません。
有効な使用方法(暗黙的)
-
XR_EXT_spatial_mesh_tracking拡張機能は、XrSpatialComponentMesh3DNormalsListEXT を使用する前に有効にする必要があります。 -
typeはXR_TYPE_SPATIAL_COMPONENT_MESH_3D_NORMALS_LIST_EXTにする必要があります。 -
nextは、NULLまたは構造体チェーン内の次の構造体への有効なポインタでなければなりません。 -
meshNormalsは、meshNormalsCountXrSpatialBufferEXT 構造の配列へのポインタでなければなりません。 -
meshNormalsCountパラメータは0より大きい値にする必要があります。
構成
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_NORMALS_EXT が XrSpatialCapabilityComponentTypesEXT :: componentTypes で列挙されている場合、アプリは XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents リストに列挙型を含めることで、その機能を有効にできます。このコンポーネントでは、XrSpatialCapabilityConfigurationBaseHeaderEXT の次のチェーンに含める特別な構成は必要ありません。ただし、アプリでは、このコンポーネントとそのデータを XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT コンポーネントと組み合わせて使用することをおすすめします。
メッシュ セマンティック ラベル
typedef enum XrSpatialMeshSemanticLabelEXT {
XR_SPATIAL_MESH_SEMANTIC_LABEL_UNCATEGORIZED_EXT = 1,
XR_SPATIAL_MESH_SEMANTIC_LABEL_FLOOR_EXT = 2,
XR_SPATIAL_MESH_SEMANTIC_LABEL_WALL_EXT = 3,
XR_SPATIAL_MESH_SEMANTIC_LABEL_CEILING_EXT = 4,
XR_SPATIAL_MESH_SEMANTIC_LABEL_TABLE_EXT = 5,
XR_SPATIAL_MESH_SEMANTIC_LABEL_CHAIR_EXT = 6,
XR_SPATIAL_MESH_SEMANTIC_LABEL_SOFA_EXT = 7,
XR_SPATIAL_MESH_SEMANTIC_LABEL_BED_EXT = 8,
XR_SPATIAL_MESH_SEMANTIC_LABEL_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialMeshSemanticLabelEXT;
XrSpatialMeshSemanticLabelEXT 列挙型は、メッシュのセマンティック ラベルのセットを記述します。これは、さまざまな空間コンポーネントで使用され、頂点ごとまたは三角形ごとのセマンティック ラベルの XrSpatialBufferEXT の uint8_t 値に意味を与えます。メッシュ頂点セマンティック ラベルとメッシュ三角形セマンティック ラベルをご覧ください。
このセマンティック ラベルセットを拡張するか、メッシュ用に独自の新しいセットを追加する拡張機能は、セマンティック ラベルの設計と拡張のガイドラインに記載されているガイドラインに従うべきです。
列挙型の説明
XR_SPATIAL_MESH_SEMANTIC_LABEL_UNCATEGORIZED_EXT
ランタイムが頂点または三角形を分類できませんでした。
XR_SPATIAL_MESH_SEMANTIC_LABEL_FLOOR_EXT
頂点または三角形が床にマッピングされている。
XR_SPATIAL_MESH_SEMANTIC_LABEL_WALL_EXT
頂点または三角形が壁にマッピングされている。
XR_SPATIAL_MESH_SEMANTIC_LABEL_CEILING_EXT
頂点または三角形が天井にマッピングされます。
XR_SPATIAL_MESH_SEMANTIC_LABEL_TABLE_EXT
頂点または三角形がテーブルにマッピングされます。
XR_SPATIAL_MESH_SEMANTIC_LABEL_CHAIR_EXT
頂点または三角形が椅子にマッピングされます。
XR_SPATIAL_MESH_SEMANTIC_LABEL_SOFA_EXT
頂点または三角形がソファにマッピングされます。
XR_SPATIAL_MESH_SEMANTIC_LABEL_BED_EXT
頂点または三角形がベッドにマッピングされます。
メッシュ頂点のセマンティック ラベル
コンポーネントの概要
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT は、空間エンティティのメッシュの各頂点に 1 つのセマンティック ラベルを提供します。
コンポーネント データ
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT は、データに XrSpatialBufferEXT を使用します。XrSpatialBufferEXT :: bufferId は、このコンポーネントが配置されているエンティティのメッシュの頂点セマンティック ラベルを含むバッファを表します。XrSpatialBufferEXT :: bufferType は XR_SPATIAL_BUFFER_TYPE_UINT8_EXT でなければなりません。バッファ内の値は、XrSpatialMeshSemanticLabelEXT 列挙型の値に対応しています。XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT を持つエンティティには、XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT コンポーネントも必要です。このコンポーネントによって提供されるセマンティック ラベルは、XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT コンポーネントの XrSpatialMeshDataEXT :: vertexBuffer で提供される頂点に対応している必要があります。これは、このコンポーネントによって提供される空間バッファデータの特定のインデックスにあるセマンティック ラベルが、XrSpatialMeshDataEXT :: vertexBuffer によって提供される同じインデックスの頂点に対応することを意味します。これは、xrGetSpatialBufferUint8EXT :: bufferCountOutput が、頂点セマンティック ラベル バッファと XrSpatialMeshDataEXT :: vertexBuffer で同じ値でなければならないことも意味します。
データをクエリするコンポーネント リストの構造
XrSpatialComponentMesh3DVertexSemanticLabelsListEXT 構造体は次のように定義されます。
typedef struct XrSpatialComponentMesh3DVertexSemanticLabelsListEXT {
XrStructureType type;
void* next;
uint32_t meshSemanticLabelsCount;
XrSpatialBufferEXT* meshSemanticLabels;
} XrSpatialComponentMesh3DVertexSemanticLabelsListEXT;
メンバーの説明
typeは、この構造の XrStructureType です。nextは、NULLまたは構造体チェーン内の次の構造体へのポインタです。このような構造体は、コア OpenXR またはこの拡張機能では定義されていません。meshSemanticLabelsCountは、meshSemanticLabels配列内の要素の数を表すuint32_tです。meshSemanticLabelsは XrSpatialBufferEXT の配列です。
XrSpatialComponentMesh3DVertexSemanticLabelsListEXT が XrSpatialComponentDataQueryResultEXT :: next の次のチェーンにあり、XrSpatialComponentDataQueryConditionEXT :: componentTypeCount がゼロではなく、XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT が XrSpatialComponentDataQueryConditionEXT :: componentTypes に含まれていない場合、ランタイムは xrQuerySpatialComponentDataEXT から XR_ERROR_VALIDATION_FAILURE を返さなければなりません。
meshSemanticLabelsCount が XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput より小さい場合、ランタイムは xrQuerySpatialComponentDataEXT から XR_ERROR_SIZE_INSUFFICIENT を返さなければなりません。
有効な使用方法(暗黙的)
-
XR_EXT_spatial_mesh_tracking拡張機能は、XrSpatialComponentMesh3DVertexSemanticLabelsListEXT を使用する前に有効にする必要があります。 -
typeはXR_TYPE_SPATIAL_COMPONENT_MESH_3D_VERTEX_SEMANTIC_LABELS_LIST_EXTにする必要があります。 -
nextは、NULLまたは構造体チェーン内の次の構造体への有効なポインタでなければなりません。 -
meshSemanticLabelsは、meshSemanticLabelsCountXrSpatialBufferEXT 構造の配列へのポインタでなければなりません。 -
meshSemanticLabelsCountパラメータは0より大きい値にする必要があります。
構成
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT が XrSpatialCapabilityComponentTypesEXT :: componentTypes で列挙されている場合、アプリは XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents リストに列挙型を含めることで、その機能を有効にできます。このコンポーネントでは、XrSpatialCapabilityConfigurationBaseHeaderEXT の次のチェーンに含める特別な構成は必要ありません。ただし、アプリでは、このコンポーネントとそのデータを XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT コンポーネントと組み合わせて使用することをおすすめします。このコンポーネントは、XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT と同時に有効にすることはできません。アプリが XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT と XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT の両方を XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents に追加する場合、ランタイムは XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT を返さなければなりません。また、アプリケーションが別々の XrSpatialContextEXT で両方のコンポーネントを有効にしようとした場合、ランタイムは XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT を返さなければなりません。
メッシュ三角形のセマンティック ラベル
コンポーネントの概要
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT は、空間エンティティのメッシュの三角形ごとに 1 つのセマンティック ラベルを提供します。
コンポーネント データ
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT は、データに XrSpatialBufferEXT を使用します。XrSpatialBufferEXT :: bufferId は、このコンポーネントが存在するエンティティのメッシュの三角形セマンティック ラベルを含むバッファを表します。XrSpatialBufferEXT :: bufferType は XR_SPATIAL_BUFFER_TYPE_UINT8_EXT でなければなりません。バッファ内の値は、XrSpatialMeshSemanticLabelEXT 列挙型の値に対応しています。XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT を持つエンティティには、XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT コンポーネントも必要です。このコンポーネントによって提供されるセマンティック ラベルは、XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT コンポーネントの XrSpatialMeshDataEXT で提供される三角形に対応している必要があります。三角形のセマンティック ラベルを含む空間バッファの要素数は、XrSpatialMeshDataEXT :: indexBuffer の要素数を 3 で割った値です。これは、このコンポーネントによって提供される空間バッファデータの特定のインデックスにあるセマンティック ラベルが、XrSpatialMeshDataEXT :: indexBuffer の [index * 3]、[index * 3 + 1]、[index * 3 + 2] で表される三角形に対応することを意味します。
データをクエリするコンポーネント リストの構造
XrSpatialComponentMesh3DTriangleSemanticLabelsListEXT 構造体は次のように定義されます。
typedef struct XrSpatialComponentMesh3DTriangleSemanticLabelsListEXT {
XrStructureType type;
void* next;
uint32_t meshSemanticLabelsCount;
XrSpatialBufferEXT* meshSemanticLabels;
} XrSpatialComponentMesh3DTriangleSemanticLabelsListEXT;
メンバーの説明
typeは、この構造の XrStructureType です。nextは、NULLまたは構造体チェーン内の次の構造体へのポインタです。このような構造体は、コア OpenXR またはこの拡張機能では定義されていません。meshSemanticLabelsCountは、meshSemanticLabels配列内の要素の数を表すuint32_tです。meshSemanticLabelsは XrSpatialBufferEXT の配列です。
XrSpatialComponentMesh3DTriangleSemanticLabelsListEXT が XrSpatialComponentDataQueryResultEXT :: next の次のチェーンにあり、XrSpatialComponentDataQueryConditionEXT :: componentTypeCount がゼロではなく、XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT が XrSpatialComponentDataQueryConditionEXT :: componentTypes に含まれていない場合、ランタイムは xrQuerySpatialComponentDataEXT から XR_ERROR_VALIDATION_FAILURE を返さなければなりません。
meshSemanticLabelsCount が XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput より小さい場合、ランタイムは xrQuerySpatialComponentDataEXT から XR_ERROR_SIZE_INSUFFICIENT を返さなければなりません。
有効な使用方法(暗黙的)
- XrSpatialComponentMesh3DTriangleSemanticLabelsListEXT を使用する前に、
XR_EXT_spatial_mesh_tracking拡張機能を有効にする必要があります。 -
typeはXR_TYPE_SPATIAL_COMPONENT_MESH_3D_TRIANGLE_SEMANTIC_LABELS_LIST_EXTにする必要があります。 -
nextは、NULLまたは構造体チェーン内の次の構造体への有効なポインタでなければなりません。 -
meshSemanticLabelsは、meshSemanticLabelsCountXrSpatialBufferEXT 構造の配列へのポインタでなければなりません。 -
meshSemanticLabelsCountパラメータは0より大きい値にする必要があります。
構成
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT が XrSpatialCapabilityComponentTypesEXT :: componentTypes で列挙されている場合、アプリは XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents リストに列挙型を含めることで、その機能を有効にできます。このコンポーネントでは、XrSpatialCapabilityConfigurationBaseHeaderEXT の次のチェーンに含める特別な構成は必要ありません。ただし、アプリでは、このコンポーネントとそのデータを XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT コンポーネントと組み合わせて使用することをおすすめします。このコンポーネントは、XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT と同時に有効にすることはできません。アプリが XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT と XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT の両方を XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents に追加する場合、ランタイムは XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT を返さなければなりません。また、アプリケーションが別々の XrSpatialContextEXT で両方のコンポーネントを有効にしようとした場合、ランタイムは XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT を返さなければなりません。
新しい構造
新しい列挙型
新しい列挙型定数
XR_EXT_SPATIAL_MESH_TRACKING_EXTENSION_NAMEXR_EXT_spatial_mesh_tracking_SPEC_VERSION-
XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT
XrSpatialCapabilityFeatureEXT の拡張:
XR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXT
XrSpatialComponentTypeEXT の拡張:
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_NORMALS_EXTXR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXTXR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT
XrStructureType の拡張:
XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_MESH_TRACKING_EXTXR_TYPE_SPATIAL_COMPONENT_MESH_3D_NORMALS_LIST_EXTXR_TYPE_SPATIAL_COMPONENT_MESH_3D_TRIANGLE_SEMANTIC_LABELS_LIST_EXTXR_TYPE_SPATIAL_COMPONENT_MESH_3D_VERTEX_SEMANTIC_LABELS_LIST_EXTXR_TYPE_SPATIAL_FEATURE_TRACK_WATERTIGHT_MESH_EXT
問題
変更履歴
リビジョン 1、2025-11-02(Nihav Jain、Google)
- 拡張機能の初期説明