Отображение 3D-контента в пространстве
При использовании AR обычно нужно отображать виртуальные объекты. В простых тестовых sample можно использовать простые геометрические тела, но при разработке для потребителей обычно требуется отображать высокоточные 3D-модели и анимации, а при нажатии на узлы модели могут запускаться события и взаимодействия.
Модели
Популярные сейчас 3D-модели обычно состоят из triangle mesh. Чтобы модель выглядела реалистично, каждому треугольнику нужно назначить material. Material обычно реализует некоторую lighting model, а его содержимое состоит из texture и параметров lighting model.
- Texture определяет базовый цвет каждой точки треугольника. Texture всех треугольников размещаются в одной или нескольких diffuse texture. В некоторых расширенных случаях texture также может использоваться для представления направления нормали каждой точки или других параметров.
- Lighting model определяет, как объект взаимодействует со светом. Частый пример — PBR. Lighting model обычно реализуется через shader. Параметры PBR lighting model включают цвет, metallic, roughness и т. д.
В разработке приложений 3D-модели обычно не загружаются напрямую в OpenGL / Metal / Vulkan / Direct3D, а загружаются с помощью 3D engine. 3D engine требует определенные форматы 3D-моделей, например давно существующий и относительно читаемый формат obj / mtl, а также популярный сейчас формат glTF.
Анимация
Чтобы модель двигалась, нужна skeletal animation. Bones — это крупные узлы модели в 3D-модели, которые сохраняют согласованное движение при движении rigid-body.
Для отображения анимации во время выполнения нужно постоянно обновлять положение и pose (transformation matrix) узлов модели. Большинство 3D engine предоставляют функции анимации. Достаточно отредактировать анимацию в программе создания анимации и экспортировать ее в формате, поддерживаемом 3D engine, после чего ее можно использовать в 3D engine. Упомянутый выше формат glTF также содержит функции анимации.
Взаимодействие
Когда пользователь нажимает на узел модели, иногда нужно запускать события и взаимодействия. Обычно bones в skeletal animation именуются, а collision detection или ray detection используются для запуска события при клике и возврата имени нажатой bone. Обработка событий может выполняться скриптами или кодом приложения.
Примечание
Если у вас нет опыта использования 3D engine, настоятельно рекомендуется рассмотреть Unity для разработки приложения. EasyAR Sense Unity Plugin хорошо поддерживает Unity. При использовании других 3D engine вы можете столкнуться с меньшей поддержкой и меньшим количеством доступных ресурсов.