Table of Contents

Камеры и источники данных 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:

alt text

Следующий screenshot показывает scene hierarchy с несколькими компонентами frame source:

alt text

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

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

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

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

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

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

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

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

Примечание

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

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

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


  1. Поддержку устройств см. в поддержке headset в EasyAR.