Вход в unity ar - ar session
Сессия ar — это входная точка для всех функций ar. С помощью следующего содержимого вы узнаете основные концепции, компоненты и процесс выполнения ar session, а также как она связана с ar session в unity ar foundation. Вы также узнаете, как именно работает поток данных easyar sense в unity.
Что такое ar session
Все ar-процессы (например, отслеживание объектов) выполняются внутри нативных библиотек, то есть EasyAR Sense. Session является основной точкой входа для ar-функций в Unity. Она управляет процессом работы и состоянием ar-системы, включая чтение данных с физической камеры и датчиков, анализ реального мира, управление движением и отрисовкой виртуальной камеры в сцене, а также других объектов.
flowchart LR
A((Изображения<br>и другие данные))
B[Session]
C([Камера])
O([Источник])
T([Цель])
A --> B
B -. transform .-> C
B -. transform .-> O
B -. transform .-> T
[Опционально] Сессия EasyAR и сессия AR Foundation
Сессия EasyAR — это ключевой компонент для использования EasyAR в Unity, способный работать независимо от любых сторонних или системных функций AR. В то время как сессия AR Foundation является частью фреймворка Unity XR и может использовать только функциональность, предоставляемую плагинами Unity XR (такими как ARKit или ARCore).
flowchart TD
A1[EasyAR<br>AR Session]
A2[EasyAR Sense]
A1 --> A2
B1[AR Foundation<br>AR Session]
B2[ARKit Plugin]
B3[ARCore Plugin]
B1 --> B2
B1 --> B3
При использовании EasyAR обычно не требуется одновременная установка и использование AR Foundation. Например, функции отслеживания изображений, отслеживания движения и другие предоставляются исключительно EasyAR Sense.
В некоторых случаях может потребоваться совместное использование EasyAR Sense и AR Foundation для доступа к дополнительным функциям (например, детекции плоскостей на определенных устройствах) и интерфейсам, предоставляемым AR Foundation. В таких сценариях EasyAR Sense взаимодействует с движком Unity через интерфейсы AR Foundation.
Однако, поскольку EasyAR предоставляет больше функций и более совершенную адаптацию к устройствам, чем системные AR-решения, использование только AR Foundation обычно не позволяет достичь результатов, сопоставимых с EasyAR.
Состав сессии
Типичная сессия в основном состоит из следующих компонентов:
- Источник кадров (frame source): Компонент, предоставляющий изображения с физической камеры и данные датчиков. Иногда эти компоненты также предоставляют данные отслеживания движения. Например, CameraDeviceFrameSource и MotionTrackerFrameSource.
- Фильтр(ы) кадров (frame filter(s)): Компоненты, предоставляющие специфические функции AR, например, ImageTrackerFrameFilter.
- Камера (camera): Виртуальный объект камеры в сцене.
- Начало отсчета (origin): Объект, являющийся началом отсчета для отслеживания движения.
Примечание
В концепции AR Foundation отслеживание движения считается обязательной функцией, поэтому оно всегда предоставляет начало отсчета (origin).
В системе EasyAR отслеживание движения является опциональной функцией, поэтому начало отсчета (origin) также опционально.
[Опционально] Поток данных сессии
Поток данных — это одна из ключевых концепций EasyAR Sense. Это не влияет на разработку AR-приложений в Unity. Если вы хотите глубже понять принципы работы сессии, можете прочитать этот раздел.
В Unity одна сессия обычно представляет один поток данных EasyAR Sense.
flowchart LR
S[Frame Source]
R[Input Frame Recorder<br>Video Input Frame Recorder]
ift[iFrameThrottler]
iff[iFrameFork]
i2f[i2FAdapter]
fb[fbFrameFork]
i2o[i2OAdapter]
FOT[Object Tracker]
FIT[Image Tracker]
FMT[Mega Tracker]
FSSM[Sparse Spatial Map]
FST[Surface Tracker]
FDS[Dense Spatial Map]
FCR[Cloud Recognizer]
ofj[oFrameJoin]
off[oFrameFork]
ofb[oFrameBuffer]
O(( ))
ODS(( ))
OCR(( ))
S ==> R ==> ift ==> iff
iff --> i2f
i2f --> fb
fb -.-> FOT -.-> ofj
fb -.-> FIT -.-> ofj
iff ==> i2o ==> ofj ==> off ==> ofb ==> O
iff -.-> FMT -.-> ofj
iff -.-> FSSM -.-> ofj
iff -.-> FST -.-> ofj
iff -.-> FDS -.-> ODS
iff -.-> FCR -.-> OCR
off --> i2f
ofb --> ift
Этот поток данных создается в процессе запуска сессии. За исключением выделенных жирным путей передачи данных, подключение остальных компонентов зависит от активированных AR-компонентов во время запуска.
Таким образом, изменяя набор включенных компонентов в сессии, можно гибко менять структуру и функциональность потока данных, а также легко активировать несколько AR-функций одновременно. Этот метод подробно описан в следующих параграфах.
Процесс работы сессии
flowchart LR
i[Инициализация<br>Initialize]
a[Сборка<br>Assemble]
starta["Запуск (собранной)<br>StartSession(Assembled)"]
start[Запуск<br>StartSession]
update((Обновление<br>update))
stop[Остановка<br>StopSession]
di[Деинициализация<br>Deinitialize]
i --> a --> starta --> update --> stop --> di
i --> start --> update
Инициализация
Инициализация — это процесс запуска EasyAR Sense с использованием лицензионного ключа. До инициализации доступен лишь ограниченный набор интерфейсов EasyAR Sense. AR-функции активируются только после инициализации.Сборка (Assembling)
Процесс сборки выбирает подходящие компоненты из сцены на основе конфигурации опций сборки и объединяет их в единый рабочий модуль. Обычно этот процесс выполняется автоматически при запуске, но его также можно выполнить вручную до запуска, вызвав интерфейс сборки. После сборки можно ускорить запуск, пропустив этап сборки через запуск собранной сессии.
Сборка также играет важную роль в проверке доступности AR-компонентов и источников ввода, а также в выборе оптимального источника ввода из доступных кандидатов. Этот шаг также позволяет определить, может ли текущая сессия выполняться на устройстве.Процесс сборки состоит из двух этапов:
- Первый этап запускает обновление списка поддерживаемых устройств и после ожидания (согласно настройкам) начинает сборку. Если после ожидания на первом этапе обновление списка завершено, сборка завершается;
- Иначе сборка переходит во второй этап, который выполняется после завершения обновления списка устройств. На этом этапе, если доступный источник кадров (frame source) изменился с "недоступен" (на первом этапе) на "доступен", и сессия не запустилась после первого этапа, будет предпринята попытка перезапуска сессии.
Независимо от завершения обновления списка устройств на первом этапе, сессия продолжит выполнение следующих шагов после завершения первого этапа.
Запуск
Запуск — это процесс начала работы AR-функций. До запуска AR-компоненты не обрабатывают данные. После успешного запуска сессия начинает управлять перемещением некоторых объектов в сцене и, при использовании определенных источников ввода, контролировать рендеринг изображения с физической камеры.Обновление
Процесс обновления выполняется каждый кадр в цикле рендеринга Unity. На основе результатов работы текущих AR-функций, процесс обновления изменяет transform виртуальной камеры (для некоторых источников ввода), точки отсчета и отслеживаемых целей каждый кадр. Момент выполнения обновления может различаться на разных устройствах, но он всегда происходит перед рендерингом.Остановка
Остановка прекращает работу AR-функций. Объекты в сцене больше не управляются сессией, а данные от источников ввода не обрабатываются.Деинициализация
Деинициализация освобождает часть глобальных ресурсов (динамические библиотеки не выгружаются). После деинициализации AR-компоненты становятся недоступны.
Примечание
Все AR-функции можно использовать только после вызова ARSession.StartSession.
Сессия по умолчанию жизненный цикл
flowchart LR
uload("BeforeSceneLoad")
ustart("MonoBehaviour.Start")
udestroy("MonoBehaviour.OnDestroy")
oi{Initialize<br>OnStartup}
ostart{AutoStart}
i[Инициализация<br>Initialize]
start[Запуск<br>StartSession]
update((Обновление<br>update))
stop[Остановка<br>StopSession]
uload -.-> ustart -.-> udestroy
uload --> oi -. true .-> i
ustart --> ostart -. true .-> start
udestroy --> stop
i --> start --> update --> stop
Жизненный цикл сессии обычно определяется временем вызова интерфейсов. При использовании настроек по умолчанию сессия автоматически выполняется в следующие моменты времени:
Инициализация (EasyARSettings.InitializeOnStartup ==
true)
Автоматическая инициализация выполняется в момент BeforeSceneLoad в Unity.Запуск (ARSession.AutoStart ==
true)
Автоматический запуск выполняется в момент MonoBehaviour.Start() сессии.Остановка
Автоматическая остановка выполняется в момент MonoBehaviour.OnDestroy() сессии.
Состояние сессии
ARSession.State описывает состояние сессии. Сессия может находиться в следующих состояниях:
| Состояние | Описание |
|---|---|
| Отсутствует (None) | Начальное состояние, сессия не запущена и не собирается |
| Нарушена (Broken) | Сессия повреждена из-за сбоя сборки или других причин |
| В процессе сборки (Assembling) | В процессе сборки, обычно занимает несколько кадров |
| Собрана (Assembled) | Сборка успешно завершена, но сессия еще не запущена |
| Готова (Ready) | Сессия успешно запущена, это состояние длится только один кадр |
| Запущена (Running) | Сессия работает |
| Приостановлена (Paused) | Работа сессии приостановлена |
Обычно состояние сессии изменяется при вызове методов запуска и остановки. Во время работы, если возникает критическая ошибка, сессия также может перейти в состояние Broken. Сессия в состоянии Broken не может возобновить работу; необходимо вызвать метод остановки и перезапустить её.
Состояние сессии позволяет понять, доступна ли она для использования в данный момент. Подавляющее большинство функций доступно только в состояниях Ready или Running.
Состояние отслеживания движения
ARSession.TrackingStatus описывает состояние отслеживания движения сессии, обозначая качество отслеживания движения устройства. Существуют следующие состояния:
| Состояние | Описание |
|---|---|
Optional<MotionTrackingStatus>.Empty |
Функция отслеживания движения не включена или сессия не запущена |
NotTracking |
Результаты отслеживания движения недоступны. Причины: инициализация, потеря отслеживания или релокализация |
Limited |
Отслеживание движения работает, но качество снижено. Причины: слабая текстура в области или слишком быстрое движение |
Tracking |
Качество отслеживания движения хорошее |
Примечание
В концепции AR Foundation отслеживание движения является обязательной функцией, поэтому его состояние объединено с состоянием сессии.
В системе EasyAR отслеживание движения — опциональная функция, поэтому его состояние существует независимо и может быть пустым.
Где отслеживается состояние других функций ar
Поскольку функции ar могут одновременно отслеживать несколько объектов, состояние отслеживания изображения и состояние отслеживания других функций ar находятся не в сеансе (session), а в компоненте цели отслеживания (tracking target).
Можно использовать TargetController.IsTracked, чтобы узнать, находится ли цель отслеживания в состоянии отслеживания. Или использовать события TargetController.TargetFound и TargetController.TargetLost, чтобы корректировать логику содержимого приложения при изменении состояния отслеживания.
Следующие шаги
- Использование session в приложении
- Быстрый эксперимент
- Дополнительные базовые компоненты
- Подробнее о принципах работы сессии
- Unity XR и AR Foundation
- Принципы работы sense
Создание
- Попробуйте Создание session
Управление выполнением
- Узнайте о методах и назначении Инициализации
- Узнайте, как Определить доступность и поддержку устройств
- Узнайте о методах Управления выполнением session
Доступ к компонентам и результатам
- Попробуйте Доступ к компонентам AR-функций
- Узнайте, как Получить результаты выполнения session
Справочник компонентов
- Справочник компонента ARSession