Камеры и источники кадров в Unity — источник кадров (Frame Source)
Источник кадров предоставляет входные кадры для камер и других устройств в Unity. В этой статье рассматриваются основные концепции источников кадров, их типы и методы выбора во время выполнения.
Перед началом
- Узнайте основные концепции, компоненты и рабочий процесс сеанса AR.
- Поймите базовые концепции камер и входных кадров.
Что такое источник кадров
Источник кадров (FrameSource) — это поставщик входных кадров (InputFrame), абстрагирующий камеры и другие устройства/функции, предоставляющие данные кадров.
На диаграмме показано место источника кадров в сеансе:
flowchart LR
F[Frame Source]
A((Input Frame))
B[Session]
C([Camera])
O([Origin])
T([Target])
F --> A
A --> B
B -. transform .-> C
B -. transform .-> O
B -. transform .-> T
style F fill:#6e6ce6,stroke:#333,color:#fff
Источники кадров могут просто передавать данные для AR-функций или сами реализовывать их (например, отслеживание движения). Некоторые источники предоставляют интерфейсы управления камерой (разрешение, режим фокусировки и т.д.).
Типы источников кадров
По пакету Unity источники делятся на:
- Встроенные источники кадров: предоставляются пакетом EasyAR Sense Unity, поддерживают большинство сценариев и некоторые гарнитуры.
- Внешние источники кадров: предоставляются расширениями EasyAR, обычно для специфических гарнитур. Часто разрабатываются производителями устройств.
Пользовательские камеры не обязательно являются внешними — некоторые встроенные источники также относятся к этому типу.
Источники могут предоставлять данные движения разной степени свободы (DoF): 0DoF, 3DoF, 5DoF, 6DoF. Один источник может поддерживать несколько режимов.
Таблица источников от EasyAR:
| Название | Встроенный | Пользовательская камера | Данные движения | Описание |
|---|---|---|---|---|
| CameraDeviceFrameSource | Да | Нет | Нет (0DoF) | Стандартные камеры (передняя/задняя/ПК) |
| EditorCameraDeviceFrameSource | Да | Нет | Нет (0DoF) | Камеры только для отладки в редакторе |
| FramePlayer | Да | Нет | Зависит от файла | Воспроизведение EIF-файлов |
| ThreeDofCameraDeviceFrameSource | Да | Нет | 3DoF | Отслеживание с 3 степенями свободы |
| InertialCameraDeviceFrameSource | Да | Нет | 5DoF | Инерциальная навигация |
| MotionTrackerFrameSource | Да | Нет | 6DoF | Отслеживание движения EasyAR |
| ARCoreFrameSource | Да | Нет | 6DoF | Отслеживание ARCore |
| ARKitFrameSource | Да | Нет | 6DoF | Отслеживание ARKit |
| AREngineFrameSource | Да | Да | 6DoF | Отслеживание AR Engine |
| VisionOSARKitFrameSource | Да | Да | 6DoF | Отслеживание VisionOS ARKit 1 |
| XREALFrameSource | Да | Да | 6DoF | Отслеживание устройств XREAL 1 |
| ARCoreARFoundationFrameSource | Да | Да | 6DoF | Отслеживание ARFoundation + ARCore |
| ARKitARFoundationFrameSource | Да | Да | 6DoF | Отслеживание ARFoundation + ARKit |
| PicoFrameSource | Нет | Да | 6DoF | Отслеживание устройств Pico 1 |
| RokidFrameSource | Нет | Да | 6DoF | Отслеживание устройств Rokid 1 |
Выбор источника кадров во время выполнения
Иерархия сцены сеанса содержит один или несколько компонентов источников кадров. Во время выполнения используются не все компоненты.
Пример иерархии с одним источником кадров:
![]()
Пример иерархии с несколькими источниками кадров:

Каждый источник данных кадров имеет различные функции, что также определяет их подходящие сценарии использования и устройства. При сборке сессии будет выбран один и только один из этих компонентов в качестве источника данных кадров для сессии.
Свойство AssembleOptions.FrameSourceSelection определяет метод выбора источника данных кадров во время выполнения сессии:
| Имя | Метод |
|---|---|
| Auto (по умолчанию) | Автоматический выбор. Выбирается первый доступный и активный дочерний узел в порядке transform. |
| Manual | Ручное указание. Можно указать только дочерний узел сессии. |
| FramePlayer | Использование FramePlayer. |
Совет
Порядок transform объектов Unity можно проверить с помощью Transform.GetSiblingIndex() или определить по порядку объектов в иерархии Hierarchy, но необходимо отключить следующую опцию (по умолчанию отключена): Edit > Preferences > General > Enable Alphanumeric Sorting.
В процессе сборки сессии источник данных кадров выбирается после следующих шагов:
- Сессия обходит свои дочерние узлы, собирая в порядке transform все активные компоненты источников данных кадров.
- Фильтрация списка кандидатов в соответствии со стратегией выбора источника (AssembleOptions.FrameSource) в AssembleOptions:
- Auto (по умолчанию): Сохраняются все кандидаты.
- Manual: Сохраняется только указанный вручную источник данных кадров.
- FramePlayer: Заменяет список кандидатов на FramePlayer.
- Дополнительная фильтрация списка кандидатов, удаляются компоненты:
- Отключенные самим компонентом.
- Все компоненты пользовательской камеры, если отключена пользовательская камера (AssembleOptions.EnableCustomCamera имеет значение false).
- (Платформа Android) Если таймаут настройки AssembleOptions.DeviceList больше 0, и список кандидатов содержит MotionTrackerFrameSource, ARCoreFrameSource или AREngineFrameSource, будет предпринята попытка загрузить последние поддерживаемые списки устройств. После обновления доступность этих источников данных кадров может измениться. После завершения загрузки или таймаута процесс продолжается.
- Последовательная проверка доступности оставшихся кандидатов в списке (вызов FrameSource.CheckAvailability() и проверка FrameSource.IsAvailable).
- Выбирается первый источник данных кадров, результат проверки которого — доступен.
Условия отключения компонента определяются самим компонентом, распространенные случаи:
- Запуск в неподдерживаемой системе, например, AREngineFrameSource будет отключен вне Android.
- Не установлен необходимый сторонний SDK, например, XREALFrameSource будет отключен, если не установлен XREAL SDK.
- Не выполнены условия конфигурации, например, MotionTrackerFrameSource будет отключен, если MotionTrackerCameraDeviceQualityLevel устройства ниже MotionTrackerFrameSource.DeviceQualityLevel.
Если в итоге не выбран ни один источник данных кадров, сессия перейдет в состояние Broken, а в отчете сессии BrokenReason будет иметь значение NoAvailabileFrameSource.
Примечание
После обновления списка устройств, если список устройств изменился, доступность источников данных кадров также может измениться. Поведение сессии в этом случае описано в разделе Поддержка устройств и отчет сессии.
Следующие шаги
- Добавьте группу источников кадров в сцену
Связанные темы
- Поддержка устройств и отчеты сеансов
- Поддержка гарнитур в EasyAR
- Создание внешних источников кадров для пользовательских камер
-
Поддержка устройств: гарнитуры в EasyAR.↩↩↩↩