Увеличьте свой диапазон с помощью Geospatial Depth

Герой геопространственной глубины

ARCore Depth API теперь поддерживает Geospatial Depth, что автоматически увеличивает диапазон и скорость API Depth, когда также включена Streetscape Geometry . Когда вы находитесь в локации с покрытием VPS и включенной геометрией Streetscape, выходные изображения из Depth API включают геометрию местности и зданий, полученную в области на расстоянии до 65 метров от текущего положения. Эти данные о глубине, полученные из геометрии, объединяются с локальными наблюдениями глубины и обновляются по мере перемещения пользователя в новое место.

Вызовы ARCore Depth API теперь предоставляют как локальные наблюдения с камеры, так и здания и местность из Streetscape Geometry, объединенные в одно изображение глубины.

Совместимость устройств

Geospatial Depth доступен на всех устройствах, поддерживающих Depth API . Для этой функции не требуется поддерживаемый аппаратный датчик глубины, например датчик времени пролета (ToF). Однако API глубины использует любые поддерживаемые аппаратные датчики, которые могут быть на устройстве.

Влияние на производительность

Geospatial Depth представляет собой небольшое единовременное вычисление в начале сеанса для интеграции геометрии Streetscape в представление глубины при первоначальной загрузке, но в остальном не увеличивает заметно стоимость вычислений глубины.

Диапазон глубины

Без геопространственной глубины типичные диапазоны изображений глубины составляют около 20–30 метров, а за пределами этого диапазона плотность и точность наблюдений глубины снижаются. При включенной функции «Геопространственная глубина» типично видеть, что значения глубины с плотной выборкой достигают максимума в 65,535 метра даже при небольшом начальном движении.

Случаи использования

API ARCore Depth можно использовать для всех существующих уже поддерживаемых вариантов использования. Благодаря Geospatial Depth изображения глубины, полученные в местах, поддерживаемых VPS, будут заполняться данными о глубине на больших расстояниях быстрее, чем раньше, что позволяет использовать варианты использования, ориентированные на глубину на больших расстояниях на открытом воздухе. Некоторые варианты использования включают в себя:

  • Затенение виртуального контента и других визуальных эффектов в масштабе здания.
  • Наружная навигация
  • Измерения расстояний

Ограничения

Геопространственная глубина поддерживается только в тех областях, которые поддерживают локализацию VPS и геометрию Streetscape. В других областях API ARCore Depth будет работать нормально без геопространственных значений.

Предварительные условия

Прежде чем продолжить, убедитесь, что вы понимаете фундаментальные концепции AR и то, как настроить сеанс ARCore .

Включить геопространственную глубину

В новом сеансе ARCore проверьте, поддерживает ли устройство пользователя Depth и Geospatial API. Не все ARCore-совместимые устройства поддерживают Depth API из-за ограничений вычислительной мощности.

Для экономии ресурсов глубина в ARCore по умолчанию отключена. Включите режим глубины, чтобы ваше приложение использовало Depth API. Кроме того, включите режим «Геопространственный» и «Геометрию уличного пейзажа», чтобы использовать геопространственную глубину.

Джава

Config config = session.getConfig();

// Check whether the user's device supports the Depth API.
boolean isDepthSupported = session.isDepthModeSupported(Config.DepthMode.AUTOMATIC);
boolean isGeospatialSupported =
    session.isGeospatialModeSupported(Config.GeospatialMode.ENABLED);
if (isDepthSupported && isGeospatialSupported) {
  // These three settings are needed to use Geospatial Depth.
  config.setDepthMode(Config.DepthMode.AUTOMATIC);
  config.setGeospatialMode(Config.GeospatialMode.ENABLED);
  config.setStreetscapeGeometryMode(Config.StreetscapeGeometryMode.ENABLED);
}
session.configure(config);

Котлин

val config = session.config

// Check whether the user's device supports the Depth API.
val isDepthSupported = session.isDepthModeSupported(Config.DepthMode.AUTOMATIC)
val isGeospatialSupported = session.isGeospatialModeSupported(Config.GeospatialMode.ENABLED)
if (isDepthSupported && isGeospatialSupported) {
  // These three settings are needed to use Geospatial Depth.
  config.depthMode = Config.DepthMode.AUTOMATIC
  config.geospatialMode = Config.GeospatialMode.ENABLED
  config.streetscapeGeometryMode = Config.StreetscapeGeometryMode.ENABLED
}
session.configure(config)

После включения Geospatial Depth доступ к изображениям глубины можно получить через существующие вызовы API, как описано в руководстве разработчика глубины .

Джава

// Retrieve the depth image for the current frame, if available.
Image depthImage = null;
try {
  depthImage = frame.acquireDepthImage16Bits();
  // Use the depth image here.
} catch (NotYetAvailableException e) {
  // This means that depth data is not available yet.
  // Depth data will not be available if there are no tracked
  // feature points. This can happen when there is no motion, or when the
  // camera loses its ability to track objects in the surrounding
  // environment.
} finally {
  if (depthImage != null) {
    depthImage.close();
  }
}

Котлин

// Retrieve the depth image for the current frame, if available.
try {
  frame.acquireDepthImage16Bits().use { depthImage ->
    // Use the depth image here.
  }
} catch (e: NotYetAvailableException) {
  // This means that depth data is not available yet.
  // Depth data will not be available if there are no tracked
  // feature points. This can happen when there is no motion, or when the
  // camera loses its ability to track objects in the surrounding
  // environment.
}

Что дальше