Camera e sorgenti dati input frame in Unity -- frame source (Frame Source)
Frame source è il provider dei dati della camera e degli input frame in Unity. Questo articolo introduce i concetti di base, i tipi e i metodi di selezione dei frame source a runtime.
Prima di iniziare
- Comprendere i concetti di base, la composizione e il workflow di AR Session.
- Comprendere concetti di base come camera, input frame.
Che cos'è frame source
Frame source (FrameSource) è il provider degli input frame (InputFrame) e astrae le camera e altri dispositivi o funzioni che forniscono dati input frame.
Il diagramma seguente mostra la posizione di frame source nella 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
Un frame source può limitarsi a fornire dati alle funzioni AR downstream, oppure può implementare direttamente alcune funzioni AR, come motion tracking. Alcuni frame source forniscono interfacce di controllo per i dispositivi camera, consentendo agli utenti di selezionare parametri camera come resolution, focus mode, ecc.
Tipi di frame source
In base al pacchetto Unity che fornisce il frame source, i frame source possono essere divisi in due grandi categorie:
- Built-in frame source: frame source forniti dal pacchetto EasyAR Sense Unity Plugin, che di solito supportano la maggior parte degli scenari d'uso comuni e alcuni headset.
- External frame source: frame source forniti da pacchetti di estensione EasyAR Sense Unity Plugin, di solito usati per supportare specifici dispositivi headset. Spesso gli external frame source sono forniti dai produttori di headset o da sviluppatori di terze parti.
A differenza degli external frame source, una custom camera non è necessariamente fornita esternamente; anche tra i built-in frame source ce ne sono alcuni che sono custom camera.
Un frame source può fornire motion data con diversi degrees of freedom: 0DoF, 3DoF, 5DoF e 6DoF. Lo stesso frame source può fornire motion data con degrees of freedom diversi in stati di lavoro diversi.
La tabella seguente elenca i frame source forniti da EasyAR:
| Nome | Built-in | Custom camera | Motion data | Descrizione |
|---|---|---|---|---|
| CameraDeviceFrameSource | Sì | No | Nessuno (0DoF) | Camera normale, supporta camera frontale/posteriore e PC |
| EditorCameraDeviceFrameSource | Sì | No | Nessuno (0DoF) | Camera normale, supporta solo il debug nell'editor |
| FramePlayer | Sì | No | Determinato dal file playback | Riproduce file EIF per simulare runtime |
| ThreeDofCameraDeviceFrameSource | Sì | No | 3DoF | Fornisce capacità di tracking 3DoF |
| InertialCameraDeviceFrameSource | Sì | No | 5DoF | Fornisce capacità di inertial navigation |
| MotionTrackerFrameSource | Sì | No | 6DoF | Fornisce motion tracking implementato da EasyAR |
| ARCoreFrameSource | Sì | No | 6DoF | Fornisce motion tracking di ARCore |
| ARKitFrameSource | Sì | No | 6DoF | Fornisce motion tracking di ARKit |
| AREngineFrameSource | Sì | Sì | 6DoF | Fornisce motion tracking di AR Engine |
| VisionOSARKitFrameSource | Sì | Sì | 6DoF | Fornisce motion tracking di VisionOS ARKit 1 |
| XREALFrameSource | Sì | Sì | 6DoF | Fornisce motion tracking per dispositivi XREAL 1 |
| ARCoreARFoundationFrameSource | Sì | Sì | 6DoF | Fornisce motion tracking ARFoundation corrispondente ad ARCore |
| ARKitARFoundationFrameSource | Sì | Sì | 6DoF | Fornisce motion tracking ARFoundation corrispondente ad ARKit |
| PicoFrameSource | No | Sì | 6DoF | Fornisce motion tracking per dispositivi Pico 1 |
| RokidFrameSource | No | Sì | 6DoF | Fornisce motion tracking per dispositivi Rokid 1 |
| MetaXRFrameSource | No | Sì | 6DoF | Fornisce motion tracking per dispositivi Meta XR 1 |
Selezione del frame source a runtime
La scene hierarchy della session contiene uno o più componenti frame source. Durante il runtime della session, non tutti i componenti frame source verranno usati.
Lo screenshot seguente mostra una scene hierarchy con un solo componente frame source:
![]()
Lo screenshot seguente mostra una scene hierarchy con più componenti frame source:

