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

Appareils XR concernés
Ces conseils vous aideront à 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 un Session ARCore pour Jetpack XR. Si vous améliorez l'UI spatiale à l'aide de Jetpack Compose pour XR, accédez à une session depuis Jetpack Compose pour XR. Si vous travaillez avec des entités spatialisées 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 sur les sessions XR. Pour activer la récupération de la carte de profondeur, configurez la session et définissez 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. */)
}

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 lissées.
  • SMOOTH_AND_RAW : l'estimation de la profondeur est activée avec les valeurs de profondeur et les niveaux de confiance bruts et lissés.

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 lissées 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 carte de profondeur

Les fonctionnalités varient selon les appareils. 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 des cartes d'estimation de la profondeur que pour cette caméra.

Pour vérifier quelles cartes de profondeur sont 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 Depth :

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

Calculer les valeurs de profondeur

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

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

Selon le 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 sont comprises entre 0 et 255, 255 représentant le niveau de confiance le plus élevé.

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