Spatial Entities Planes feature
Learn how to use planes with OpenXR Spatial Entities.
This page is a supplement to the AR Foundation Plane detection manual. The following sections only contain information about APIs where Spatial Entities exhibits unique platform-specific behavior.
Tip
When developing an AR app, refer to both the AR Foundation documentation as well as the required packages for each platform you support.
Enable Spatial Entities Planes
To configure planes in your Spatial Entities project:
- Open the OpenXR section of the XR Plug-in Management settings (menu: Edit > Project Settings > XR Plug-in Management > OpenXR tab).
- Under OpenXR Feature Groups, select Spatial Entities to open the list of Spatial Entities features.
- Enable Spatial Entities: Planes.

Spatial Entities: Planes feature in Project Settings.
Resolve subsystem conflicts
AR Foundation supports only one enabled plane provider at a time. If your project also uses other AR Foundation provider plug-ins such as Unity OpenXR: Meta or Unity OpenXR: Android XR, you must disable plane features among these packages to ensure that only one plane provider is enabled at a time.
Refer to the following table to understand the expected behavior of Spatial Entities Planes relative to other OpenXR-based AR Foundation providers:
| Runtime | Behavior of Spatial Entities Planes feature |
|---|---|
| Android XR | Parity with Android XR Planes feature |
| Meta Horizon OS | Parity with Meta Quest Planes feature's XR_FB_scene provider type |
The Spatial Entities Planes feature offers a reliable multi-vendor planes implementation, so Unity generally recommends Spatial Entities for best portability across multiple OpenXR runtimes. However, note that on Meta Horizon OS, the Spatial Entities Planes feature doesn't expose the higher-fidelity plane data offered by Meta's vendor-specific room meshes. If your app requires more nuanced plane data on Meta Quest devices, compare the Spatial Entities Planes implementation with OpenXR Meta's XR_META_spatial_entity_room_mesh provider type on your target devices to determine which implementation best meets your needs.
Permissions
Your app can't access any spatial data until the user grants the necessary permissions on their device. Refer to Permissions for more information.
Plane classifications
This package maps OpenXR's XrSpatialPlaneSemanticLabelEXT to AR Foundation's PlaneClassifications, as outlined in the following table:
| AR Foundation Label | OpenXR Label |
|---|---|
| Table | XR_SPATIAL_PLANE_SEMANTIC_LABEL_TABLE_EXT |
| Couch | |
| Floor | XR_SPATIAL_PLANE_SEMANTIC_LABEL_FLOOR_EXT |
| Ceiling | XR_SPATIAL_PLANE_SEMANTIC_LABEL_CEILING_EXT |
| WallFace | XR_SPATIAL_PLANE_SEMANTIC_LABEL_WALL_EXT |
| WallArt | |
| DoorFrame | |
| WindowFrame | |
| InvisibleWallFace | |
| InnerWallFace | |
| Other | XR_SPATIAL_PLANE_SEMANTIC_LABEL_UNCATEGORIZED_EXT |
Note
AR Foundation supports all semantic labels contained in the OpenXR Spatial Entities extensions. Empty cells indicate that the XR_EXT_spatial_plane_tracking extension can't provide the given semantic label.
OpenXR boundary data sources
The OpenXR provider generates vertex boundaries using one of the following component types:
XR_SPATIAL_COMPONENT_TYPE_POLYGON_2D_EXTXR_SPATIAL_COMPONENT_TYPE_MESH_2D_EXT
If a runtime supports both components, this package prioritizes the Polygon 2D component.
Note
To maintain compatibility with AR Foundation’s boundary requirements, any internal holes (cutouts) provided by the Mesh 2D component are ignored, creating a polygonal plane boundary that uses only the outer perimeter vertices.