Ogni sorgente di frame ha funzioni diverse, e questo determina anche gli scenari d'uso e i dispositivi applicabili. Durante l'assemblaggio di session, uno e un solo componente tra questi viene selezionato come sorgente di frame di session.
La proprietà AssembleOptions.FrameSourceSelection definisce come viene selezionata la sorgente di frame durante l'esecuzione di session:
| Nome | Metodo |
|---|---|
| Auto (predefinito) | Seleziona automaticamente il primo nodo figlio disponibile e active in ordine di transform. |
| Manual | Specifica manuale. È possibile specificare solo un nodo figlio di session. |
| FramePlayer | Usa FramePlayer. |
Consiglio
L'ordine transform degli oggetti Unity può essere verificato con Transform.GetSiblingIndex(), oppure controllando l'ordine degli oggetti nella vista Hierarchy, ma la seguente opzione deve essere disattivata (lo è per impostazione predefinita): Edit > Preferences > General > Enable Alphanumeric Sorting.
Durante l'assemblaggio di session, la sorgente di frame viene selezionata dopo i seguenti passaggi:
- Session attraversa i suoi nodi figli e raccoglie tutti i componenti sorgente di frame active in ordine di transform.
- L'elenco dei candidati viene filtrato in base alla strategia di selezione della sorgente in AssembleOptions (AssembleOptions.FrameSource):
- Auto (predefinito): mantiene tutti i candidati.
- Manual: mantiene solo la sorgente di frame specificata manualmente.
- FramePlayer: sostituisce l'elenco dei candidati con FramePlayer.
- L'elenco dei candidati viene filtrato di nuovo, rimuovendo i seguenti componenti:
- Componenti disabilitati dai componenti stessi.
- Tutti i componenti di camera personalizzata quando la camera personalizzata è disattivata (AssembleOptions.EnableCustomCamera è false).
- (Piattaforma Android) Se l'impostazione di timeout di AssembleOptions.DeviceList è maggiore di 0 e l'elenco dei candidati contiene MotionTrackerFrameSource, ARCoreFrameSource o AREngineFrameSource, verrà tentato il download dell'elenco più recente dei dispositivi supportati corrispondente. Dopo l'aggiornamento scaricato, la disponibilità di queste sorgenti di frame può cambiare. Dopo il completamento del download o il timeout, continuano i passaggi successivi.
- Verifica la disponibilità dei componenti candidati rimanenti nell'ordine dell'elenco chiamando FrameSource.CheckAvailability() e accedendo a FrameSource.IsAvailable.
- Seleziona la prima sorgente di frame il cui risultato di verifica è disponibile.
Le condizioni di disabilitazione del componente stesso sono definite internamente al componente. I casi comuni includono:
- Esecuzione su un sistema non supportato, ad esempio AREngineFrameSource viene disabilitato su sistemi non Android.
- Un SDK di terze parti necessario non è installato, ad esempio XREALFrameSource viene disabilitato quando XREAL SDK non è installato.
- Le condizioni configurate non sono soddisfatte, ad esempio MotionTrackerFrameSource viene disabilitato quando MotionTrackerCameraDeviceQualityLevel del dispositivo è inferiore a MotionTrackerFrameSource.DeviceQualityLevel.
Se alla fine non viene selezionata alcuna sorgente di frame, session entra nello stato Broken e il valore del campo BrokenReason nel report di session è NoAvailabileFrameSource.
Nota
Dopo l'aggiornamento dell'elenco dei dispositivi, se l'elenco cambia, anche la disponibilità della sorgente di frame può cambiare. Puoi consultare supporto dispositivi e report di session per conoscere il comportamento di session in questo caso.
Passaggi successivi
- Provare ad aggiungere un gruppo di frame source nella scene
Argomenti correlati
- Supporto dispositivi e session report
- Supporto headset EasyAR
- Creare un external frame source per usare una custom camera