Получайте информацию о глубине в своем приложении с помощью ARCore для Jetpack XR

Применимые устройства XR
Данное руководство поможет вам создавать приложения для устройств XR такого типа.
XR-гарнитуры
Проводные XR-очки

Ваше приложение может получать информацию о глубине через ARCore для Jetpack XR, чтобы определить, насколько близко физические объекты находятся к устройству.

Создайте сессию ARCore для Jetpack XR.

Получайте информацию о глубине через Session ARCore для Jetpack XR. Если вы улучшаете пространственный пользовательский интерфейс с помощью Jetpack Compose for XR, получите доступ к сессии из Jetpack Compose for XR . Если вы работаете с пространственно-ориентированными объектами из библиотеки Jetpack SceneCore, получите доступ к сессии из Jetpack XR Runtime .

Настройте сессию

В XR-сессиях по умолчанию отключена функция получения карты глубины. Чтобы включить получение карты глубины, настройте сессию и установите параметр 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. */)
}

Доступны следующие значения параметра DepthEstimationMode :

  • DISABLED : Информация о глубине сцены не предоставляется.
  • RAW_ONLY : Оценка глубины включена с использованием исходных значений глубины и достоверности.
  • SMOOTH_ONLY : Оценка глубины включена с использованием сглаженных значений глубины и достоверности.
  • SMOOTH_AND_RAW : Оценка глубины включена как для необработанных, так и для сглаженных значений глубины и достоверности.

Исходные карты глубины обеспечивают более точные оценки глубины, но исходные изображения глубины могут не содержать оценок глубины для всех пикселей изображения с камеры. В отличие от них, сглаженные карты глубины предоставляют оценку глубины для каждого пикселя, но данные о глубине для каждого пикселя могут быть менее точными из-за сглаживания и интерполяции оценок глубины.

Проверьте наличие возможности отображения карты глубины.

Разные устройства обладают разными возможностями. Устройства со стереокамерой могут предоставлять карты оценки глубины для левой и правой камер. Аналогично, устройства с одной камерой могут предоставлять карты оценки глубины только для монохромной камеры.

Чтобы проверить, какие карты глубины поддерживаются устройством, используйте XrDevice.isRenderingModeSupported :

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

Получение данных о глубине

Для получения данных о глубине для заданной камеры используйте DepthMap :

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

Рассчитайте значения глубины

Из полученной карты глубины можно получить значения глубины и достоверности:

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

В зависимости от используемых настроек конфигурации, доступ к соответствующей карте глубины осуществляется с помощью smoothDepthMap или rawDepthMap . Измерения, содержащиеся в этих картах, выражены в метрах. Вы также можете получить доступ к значениям достоверности с помощью smoothConfidenceMap и rawConfidenceMap . Эти значения находятся в диапазоне от 0 до 255, где 255 представляет наивысшую достоверность.

Для отображения карты глубины в целях отладки или визуализации см. раздел «Глубина» тестового приложения ARCore .