Table of Contents

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

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 No Nessuno (0DoF) Camera normale, supporta camera frontale/posteriore e PC
EditorCameraDeviceFrameSource No Nessuno (0DoF) Camera normale, supporta solo il debug nell'editor
FramePlayer No Determinato dal file playback Riproduce file EIF per simulare runtime
ThreeDofCameraDeviceFrameSource No 3DoF Fornisce capacità di tracking 3DoF
InertialCameraDeviceFrameSource No 5DoF Fornisce capacità di inertial navigation
MotionTrackerFrameSource No 6DoF Fornisce motion tracking implementato da EasyAR
ARCoreFrameSource No 6DoF Fornisce motion tracking di ARCore
ARKitFrameSource No 6DoF Fornisce motion tracking di ARKit
AREngineFrameSource 6DoF Fornisce motion tracking di AR Engine
VisionOSARKitFrameSource 6DoF Fornisce motion tracking di VisionOS ARKit 1
XREALFrameSource 6DoF Fornisce motion tracking per dispositivi XREAL 1
ARCoreARFoundationFrameSource 6DoF Fornisce motion tracking ARFoundation corrispondente ad ARCore
ARKitARFoundationFrameSource 6DoF Fornisce motion tracking ARFoundation corrispondente ad ARKit
PicoFrameSource No 6DoF Fornisce motion tracking per dispositivi Pico 1
RokidFrameSource No 6DoF Fornisce motion tracking per dispositivi Rokid 1
MetaXRFrameSource No 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:

alt text

Lo screenshot seguente mostra una scene hierarchy con più componenti frame source:

alt text

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:

  1. Session attraversa i suoi nodi figli e raccoglie tutti i componenti sorgente di frame active in ordine di transform.
  2. 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.
  3. 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).
  4. (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.
  5. Verifica la disponibilità dei componenti candidati rimanenti nell'ordine dell'elenco chiamando FrameSource.CheckAvailability() e accedendo a FrameSource.IsAvailable.
  6. 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:

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

Argomenti correlati


  1. Per il supporto dei dispositivi, consultare supporto headset EasyAR.