Recupera información de profundidad en tu app con ARCore para Jetpack XR

Dispositivos de realidad extendida correspondientes
Esta guía te ayuda a crear experiencias para estos tipos de dispositivos de realidad extendida.
Visores de realidad extendida
Lentes de realidad extendida con cable

Tu app puede recuperar información de profundidad a través de ARCore para Jetpack XR y determinar qué tan cerca están los objetos físicos del dispositivo.

Crea una sesión de ARCore para Jetpack XR

Obtener información de profundidad a través de un Session de ARCore para Jetpack XR Si mejoras la IU espacial con Jetpack Compose para XR, accede a una sesión desde Jetpack Compose para XR. Si trabajas con entidades espacializadas de la biblioteca de SceneCore de Jetpack, accede a una sesión desde el entorno de ejecución de XR de Jetpack.

Configura la sesión

La recuperación de mapas de profundidad no está habilitada de forma predeterminada en las sesiones de RE. Para habilitar la recuperación del mapa de profundidad, configura la sesión y establece 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. */)
}

Los siguientes valores de DepthEstimationMode están disponibles:

  • DISABLED: No se proporciona información sobre la profundidad de la escena.
  • RAW_ONLY: La estimación de profundidad está habilitada con valores de profundidad sin procesar y de confianza.
  • SMOOTH_ONLY: La estimación de profundidad está habilitada con valores de profundidad y confianza suaves.
  • SMOOTH_AND_RAW: La estimación de profundidad está habilitada con valores de confianza y profundidad sin procesar y suavizados.

Los mapas de profundidad sin procesar proporcionan estimaciones de profundidad con mayor precisión, pero es posible que las imágenes de profundidad sin procesar no incluyan estimaciones de profundidad para todos los píxeles de la imagen de la cámara. En cambio, los mapas de profundidad suavizados proporcionan una profundidad estimada para cada píxel, pero los datos de profundidad por píxel pueden ser menos precisos debido al suavizado y la interpolación de las estimaciones de profundidad.

Verifica las capacidades del mapa de profundidad

Los diferentes dispositivos tienen distintas capacidades. Los dispositivos con una configuración de cámara estéreo pueden proporcionar mapas de estimación de profundidad para las cámaras izquierda y derecha. Del mismo modo, los dispositivos con una sola cámara solo pueden proporcionar mapas de estimación de profundidad para la cámara mono.

Para verificar qué mapas de profundidad admite el dispositivo, usa XrDevice.isRenderingModeSupported:

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

Recupera datos de profundidad

Para obtener datos de profundidad de una cámara determinada, usa Depth:

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

Calcula los valores de profundidad

Puedes obtener valores de profundidad y confianza del mapa de profundidad resultante:

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

Según el parámetro de configuración que se use, accede al mapa de profundidad correspondiente con smoothDepthMap o rawDepthMap. Las mediciones que contienen estos mapas se expresan en metros. También puedes acceder a los valores de confianza con smoothConfidenceMap y rawConfidenceMap. Estos valores varían de 0 a 255, donde 255 representa la confianza más alta.

Para renderizar un mapa de profundidad con fines de depuración o visualización, consulta la parte de profundidad de la app de prueba de ARCore.