Table of Contents

Камеры и источники кадров в Unity — источник кадров (Frame Source)

Источник кадров предоставляет входные кадры для камер и других устройств в Unity. В этой статье рассматриваются основные концепции источников кадров, их типы и методы выбора во время выполнения.

Перед началом

Что такое источник кадров

Источник кадров (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

Выбор источника кадров во время выполнения

Иерархия сцены сеанса содержит один или несколько компонентов источников кадров. Во время выполнения используются не все компоненты.

Пример иерархии с одним источником кадров:

alt text

Пример иерархии с несколькими источниками кадров:

alt text

Каждый источник данных кадров имеет различные функции, что также определяет их подходящие сценарии использования и устройства. При сборке сессии будет выбран один и только один из этих компонентов в качестве источника данных кадров для сессии.

Свойство AssembleOptions.FrameSourceSelection определяет метод выбора источника данных кадров во время выполнения сессии:

Имя Метод
Auto (по умолчанию) Автоматический выбор. Выбирается первый доступный и активный дочерний узел в порядке transform.
Manual Ручное указание. Можно указать только дочерний узел сессии.
FramePlayer Использование FramePlayer.
Совет

Порядок transform объектов Unity можно проверить с помощью Transform.GetSiblingIndex() или определить по порядку объектов в иерархии Hierarchy, но необходимо отключить следующую опцию (по умолчанию отключена): Edit > Preferences > General > Enable Alphanumeric Sorting.

В процессе сборки сессии источник данных кадров выбирается после следующих шагов:

  1. Сессия обходит свои дочерние узлы, собирая в порядке transform все активные компоненты источников данных кадров.
  2. Фильтрация списка кандидатов в соответствии со стратегией выбора источника (AssembleOptions.FrameSource) в AssembleOptions:
    • Auto (по умолчанию): Сохраняются все кандидаты.
    • Manual: Сохраняется только указанный вручную источник данных кадров.
    • FramePlayer: Заменяет список кандидатов на FramePlayer.
  3. Дополнительная фильтрация списка кандидатов, удаляются компоненты:
    • Отключенные самим компонентом.
    • Все компоненты пользовательской камеры, если отключена пользовательская камера (AssembleOptions.EnableCustomCamera имеет значение false).
  4. (Платформа Android) Если таймаут настройки AssembleOptions.DeviceList больше 0, и список кандидатов содержит MotionTrackerFrameSource, ARCoreFrameSource или AREngineFrameSource, будет предпринята попытка загрузить последние поддерживаемые списки устройств. После обновления доступность этих источников данных кадров может измениться. После завершения загрузки или таймаута процесс продолжается.
  5. Последовательная проверка доступности оставшихся кандидатов в списке (вызов FrameSource.CheckAvailability() и проверка FrameSource.IsAvailable).
  6. Выбирается первый источник данных кадров, результат проверки которого — доступен.

Условия отключения компонента определяются самим компонентом, распространенные случаи:

Если в итоге не выбран ни один источник данных кадров, сессия перейдет в состояние Broken, а в отчете сессии BrokenReason будет иметь значение NoAvailabileFrameSource.

Примечание

После обновления списка устройств, если список устройств изменился, доступность источников данных кадров также может измениться. Поведение сессии в этом случае описано в разделе Поддержка устройств и отчет сессии.

Следующие шаги

Связанные темы


  1. Поддержка устройств: гарнитуры в EasyAR.