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. Кроме того, включите режим «Геопространственный» и «Геометрию уличного пейзажа», чтобы использовать геопространственную глубину.
int32_t is_depth_supported = 0; int32_t is_geospatial_supported = 0; // Check whether the user's device supports the Depth API. ArSession_isDepthModeSupported(ar_session, AR_DEPTH_MODE_AUTOMATIC, &is_depth_supported); ArSession_isGeospatialModeSupported(ar_session, AR_GEOSPATIAL_MODE_ENABLED, &is_geospatial_supported); ArConfig* ar_config = NULL; ArConfig_create(ar_session, &ar_config); if (is_depth_supported && is_geospatial_supported) { // These three settings are needed to use Geospatial Depth. ArConfig_setDepthMode(ar_session, ar_config, AR_DEPTH_MODE_AUTOMATIC); ArConfig_setGeospatialMode(ar_session, ar_config, AR_GEOSPATIAL_MODE_ENABLED); ArConfig_setStreetscapeGeometryMode(ar_session, ar_config, AR_STREETSCAPE_GEOMETRY_MODE_ENABLED); } CHECK(ArSession_configure(ar_session, ar_config) == AR_SUCCESS); ArConfig_destroy(ar_config);
После включения Geospatial Depth доступ к изображениям глубины можно получить через существующие вызовы API, как описано в руководстве разработчика глубины .
// Retrieve the depth image for the current frame, if available. ArImage* depth_image = NULL; // If a depth image is available, use it here. if (ArFrame_acquireDepthImage16Bits(ar_session, ar_frame, &depth_image) != AR_SUCCESS) { // No depth image received for this frame. // This normally 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. return; }
Что дальше
- Узнайте, как использовать Streetscape Geometry в дополненной реальности.