Récupérer des informations sur la profondeur dans votre application avec ARCore pour Jetpack XR

Appareils XR concernés
Ces conseils vous aident à créer des expériences pour ces types d'appareils XR.
Casques XR
Lunettes XR filaires

Votre application peut récupérer des informations de profondeur via ARCore pour Jetpack XR afin de déterminer la distance entre les objets physiques et l'appareil.

Créer une session ARCore pour Jetpack XR

Obtenez des informations de profondeur via une ARCore pour Jetpack XR Session. Si vous améliorez l'interface utilisateur spatiale à l'aide de Jetpack Compose for XR, accédez à une session à partir de Jetpack Compose for XR. Si vous utilisez des entités spatialisées à partir de la bibliothèque Jetpack SceneCore, accédez à une session à partir de Jetpack XR Runtime.

Configurer la session

La récupération de la carte de profondeur n'est pas activée par défaut dans les sessions XR. Pour l'activer, configurez la session et définissez un DepthEstimationMode :

val newConfig = session.config.copy(
    depthEstimation = DepthEstimationMode.SMOOTH_ONLY,
)
when (val result = session.configure(newConfig)) {
    is SessionConfigureSuccess -> TODO(/* Success! */)
    else ->
        TODO(/* The session could not be configured. See SessionConfigureResult for possible causes. */)
}

Les valeurs suivantes de DepthEstimationMode sont disponibles :

  • DISABLED : aucune information sur la profondeur de la scène n'est fournie.
  • RAW_ONLY: l'estimation de la profondeur est activée avec des valeurs de profondeur et de confiance brutes.
  • SMOOTH_ONLY: l'estimation de la profondeur est activée avec des valeurs de profondeur et de confiance lisses.
  • SMOOTH_AND_RAW: l'estimation de la profondeur est activée avec des valeurs de profondeur et de confiance brutes et lisses.

Les cartes de profondeur brutes fournissent des estimations de profondeur plus précises, mais les images de profondeur brutes peuvent ne pas inclure d'estimations de profondeur pour tous les pixels de l'image de la caméra. En revanche, les cartes de profondeur lisses fournissent une profondeur estimée pour chaque pixel, mais les données de profondeur par pixel peuvent être moins précises en raison du lissage et de l'interpolation des estimations de profondeur.

Vérifier les fonctionnalités de la carte de profondeur

Les fonctionnalités varient d'un appareil à l'autre. Les appareils dotés d'une configuration de caméra stéréo peuvent fournir des cartes d'estimation de la profondeur pour les caméras gauche et droite. De même, les appareils dotés d'une seule caméra ne peuvent fournir que des cartes d'estimation de la profondeur pour la caméra mono.

Pour vérifier les cartes de profondeur compatibles avec l'appareil, utilisez XrDevice.isRenderingModeSupported :

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

Récupérer les données de profondeur

Pour obtenir des données de profondeur pour une caméra donnée, utilisez DepthMap :

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

Calculer les valeurs de profondeur

Vous pouvez obtenir des valeurs de profondeur et de confiance à partir de la carte de profondeur obtenue :

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

En fonction du paramètre de configuration utilisé, accédez à la carte de profondeur correspondante à l'aide de smoothDepthMap ou rawDepthMap. Les mesures contenues dans ces cartes sont exprimées en mètres. Vous pouvez également accéder aux valeurs de confiance à l'aide de smoothConfidenceMap et rawConfidenceMap. Ces valeurs vont de 0 à 255, 255 représentant la confiance la plus élevée.

Pour afficher une carte de profondeur à des fins de débogage ou de visualisation, consultez la section Profondeur de l'application de test ARCore.