Recuperare informazioni sulla profondità nella tua app con ARCore per Jetpack XR

Dispositivi XR applicabili
Queste indicazioni ti aiutano a creare esperienze per questi tipi di dispositivi XR.
Visori XR
Occhiali XR con cavo

La tua app può recuperare informazioni sulla profondità tramite ARCore per Jetpack XR per determinare la distanza degli oggetti fisici dal dispositivo.

Crea una sessione ARCore per Jetpack XR

Ottieni informazioni sulla profondità tramite ARCore per Jetpack XR Session. Se stai migliorando la UI spaziale utilizzando Jetpack Compose per XR, accedi a una sessione da Jetpack Compose per XR. Se utilizzi entità spazializzate della libreria Jetpack SceneCore, accedi a una sessione da Jetpack XR Runtime.

Configura la sessione

Il recupero della mappa di profondità non è attivato per impostazione predefinita nelle sessioni XR. Per attivare il recupero della mappa di profondità, configura la sessione e imposta un DepthEstimationMode:

val newConfig = session.config.copy(
    depthEstimation = Config.DepthEstimationMode.SMOOTH_ONLY,
)
when (val result = session.configure(newConfig)) {
    is SessionConfigureSuccess -> TODO(/* Success! */)
    is SessionConfigureConfigurationNotSupported ->
        TODO(/* Some combinations of configurations are not valid. Handle this failure case. */)
    else ->
        TODO(/* The session could not be configured. See SessionConfigureResult for possible causes. */)
}

Sono disponibili i seguenti valori di DepthEstimationMode:

  • DISABLED: Non vengono fornite informazioni sulla profondità della scena.
  • RAW_ONLY: La stima della profondità è abilitata con valori di profondità e confidenza grezzi.
  • SMOOTH_ONLY: La stima della profondità è attivata con valori di profondità e confidenza uniformi.
  • SMOOTH_AND_RAW: la stima della profondità è abilitata con valori di profondità grezza e uniforme e di confidenza.

Le mappe di profondità grezze forniscono stime di profondità con maggiore precisione, ma le immagini di profondità grezze potrebbero non includere stime di profondità per tutti i pixel nell'immagine della videocamera. Al contrario, le mappe di profondità uniformi forniscono una profondità stimata per ogni pixel, ma i dati di profondità per pixel potrebbero essere meno accurati a causa dell'uniformazione e dell'interpolazione delle stime di profondità.

Recuperare i dati di profondità

Per ottenere i dati di profondità per una determinata videocamera, utilizza DepthMap:

val depthMap = DepthMap.left(session) ?: return

Dispositivi diversi hanno funzionalità diverse. I dispositivi con una configurazione di fotocamera stereo restituiscono mappe di profondità non nulle per le fotocamere left e right. Allo stesso modo, i dispositivi con una sola fotocamera restituiscono una mappa di profondità non nulla utilizzando mono.

Calcolare i valori di profondità

Puoi ottenere i valori di profondità e confidenza dalla mappa di profondità risultante:

val depthMap = DepthMap.left(session) ?: return

A seconda dell'impostazione di configurazione utilizzata, accedi alla mappa di profondità corrispondente utilizzando smoothDepthMap o rawDepthMap. Le misurazioni contenute in queste mappe sono espresse in metri. Puoi accedere ai valori di confidenza anche utilizzando smoothConfidenceMap e rawConfidenceMap. Questi valori vanno da 0 a 255, dove 255 rappresenta la massima affidabilità.

Per eseguire il rendering di una mappa di profondità a scopo di debug o visualizzazione, consulta la sezione Profondità dell'app di test ARCore.