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

Содержимое результата поиска
Результат поиска по каждому запросу возвращается в виде списка, содержащего следующую информацию:
- Расстояние от источника луча, в метрах
- Положение (позиция и ориентация) результата попадания
- Трехмерная геометрия, с которой вы столкнулись, представлена в виде отслеживаемого объекта.
Затем, используя желаемый результат попадания, вы можете реалистично разместить свой 3D-контент с помощью привязки (Anchor) .
Типы результатов поиска
Существует четыре типа результатов попадания: глубина, плоскость, точка объекта и мгновенное размещение. Каждый из них имеет свои области применения и компромиссы, как показано в следующей таблице.
| Тип результата поиска | Описание | Ориентация | Вариант использования |
|---|---|---|---|
| Глубина | Использует информацию о глубине всей сцены для определения правильной глубины и ориентации точки. | Перпендикулярно трехмерной поверхности | Разместите виртуальный объект на произвольной поверхности (не только на полу и стенах). |
| Самолет | Проверяет горизонтальные и/или вертикальные поверхности, чтобы определить правильную глубину и ориентацию точки. | Перпендикулярно трехмерной поверхности | Разместите объект на плоскости (поле или стене), используя всю геометрию этой плоскости. Необходим правильный масштаб. В качестве запасного варианта используется проверка попадания по глубине. |
| Характеристика | Для определения правильного положения и ориентации точки касания пользователь использует визуальные особенности вокруг точки касания. | Перпендикулярно трехмерной поверхности | Разместите предмет на любой поверхности (не только на полу и стенах). |
| Мгновенное размещение (постоянная трассировка лучей) | Использует экранное пространство для размещения контента. Первоначально использует приблизительную глубину, предоставленную приложением. Работает мгновенно, но положение и фактическая глубина изменятся, как только ARCore сможет определить фактическую геометрию сцены. | +Y направлен вверх, противоположно силе тяжести. | Разместите объект на плоскости (поле или стене), используя всю геометрию этой плоскости, где быстрое размещение имеет решающее значение, и при этом система может допускать неизвестную начальную глубину и масштаб. |
Совместимость устройств
Проверка попаданий работает на всех устройствах, поддерживающих ARCore , но для проверки попаданий по глубине потребуются устройства, поддерживающие эту функцию .
Используйте результаты поиска для размещения контента дополненной реальности.
Получив результат попадания, вы можете использовать его позу в качестве входных данных для размещения контента дополненной реальности в вашей сцене.