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 vicinanza degli oggetti fisici al dispositivo.

Crea una sessione ARCore per Jetpack XR

Ottenere informazioni sulla profondità tramite una sessione 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 = Config.Builder(session.config)
    .setDepthEstimation(DepthEstimationMode.SMOOTH_ONLY)
    .build()
when (val result = session.configure(newConfig)) {
    is SessionConfigureSuccess -> TODO(/* Success! */)
    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 affidabilità non elaborati.
  • SMOOTH_ONLY: la stima della profondità è abilitata con valori di profondità e affidabilità uniformi.
  • SMOOTH_AND_RAW: la stima della profondità è abilitata con valori di profondità e affidabilità non elaborati e uniformi.

Le mappe di profondità non elaborate forniscono stime della profondità con una maggiore precisione, ma le immagini di profondità non elaborate potrebbero non includere stime della profondità per tutti i pixel dell'immagine della fotocamera. 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 dello smoothing e dell'interpolazione delle stime di profondità.

Verifica le funzionalità della mappa di profondità

Dispositivi diversi hanno funzionalità diverse. I dispositivi con una configurazione della fotocamera stereo possono fornire mappe di stima della profondità per le fotocamere sinistra e destra. Analogamente, i dispositivi con una sola fotocamera possono fornire solo mappe di stima della profondità per la fotocamera singola.

Per verificare quali mappe di profondità sono supportate dal dispositivo, utilizza XrDevice.isRenderingModeSupported:

val xrDevice = XrDevice.getCurrentDevice(context)
val hasMonoDepth = xrDevice.isRenderingModeSupported(RenderingMode.MONO)
val hasStereoDepth = xrDevice.isRenderingModeSupported(RenderingMode.STEREO)

Recupera i dati sulla profondità

Per ottenere i dati di profondità per una determinata fotocamera, utilizza Depth:

if (hasStereoDepth) {
    val depthMap = Depth.left(session)
}

Calcola i valori di profondità

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

if (hasStereoDepth) {
    val depthMap = Depth.left(session)
}

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 anche accedere ai valori di affidabilità utilizzando smoothConfidenceMap e rawConfidenceMap. Questi valori vanno da 0 a 255, dove 255 rappresenta la confidenza più elevata.

Per eseguire il rendering di una mappa di profondità per scopi di debug o visualizzazione, consulta la sezione relativa alla profondità dell'app di test ARCore.