Skip to content

Class: SceneUnderstandingSystem

Defined in: packages/core/src/scene-understanding/scene-understanding-system.ts:73

Manages WebXR scene understanding features including plane detection, mesh detection, and anchoring.

Remarks

  • Automatically detects and visualizes real‑world planes and meshes in AR/VR environments.
  • Creates entities with XRPlane components for detected planes (floors, walls, ceilings).
  • Creates entities with XRMesh components for detected 3D geometry.
  • Supports anchoring objects to real‑world positions using XRAnchor components.
  • Requires WebXR session features: 'plane‑detection', 'mesh‑detection', 'anchor' when using the related features.
  • Automatically manages entity lifecycle as real‑world geometry changes.
  • Provides optional visual feedback with wireframe meshes for detected geometry.
  • Objects with XRAnchor are automatically attached to a stable world‑anchored group.

Examples

ts
// WebXR session must request required features
World.create(document.getElementById('scene-container'), {
  assets,
  xr: {
    sessionMode: SessionMode.ImmersiveAR,
    features: { planeDetection: true, meshDetection: true, anchors: true },
  }
})

// Add to your world to enable scene understanding
world.addSystem(SceneUnderstandingSystem)
ts
const cube = world.createTransformEntity(cubeObject)
cube.addComponent(XRAnchor) // Will be anchored to real-world position
ts
// Planes are automatically created as entities with XRPlane component
system.query({ required: [XRPlane] }).subscribe('qualify', (entity) => {
  const plane = entity.getValue(XRPlane, '_plane')
  console.log('New plane detected:', plane.orientation)
})

See

Extends

  • System<{ showWireFrame: { default: false; type: Boolean; }; }, { anchoredEntities: { required: Component<{ attached: { default: false; type: Boolean; }; }>[]; }; meshEntities: { required: Component<{ _mesh: { default: any; type: Object; }; dimensions: { default: [number, number, number]; type: Vec3; }; isBounded3D: { default: false; type: Boolean; }; max: { default: [number, number, number]; type: Vec3; }; min: { default: [number, number, number]; type: Vec3; }; semanticLabel: { default: string; type: String; }; }>[]; }; planeEntities: { required: Component<{ _plane: { default: any; type: Object; }; }>[]; }; }, this>

Constructors

Constructor

new SceneUnderstandingSystem(_w, _qm, _p): SceneUnderstandingSystem

Defined in: node_modules/.pnpm/elics@3.3.0/node_modules/elics/lib/system.d.ts:73

Parameters

_w

World

_qm

QueryManager

_p

number

Returns

SceneUnderstandingSystem

Inherited from

createSystem( { planeEntities: { required: [XRPlane] }, meshEntities: { required: [XRMesh] }, anchoredEntities: { required: [XRAnchor] }, }, { showWireFrame: { type: Types.Boolean, default: false }, }, ).constructor

Properties

camera

readonly camera: PerspectiveCamera

Defined in: packages/core/src/ecs/system.ts:60

Inherited from

System.camera


cleanupFuncs

readonly cleanupFuncs: () => void[]

Defined in: packages/core/src/ecs/system.ts:63

Returns

void

Inherited from

System.cleanupFuncs


config

config: SystemConfigSignals<S>

Defined in: packages/core/src/ecs/system.ts:48

Inherited from

System.config


createEntity()

createEntity: () => Entity

Defined in: packages/core/src/ecs/system.ts:69

Returns

Entity

Inherited from

System.createEntity


globals

globals: Record<string, any>

Defined in: packages/core/src/ecs/system.ts:53

Inherited from

System.globals


input

readonly input: XRInputManager

Defined in: packages/core/src/ecs/system.ts:58

Inherited from

System.input


isPaused

isPaused: boolean

Defined in: packages/core/src/ecs/system.ts:47

Inherited from

System.isPaused


player

readonly player: XROrigin

Defined in: packages/core/src/ecs/system.ts:57

Inherited from

System.player


priority

priority: number

Defined in: packages/core/src/ecs/system.ts:52

Inherited from

System.priority


queries

queries: Record<keyof Q, Query>

Defined in: packages/core/src/ecs/system.ts:49

Inherited from

System.queries


queryManager

queryManager: QueryManager

Defined in: packages/core/src/ecs/system.ts:51

Inherited from

System.queryManager


renderer

readonly renderer: WebGLRenderer

Defined in: packages/core/src/ecs/system.ts:61

Inherited from

System.renderer


scene

readonly scene: Scene

Defined in: packages/core/src/ecs/system.ts:59

Inherited from

System.scene


visibilityState

readonly visibilityState: Signal<VisibilityState>

Defined in: packages/core/src/ecs/system.ts:62

Inherited from

System.visibilityState


world

world: World

Defined in: packages/core/src/ecs/system.ts:50

Inherited from

System.world


xrFrame

xrFrame: XRFrame

Defined in: packages/core/src/ecs/system.ts:55

Inherited from

System.xrFrame


xrManager

xrManager: WebXRManager

Defined in: packages/core/src/ecs/system.ts:54

Inherited from

System.xrManager

Methods

init()

init(): void

Defined in: packages/core/src/scene-understanding/scene-understanding-system.ts:94

Returns

void

Overrides

System.init


play()

play(): void

Defined in: packages/core/src/ecs/system.ts:67

Returns

void

Inherited from

System.play


stop()

stop(): void

Defined in: packages/core/src/ecs/system.ts:68

Returns

void

Inherited from

System.stop


update()

update(_delta, _time): void

Defined in: packages/core/src/scene-understanding/scene-understanding-system.ts:128

Parameters

_delta

number

_time

number

Returns

void

Overrides

System.update