Ingresso a unity ar —— AR Session
La sessione AR (session) è l'ingresso a tutte le funzionalità AR. Attraverso i seguenti contenuti conoscerai i concetti fondamentali, la composizione, il flusso operativo di una sessione AR e come si relaziona con la sessione AR di Unity AR Foundation. Scoprirai inoltre come funziona esattamente il flusso di dati di EasyAR Sense in Unity.
Cosa è una sessione AR
Tutte le procedure AR (come il tracking di oggetti) vengono eseguite all'interno della libreria nativa, ovvero EasyAR Sense. La session è il principale punto di ingresso per le funzionalità AR in Unity. Gestisce il processo operativo e lo stato del sistema AR, inclusa la lettura dei dati dalla fotocamera fisica e dai sensori, l'analisi del mondo reale, il movimento della fotocamera virtuale nella scena e il rendering di altre parti.
flowchart LR
A((Immagine<br>e altri dati))
B[Session]
C([Camera])
O([Origin])
T([Target])
A --> B
B -. transform .-> C
B -. transform .-> O
B -. transform .-> T
[Opzionale] Sessione di EasyAR rispetto alla sessione di AR Foundation
La sessione di EasyAR è il componente centrale per utilizzare EasyAR in Unity e può funzionare indipendentemente da qualsiasi funzionalità AR di terze parti o del sistema. Al contrario, la sessione di AR Foundation fa parte del framework XR di Unity e può utilizzare solo le funzionalità fornite dai plugin XR di Unity (come ARKit o ARCore).
flowchart TD
A1[EasyAR<br>AR Session]
A2[EasyAR Sense]
A1 --> A2
B1[AR Foundation<br>AR Session]
B2[ARKit Plugin]
B3[ARCore Plugin]
B1 --> B2
B1 --> B3
Quando si utilizza EasyAR, generalmente non è necessario installare e utilizzare contemporaneamente AR Foundation. Funzionalità come il tracciamento di immagini, il tracciamento del movimento, ecc., sono fornite autonomamente da EasyAR Sense.
In alcuni casi, potrebbe essere necessario combinare EasyAR Sense con AR Foundation per sfruttare funzionalità aggiuntive (come il rilevamento di piani su determinati dispositivi) e interfacce fornite da AR Foundation. In questo scenario, EasyAR Sense interagisce con il motore Unity attraverso le interfacce fornite da AR Foundation.
Tuttavia, poiché EasyAR offre più funzionalità e una migliore compatibilità con i dispositivi rispetto ai sistemi AR nativi, l'utilizzo indipendente di AR Foundation generalmente non raggiunge gli stessi risultati di EasyAR.
Composizione della sessione
Una sessione tipica è composta principalmente dalle seguenti parti:
- frame source: componente che fornisce immagini dalla fotocamera fisica e dati dai sensori. A volte questi componenti forniscono anche dati di motion tracking. Ad esempio CameraDeviceFrameSource e MotionTrackerFrameSource
- frame filter(s): componenti che forniscono funzionalità AR specifiche, come ImageTrackerFrameFilter
- camera: oggetto fotocamera virtuale nella scena
- origin: oggetto origine per il motion tracking
Nota
Nel concetto di AR Foundation, il motion tracking è considerato una funzionalità obbligatoria, quindi fornirà sempre un origin. Nel sistema EasyAR, invece, il motion tracking è una funzionalità opzionale, pertanto anche l'origin è opzionale.
[Opzionale] Flusso di dati della session
Il flusso di dati è uno dei concetti fondamentali di EasyAR Sense. Non influisce sullo sviluppo di applicazioni AR in Unity. Se desideri comprendere più a fondo il funzionamento di una session, puoi leggere questa sezione.
In Unity, una session rappresenta tipicamente un flusso di dati di EasyAR Sense.
flowchart LR
S[Sorgente frame]
R[Registratore frame di input<br>Registratore frame di input video]
ift[iFrameThrottler]
iff[iFrameFork]
i2f[i2FAdapter]
fb[fbFrameFork]
i2o[i2OAdapter]
FOT[Object Tracker]
FIT[Image Tracker]
FMT[Mega Tracker]
FSSM[Mappa spaziale sparsa]
FST[Surface Tracker]
FDS[Mappa spaziale densa]
FCR[Cloud Recognizer]
ofj[oFrameJoin]
off[oFrameFork]
ofb[oFrameBuffer]
O(( ))
ODS(( ))
OCR(( ))
S ==> R ==> ift ==> iff
iff --> i2f
i2f --> fb
fb -.-> FOT -.-> ofj
fb -.-> FIT -.-> ofj
iff ==> i2o ==> ofj ==> off ==> ofb ==> O
iff -.-> FMT -.-> ofj
iff -.-> FSSM -.-> ofj
iff -.-> FST -.-> ofj
iff -.-> FDS -.-> ODS
iff -.-> FCR -.-> OCR
off --> i2f
ofb --> ift
Questo flusso di dati viene creato durante l'avvio della session. Ad eccezione dei percorsi dati in grassetto, la connessione degli altri componenti dipende dai componenti AR abilitati durante la fase di avvio.
Pertanto, modificando i componenti abilitati in una session, è possibile alterare flessibilmente la struttura e le funzionalità del flusso di dati, consentendo anche di attivare agevolmente più funzionalità AR contemporaneamente. Questo metodo verrà descritto in dettaglio nei paragrafi successivi.
Flusso della session
flowchart LR
i[Inizializzazione<br>Initialize]
a[Assemblaggio<br>Assemble]
starta["Avvio (assemblato)<br>StartSession(Assembled)"]
start[Avvio<br>StartSession]
update((Aggiornamento<br>update))
stop[Arresto<br>StopSession]
di[Deinizializzazione<br>Deinitialize]
i --> a --> starta --> update --> stop --> di
i --> start --> update
Inizializzazione
L'inizializzazione è il processo di avvio di EasyAR Sense utilizzando una license key. Prima dell'inizializzazione, solo pochissime interfacce di EasyAR Sense sono utilizzabili. Dopo l'inizializzazione, le funzionalità AR vengono attivate.Assemblaggio (Assembling)
Il processo di assemblaggio seleziona componenti appropriati dalla scena in base alla configurazione delle opzioni di assemblaggio e li collega in un'unità operativa completa. Questo processo viene solitamente completato automaticamente all'avvio, ma può anche essere eseguito manualmente chiamando l'interfaccia di assemblaggio prima dell'avvio. Dopo l'assemblaggio, è possibile avviare la session assemblata per saltare il processo di assemblaggio, accelerando così l'avvio.
L'assemblaggio ha anche un'importante funzione: valuta la disponibilità dei componenti AR e delle fonti di input, selezionando la fonte di input più adatta tra tutti i candidati. Questo passaggio può anche determinare se la session corrente può essere eseguita sul dispositivo attuale.Il processo di assemblaggio si divide in due fasi:
- La prima fase avvia l'aggiornamento dell'elenco di supporto del dispositivo e, dopo un tempo di attesa fisso configurato, inizia l'assemblaggio. Se l'aggiornamento dell'elenco di supporto è completato dopo l'attesa della prima fase, il processo di assemblaggio termina;
- Altrimenti, il processo entra nella seconda fase, che viene eseguita al completamento dell'aggiornamento dell'elenco di supporto. In questa fase, se una frame source diventa disponibile (passando da non disponibile nella prima fase a disponibile) e la session non è riuscita ad avviarsi dopo la prima fase, verrà tentato un riavvio della session.
Indipendentemente dal completamento dell'aggiornamento dell'elenco nella prima fase, la session procederà con i passaggi successivi dopo il completamento della prima fase.
Avvio
L'avvio è il processo che inizia l'esecuzione delle funzionalità AR. Prima dell'avvio, i componenti AR non elaborano alcun dato. Dopo un avvio corretto, la session inizia a controllare il movimento di alcuni oggetti nella scena e, con alcune fonti di input, gestisce il rendering delle immagini della fotocamera fisica.Aggiornamento
Il processo di aggiornamento viene eseguito ogni frame nel ciclo di rendering di Unity. L'aggiornamento modifica ogni frame la transform della fotocamera virtuale (per alcune fonti di input), dell'origine e dei target tracciati, in base ai risultati delle funzionalità AR correnti. Il momento di esecuzione non è identico su tutti i dispositivi, ma avviene sempre prima del rendering.Arresto
L'arresto termina l'esecuzione delle funzionalità AR. Gli oggetti nella scena non saranno più controllati dalla session e i dati delle fonti di input non verranno elaborati.Deinizializzazione
La deinizializzazione rilascia alcune risorse globali (senza scaricare le librerie dinamiche). Dopo la deinizializzazione, i componenti AR non saranno utilizzabili.
Nota
Tutte le funzionalità AR possono essere utilizzate solo dopo ARSession.StartSession.
Ciclo di vita predefinito della sessione
flowchart LR
uload("BeforeSceneLoad")
ustart("MonoBehaviour.Start")
udestroy("MonoBehaviour.OnDestroy")
oi{Initialize<br>OnStartup}
ostart{AutoStart}
i[初始化<br>Initialize]
start[启动<br>StartSession]
update((更新<br>update))
stop[停止<br>StopSession]
uload -.-> ustart -.-> udestroy
uload --> oi -. true .-> i
ustart --> ostart -. true .-> start
udestroy --> stop
i --> start --> update --> stop
Il ciclo di vita della sessione è generalmente determinato dai tempi di chiamata dell'interfaccia. Con le impostazioni predefinite, la sessione esegue automaticamente le seguenti operazioni:
Inizializzazione (EasyARSettings.InitializeOnStartup ==
true)
L'inizializzazione automatica viene eseguita al momento BeforeSceneLoad di Unity.Avvio (ARSession.AutoStart ==
true)
L'avvio automatico viene eseguito al momento MonoBehaviour.Start() della sessione.Arresto
L'arresto automatico viene eseguito al momento MonoBehaviour.OnDestroy() della sessione.
Stato della sessione
ARSession.State descrive lo stato della sessione. Una sessione può trovarsi nei seguenti stati:
| Stato | Descrizione |
|---|---|
| None | Stato iniziale, la sessione non è stata avviata o assemblata |
| Broken | La sessione è rotta, ad esempio a causa di un assemblaggio fallito |
| Assembling | In fase di assemblaggio, un processo che solitamente richiede alcuni fotogrammi |
| Assembled | Assemblaggio completato con successo, ma non ancora avviata |
| Ready | La sessione è stata avviata con successo, questo stato dura solo un fotogramma |
| Running | La sessione è in esecuzione |
| Paused | La sessione è in pausa |
Tipicamente, lo stato della sessione cambia quando vengono chiamate interfacce come start e stop. Durante l'esecuzione, se si verifica un errore grave, la sessione può anche entrare nello stato Broken. Una sessione in stato Broken non può riprendere l'esecuzione; è necessario chiamare stop e poi riavviarla.
Lo stato della sessione permette di capire se la sessione corrente è utilizzabile. La stragrande maggioranza delle funzionalità è disponibile solo negli stati Ready o Running.
Stato di tracciamento del movimento
ARSession.TrackingStatus descrive lo stato di tracciamento del movimento della sessione. Indica la qualità del tracciamento del movimento del dispositivo e presenta i seguenti stati:
| Stato | Descrizione |
|---|---|
| Optional<MotionTrackingStatus>.Empty | La funzionalità di tracciamento del movimento non è abilitata o la sessione non è in esecuzione |
| NotTracking | I risultati del tracciamento del movimento non sono disponibili, possibilmente a causa di inizializzazione in corso, perdita del tracciamento o rilocalizzazione |
| Limited | Il tracciamento del movimento è attivo ma i risultati non sono ottimali, possibilmente a causa di texture debole nell'area o movimento troppo rapido |
| Tracking | La qualità del tracciamento del movimento è buona |
Nota
Nel contesto di AR Foundation, il tracciamento del movimento è considerato una funzionalità obbligatoria, quindi il suo stato di tracciamento è unito allo stato della sessione. Nel sistema EasyAR, invece, il tracciamento del movimento è una funzionalità opzionale, pertanto il suo stato di tracciamento esiste in modo indipendente e può essere vuoto.
Dove si trova lo stato di tracciamento per altre funzionalità AR
Poiché le funzionalità AR potrebbero tracciare diversi oggetti contemporaneamente (multi-target), lo stato di tracciamento delle immagini e quello delle altre funzionalità AR non si trovano nella sessione, ma nei componenti del target di tracciamento.
È possibile utilizzare TargetController.IsTracked per sapere se un target di tracciamento è in stato tracciato oppure utilizzare gli eventi TargetController.TargetFound e TargetController.TargetLost per adattare la logica dei contenuti dell'applicazione quando cambia lo stato di tracciamento.
Prossimi passi
- Usare session nell'applicazione
- Prova rapida
- Più componenti di base
- Ulteriori informazioni sul funzionamento della sessione
- Unity XR e AR Foundation
- Principi di funzionamento di Sense
Creazione
- Prova a creare una session
Controllo dell'esecuzione
- Scopri il metodo e la funzione dell'initialization
- Scopri come valutare disponibilità e supporto del dispositivo
- Scopri i metodi per controllare l'esecuzione di session
Accesso a componenti e risultati
- Prova ad accedere ai componenti delle funzionalità AR
- Scopri come ottenere i risultati dell'esecuzione di session
Riferimento componenti
- Riferimento del componente ARSession