Камеры и источники данных input frame в Unity -- frame source (Frame Source)
Frame source является поставщиком данных камеры и input frame в Unity. В этой статье представлены базовые понятия, типы и способы выбора frame source во время выполнения.
Перед началом
- Изучите базовые понятия, состав и workflow AR Session.
- Изучите базовые понятия, такие как камеры, input frame.
Что такое frame source
Frame source (FrameSource) является поставщиком input frame (InputFrame) и абстрагирует камеры, а также другие устройства и функции, предоставляющие данные input frame.
Диаграмма ниже показывает положение frame source в session:
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
Frame source может только предоставлять данные для downstream AR-функций, а может и сам реализовывать некоторые AR-функции, например motion tracking. Некоторые frame source предоставляют control interfaces для камер, позволяя пользователю выбирать параметры камеры, такие как resolution, focus mode и т. д.
Типы frame source
По Unity-пакету, предоставляющему frame source, frame source можно разделить на две категории:
- Built-in frame source: frame source, предоставляемые пакетом EasyAR Sense Unity Plugin; обычно поддерживают большинство распространённых сценариев использования и некоторые headset.
- External frame source: frame source, предоставляемые extension package EasyAR Sense Unity Plugin; обычно используются для поддержки конкретных headset devices. Часто external frame source предоставляются производителями headset или сторонними разработчиками.
В отличие от external frame source, custom camera не обязательно предоставляется извне; часть built-in frame source также является custom camera.
Frame source может предоставлять motion data с разными degrees of freedom: 0DoF, 3DoF, 5DoF и 6DoF. Один и тот же frame source в разных рабочих состояниях может предоставлять motion data с разными degrees of freedom.
В таблице ниже перечислены frame source, предоставляемые EasyAR:
| Название | Built-in | Custom camera | Motion data | Описание |
|---|---|---|---|---|
| CameraDeviceFrameSource | Да | Нет | Нет (0DoF) | Обычная камера, поддерживает переднюю/заднюю камеры и PC |
| EditorCameraDeviceFrameSource | Да | Нет | Нет (0DoF) | Обычная камера, поддерживает отладку только в editor |
| FramePlayer | Да | Нет | Определяется playback-файлом | Воспроизводит EIF-файлы для simulation runtime |
| ThreeDofCameraDeviceFrameSource | Да | Нет | 3DoF | Предоставляет возможность tracking 3DoF |
| InertialCameraDeviceFrameSource | Да | Нет | 5DoF | Предоставляет возможность inertial navigation |
| MotionTrackerFrameSource | Да | Нет | 6DoF | Предоставляет motion tracking, реализованный EasyAR |
| ARCoreFrameSource | Да | Нет | 6DoF | Предоставляет motion tracking от ARCore |
| ARKitFrameSource | Да | Нет | 6DoF | Предоставляет motion tracking от ARKit |
| AREngineFrameSource | Да | Да | 6DoF | Предоставляет motion tracking от AR Engine |
| VisionOSARKitFrameSource | Да | Да | 6DoF | Предоставляет motion tracking от VisionOS ARKit 1 |
| XREALFrameSource | Да | Да | 6DoF | Предоставляет motion tracking для XREAL devices 1 |
| ARCoreARFoundationFrameSource | Да | Да | 6DoF | Предоставляет motion tracking ARFoundation, соответствующий ARCore |
| ARKitARFoundationFrameSource | Да | Да | 6DoF | Предоставляет motion tracking ARFoundation, соответствующий ARKit |
| PicoFrameSource | Нет | Да | 6DoF | Предоставляет motion tracking для Pico devices 1 |
| RokidFrameSource | Нет | Да | 6DoF | Предоставляет motion tracking для Rokid devices 1 |
| MetaXRFrameSource | Нет | Да | 6DoF | Предоставляет motion tracking для устройств Meta XR 1 |
Выбор frame source во время выполнения
Scene hierarchy session содержит один или несколько компонентов frame source. Во время работы session используются не все компоненты frame source.
Следующий screenshot показывает scene hierarchy только с одним компонентом frame source:
![]()
Следующий screenshot показывает scene hierarchy с несколькими компонентами frame source:

Каждый источник кадров имеет разные функции, что также определяет подходящие сценарии использования и устройства. При сборке session из этих компонентов выбирается один и только один источник кадров для session.
Свойство AssembleOptions.FrameSourceSelection определяет способ выбора источника кадров при работе session:
| Имя | Метод |
|---|---|
| Auto (по умолчанию) | Автоматически выбрать первый доступный и active дочерний узел в порядке transform. |
| Manual | Указать вручную. Можно указать только дочерний узел session. |
| FramePlayer | Использовать FramePlayer. |
Совет
Порядок transform объектов Unity можно проверить с помощью Transform.GetSiblingIndex(), а также по порядку объектов в представлении Hierarchy, но следующая опция должна быть отключена (по умолчанию она отключена): Edit > Preferences > General > Enable Alphanumeric Sorting.
Во время сборки session источник кадров выбирается после следующих шагов:
- Session обходит свои дочерние узлы и собирает все active компоненты источника кадров в порядке transform.
- Список кандидатов фильтруется в соответствии со стратегией выбора источника в AssembleOptions (AssembleOptions.FrameSource):
- 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.
Если в итоге не выбран ни один источник кадров, session переходит в состояние Broken, а значение поля BrokenReason в отчете session равно NoAvailabileFrameSource.
Примечание
После завершения обновления списка устройств, если список устройств изменился, доступность источников кадров также может измениться. См. поддержка устройств и отчет session, чтобы узнать о поведении session в этом случае.
Следующие шаги
- Попробуйте добавить группу frame source в scene
Связанные темы
- Поддержка устройств и session report
- Поддержка headset в EasyAR
- Создайте external frame source, чтобы использовать custom camera