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
- Comprenda los conceptos básicos, la composición y el workflow de AR Session.
- Comprenda conceptos básicos como cámara, input frame.
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 | Sí | No | Ninguno (0DoF) | Cámara normal, soporta cámaras frontal/trasera y PC |
| EditorCameraDeviceFrameSource | Sí | No | Ninguno (0DoF) | Cámara normal, solo soporta depuración en editor |
| FramePlayer | Sí | No | Determinado por archivo playback | Reproduce archivos EIF para simular runtime |
| ThreeDofCameraDeviceFrameSource | Sí | No | 3DoF | Proporciona capacidad de tracking 3DoF |
| InertialCameraDeviceFrameSource | Sí | No | 5DoF | Proporciona capacidad de inertial navigation |
| MotionTrackerFrameSource | Sí | No | 6DoF | Proporciona motion tracking implementado por EasyAR |
| ARCoreFrameSource | Sí | No | 6DoF | Proporciona motion tracking de ARCore |
| ARKitFrameSource | Sí | No | 6DoF | Proporciona motion tracking de ARKit |
| AREngineFrameSource | Sí | Sí | 6DoF | Proporciona motion tracking de AR Engine |
| VisionOSARKitFrameSource | Sí | Sí | 6DoF | Proporciona motion tracking de VisionOS ARKit 1 |
| XREALFrameSource | Sí | Sí | 6DoF | Proporciona motion tracking para dispositivos XREAL 1 |
| ARCoreARFoundationFrameSource | Sí | Sí | 6DoF | Proporciona motion tracking de ARFoundation correspondiente a ARCore |
| ARKitARFoundationFrameSource | Sí | Sí | 6DoF | Proporciona motion tracking de ARFoundation correspondiente a ARKit |
| PicoFrameSource | No | Sí | 6DoF | Proporciona motion tracking para dispositivos Pico 1 |
| RokidFrameSource | No | Sí | 6DoF | Proporciona motion tracking para dispositivos Rokid 1 |
| MetaXRFrameSource | No | Sí | 6DoF | Proporciona motion tracking para dispositivos Meta XR 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:
![]()
La siguiente captura muestra una scene hierarchy con varios componentes frame source:

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:
- Session recorre sus nodos hijos y recopila todos los componentes de fuente de frames active en orden de transform.
- 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.
- 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).
- (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.
- Compruebe la disponibilidad de los componentes candidatos restantes en orden de lista llamando a FrameSource.CheckAvailability() y accediendo a FrameSource.IsAvailable.
- 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:
- Ejecutarse en un sistema no compatible, por ejemplo AREngineFrameSource se deshabilita en sistemas que no son Android.
- No está instalado un SDK de terceros necesario, por ejemplo XREALFrameSource se deshabilita cuando XREAL SDK no está instalado.
- No se cumplen las condiciones configuradas, por ejemplo MotionTrackerFrameSource se deshabilita cuando MotionTrackerCameraDeviceQualityLevel del dispositivo es inferior a MotionTrackerFrameSource.DeviceQualityLevel.
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
- Intente agregar un grupo de frame sources en la scene