Руководства для конкретных платформ
Android (Kotlin/Java)
Android NDK (C)
Unity (AR Foundation)
Unreal Engine
Как разработчик AR-приложений, вы хотите, чтобы виртуальный мир плавно переходил в реальный для ваших пользователей. Когда пользователь помещает виртуальный объект в свою сцену, он хочет, чтобы тот выглядел так, будто он находится в реальном мире. Если вы создаете приложение для покупки мебели, вы хотите, чтобы пользователи были уверены, что кресло, которое они собираются купить, впишется в их пространство.
API глубины помогает камере устройства понимать размер и форму реальных объектов в сцене. Он создает изображения глубины, или карты глубины, тем самым добавляя реалистичности вашим приложениям. Вы можете использовать информацию, предоставляемую изображением глубины, для создания захватывающего и реалистичного пользовательского опыта.
Примеры использования API глубины при разработке
API Depth позволяет создавать эффекты перекрытия объектов, улучшать эффект погружения и внедрять новые интерактивные возможности, повышающие реализм дополненной реальности. Ниже приведены некоторые способы его использования в ваших собственных проектах. Примеры работы с Depth можно найти в демонстрационных сценах в лаборатории ARCore Depth Lab , где показаны различные способы доступа к данным о глубине. Это приложение Unity находится в открытом доступе на Github .
Включить окклюзию
Окклюзия, или точное отображение виртуального объекта за реальными объектами, имеет первостепенное значение для создания захватывающего опыта дополненной реальности. Рассмотрим виртуального Энди, которого пользователь может захотеть разместить в сцене, где рядом с дверью стоит сундук. При отображении без окклюзии Энди будет нереалистично перекрывать край сундука. Если использовать глубину сцены и понимать, на каком расстоянии находится виртуальный Энди относительно таких объектов, как деревянный сундук, можно точно отобразить Энди с окклюзией, что сделает его гораздо более реалистичным в окружающей обстановке.

Преобразовать сцену
Погрузите пользователя в новый, захватывающий мир, отображая виртуальные снежинки, оседающие на подлокотниках и подушках диванов, или создавая в гостиной атмосферу тумана. Вы можете использовать глубину резкости для создания сцены, где виртуальные источники света взаимодействуют, скрываются за реальными объектами и заново освещают их.
Расстояние и глубина резкости
Нужно показать, что что-то находится далеко? Вы можете использовать измерение расстояния и добавить эффекты глубины резкости, например, размытие фона или переднего плана сцены, с помощью API глубины.
Обеспечьте взаимодействие пользователя с объектами дополненной реальности.
Позвольте пользователям «прикоснуться» к миру через ваше приложение, обеспечив взаимодействие виртуального контента с реальным миром посредством столкновений и физики. Виртуальные объекты могут преодолевать реальные препятствия, а виртуальные шарики с краской могут попадать в реальное дерево и разлетаться на нём. Сочетание столкновений на основе глубины с игровой физикой позволит оживить игровой процесс.
Улучшить проверку попаданий
Глубина может использоваться для улучшения результатов проверки попадания. Проверка попадания по плоскостям работает только на плоских поверхностях с текстурой, тогда как проверка попадания по глубине более детализирована и работает даже на неплоских и слаботекстурированных участках. Это связано с тем, что проверка попадания по глубине использует информацию о глубине сцены для определения правильной глубины и ориентации точки.
В следующем примере зеленые «Энди» обозначают стандартные проверки попадания в плоскости, а красные «Энди» — проверки попадания в глубине.
Совместимость устройств
API глубины поддерживается только на устройствах с достаточной вычислительной мощностью для поддержки глубины, и его необходимо включить вручную в ARCore, как описано в разделе «Включение глубины» .
Некоторые устройства также могут быть оснащены аппаратным датчиком глубины, например, датчиком времени пролета (ToF). Актуальный список устройств, поддерживающих API глубины, а также список устройств, имеющих поддерживаемый аппаратный датчик глубины, например, датчик ToF, можно найти на странице поддерживаемых устройств ARCore .
Изображения глубины
API Depth использует алгоритм определения глубины по движению для создания изображений глубины, которые обеспечивают трехмерное представление мира. Каждый пиксель в изображении глубины связан с измерением расстояния от сцены до камеры. Этот алгоритм берет несколько изображений с устройства, снятых под разными углами, и сравнивает их, чтобы оценить расстояние до каждого пикселя по мере перемещения телефона пользователем. Он выборочно использует машинное обучение для повышения точности обработки глубины, даже при минимальном движении пользователя. Он также использует любое дополнительное оборудование, которым может обладать устройство пользователя. Если устройство имеет выделенный датчик глубины, например, ToF, алгоритм автоматически объединяет данные из всех доступных источников. Это улучшает существующее изображение глубины и обеспечивает глубину даже тогда, когда камера не движется. Это также обеспечивает лучшую глубину на поверхностях с небольшим количеством или полным отсутствием деталей, таких как белые стены, или в динамических сценах с движущимися людьми или объектами.
На следующих изображениях показано фотоснимок коридора с велосипедом на стене, а также визуализация глубинного изображения, созданного на основе этих изображений. Области, выделенные красным цветом, находятся ближе к камере, а области, выделенные синим цветом, — дальше.

Глубина, полученная из движения
Данные о глубине становятся доступны, когда пользователь перемещает свое устройство. Алгоритм может получать надежные и точные оценки глубины на расстоянии от 0 до 65 метров. Наиболее точные результаты достигаются, когда устройство находится на расстоянии от полуметра до примерно пяти метров от реальной обстановки. В тех случаях, когда пользователю приходится чаще перемещать устройство, результаты будут становиться все лучше и лучше.
Получение изображений глубины
С помощью API глубины можно получать изображения глубины, соответствующие каждому кадру с камеры. Полученное изображение глубины имеет ту же метку времени и поле зрения, что и камера. Достоверные данные о глубине доступны только после того, как пользователь начал перемещать свое устройство, поскольку глубина определяется по движению. Поверхности с небольшим количеством или полным отсутствием деталей, такие как белые стены, будут иметь неточные данные о глубине.
Что дальше?
- Ознакомьтесь с лабораторией ARCore Depth Lab , которая демонстрирует различные способы доступа к данным о глубине.