Core Concepts
Environment Understanding
How Prism AR reads the physical world to decide where ads can exist — and where they cannot.
What Is Environment Understanding?
Before a dimensional ad can be placed, the device needs to understand the geometry of the space around the user. On visionOS this is handled by ARKit; on Android XR it uses ARCore's Scene Semantics API. The Prism AR SDK listens to the platform's scene understanding feed and uses it to find valid surfaces, classify them by type, and determine whether a placement makes sense in the current context.
Identifies horizontal (floor, table) and vertical (wall, door) planes large enough to host a placement.
Labels planes by semantic type — floor, ceiling, table, seat, wall — so placements can be context-matched.
Placement rendering respects real-world depth, hiding behind objects that are physically in front of the ad.
Scene Analysis Pipeline
| Stage | What Happens |
|---|---|
| 1. Scan | Platform spatial APIs scan the scene for planes over a configurable threshold area (default 0.5 m²). |
| 2. Classify | Each detected plane is classified by semantic type using on-device ML. |
| 3. Score | Prism AR scores each candidate plane by size, stability, visibility angle, and current user gaze direction. |
| 4. Select | The highest-scoring plane above the confidence threshold is chosen as the ad anchor. |
| 5. Render | The creative is composited into the scene at the anchor position, respecting depth and occlusion. |
Privacy & User Consent
Scene understanding data — meshes, plane coordinates, semantic labels — is processed entirely on-device and is never transmitted to Prism AR servers. The only data that leaves the device is the surface type(e.g. “wall”) used for contextual targeting, not the geometry itself. Camera and world-tracking permissions must be granted by the user before any scene analysis begins.
Configuration
You can tune environment understanding behavior via PrismConfig:
PrismAR.initialize(
appId: "YOUR_APP_ID",
config: PrismConfig(
minPlaneArea: 0.5, // m² — ignore planes smaller than this
preferredSurface: .wall, // bias scoring toward walls
enableOcclusion: true // hide ad behind real objects
)
)