Table of Contents

Cámaras y fuentes de datos de input frame en Unity -- frame source (Frame Source)

Frame source es el proveedor de datos de cámara e input frame en Unity. Este artículo presenta los conceptos básicos, los tipos y el método de selección de frame source en runtime.

Antes de comenzar

Qué es frame source

Frame source (FrameSource) es el proveedor de input frame (InputFrame), y abstrae la cámara y otros dispositivos o funciones que proporcionan datos de input frame.

El siguiente diagrama muestra la posición de frame source en la 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 puede limitarse a proporcionar datos para que los usen funciones AR downstream, o puede implementar por sí mismo algunas funciones AR, como motion tracking. Algunos frame sources proporcionan interfaces de control de dispositivos de cámara, permitiendo al usuario seleccionar parámetros de cámara como resolution, focus mode, etc.

Tipos de frame source

Según el paquete Unity que proporciona frame source, los frame sources pueden dividirse en dos categorías:

  • Built-in frame source: frame sources proporcionados por el paquete EasyAR Sense Unity Plugin, que normalmente soportan la mayoría de escenarios comunes y algunos headsets.
  • External frame source: frame sources proporcionados por paquetes de extensión de EasyAR Sense Unity Plugin, normalmente usados para soportar dispositivos headset específicos. Muchas veces, external frame sources son proporcionados por fabricantes de headsets o desarrolladores de terceros.

A diferencia de external frame source, custom camera no necesariamente es proporcionada externamente; también hay algunas custom cameras entre los built-in frame sources.

Frame source puede proporcionar motion data con distintos degrees of freedom: 0DoF, 3DoF, 5DoF y 6DoF. Un mismo frame source puede proporcionar motion data con distintos degrees of freedom en distintos estados de trabajo.

La siguiente tabla enumera los frame sources proporcionados por EasyAR:

Nombre Built-in Custom camera Motion data Descripción
CameraDeviceFrameSource No Ninguno (0DoF) Cámara normal, soporta cámaras frontal/trasera y PC
EditorCameraDeviceFrameSource No Ninguno (0DoF) Cámara normal, solo soporta depuración en editor
FramePlayer No Determinado por archivo playback Reproduce archivos EIF para simular runtime
ThreeDofCameraDeviceFrameSource No 3DoF Proporciona capacidad de tracking 3DoF
InertialCameraDeviceFrameSource No 5DoF Proporciona capacidad de inertial navigation
MotionTrackerFrameSource No 6DoF Proporciona motion tracking implementado por EasyAR
ARCoreFrameSource No 6DoF Proporciona motion tracking de ARCore
ARKitFrameSource No 6DoF Proporciona motion tracking de ARKit
AREngineFrameSource 6DoF Proporciona motion tracking de AR Engine
VisionOSARKitFrameSource 6DoF Proporciona motion tracking de VisionOS ARKit 1
XREALFrameSource 6DoF Proporciona motion tracking para dispositivos XREAL 1
ARCoreARFoundationFrameSource 6DoF Proporciona motion tracking de ARFoundation correspondiente a ARCore
ARKitARFoundationFrameSource 6DoF Proporciona motion tracking de ARFoundation correspondiente a ARKit
PicoFrameSource No 6DoF Proporciona motion tracking para dispositivos Pico 1
RokidFrameSource No 6DoF Proporciona motion tracking para dispositivos Rokid 1

Selección de frame source en runtime

La scene hierarchy de la session contiene uno o varios componentes frame source. Durante runtime de la session, no todos los componentes frame source se usarán.

La siguiente captura muestra una scene hierarchy con un solo componente frame source:

alt text

La siguiente captura muestra una scene hierarchy con varios componentes frame source:

alt text

Cada fuente de frames tiene funciones diferentes, lo que también determina sus escenarios de uso y dispositivos aplicables. Durante el ensamblaje de session, se selecciona uno y solo uno de estos componentes como fuente de frames de session.

La propiedad AssembleOptions.FrameSourceSelection define cómo se selecciona la fuente de frames cuando session se ejecuta:

Nombre Método
Auto (predeterminado) Selecciona automáticamente el primer nodo hijo disponible y active según el orden de transform.
Manual Especificación manual. Solo se puede especificar un nodo hijo de session.
FramePlayer Usa FramePlayer.
Consejo

El orden de transform de los objetos de Unity se puede comprobar con Transform.GetSiblingIndex(), o revisando el orden de los objetos en la vista Hierarchy, pero debe desactivarse la siguiente opción (está desactivada de forma predeterminada): Edit > Preferences > General > Enable Alphanumeric Sorting.

Durante el ensamblaje de session, la fuente de frames se selecciona después de los siguientes pasos:

  1. Session recorre sus nodos hijos y recopila todos los componentes de fuente de frames active en orden de transform.
  2. La lista de candidatos se filtra según la estrategia de selección de fuente en AssembleOptions (AssembleOptions.FrameSource):
    • Auto (predeterminado): conserva todos los candidatos.
    • Manual: conserva solo la fuente de frames especificada manualmente.
    • FramePlayer: reemplaza la lista de candidatos por FramePlayer.
  3. La lista de candidatos se filtra de nuevo y se eliminan los siguientes componentes:
    • Componentes deshabilitados por los propios componentes.
    • Todos los componentes de cámara personalizada cuando la cámara personalizada está deshabilitada (AssembleOptions.EnableCustomCamera es false).
  4. (Plataforma Android) Si el ajuste de timeout de AssembleOptions.DeviceList es mayor que 0 y la lista de candidatos contiene MotionTrackerFrameSource, ARCoreFrameSource o AREngineFrameSource, se intentará descargar la lista correspondiente más reciente de dispositivos compatibles. Después de la actualización descargada, la disponibilidad de estas fuentes de frames puede cambiar. Cuando la descarga se complete o expire el timeout, continúan los pasos siguientes.
  5. Compruebe la disponibilidad de los componentes candidatos restantes en orden de lista llamando a FrameSource.CheckAvailability() y accediendo a FrameSource.IsAvailable.
  6. Seleccione la primera fuente de frames cuyo resultado de comprobación esté disponible.

Las condiciones de deshabilitación propias del componente se definen dentro del componente. Los casos comunes incluyen:

Si finalmente no se selecciona ninguna fuente de frames, session entra en el estado Broken, y el valor del campo BrokenReason en el informe de session es NoAvailabileFrameSource.

Nota

Después de actualizar la lista de dispositivos, si la lista de dispositivos cambia, la disponibilidad de la fuente de frames también puede cambiar. Puede consultar compatibilidad de dispositivos e informe de session para conocer el comportamiento de session en este caso.

Próximos pasos

Temas relacionados


  1. Para el soporte de dispositivos, consulte soporte de headsets de EasyAR.