Il punto di ingresso di Unity AR - AR Session
La sessione AR è il punto di ingresso di tutte le funzionalità AR. Di seguito vengono illustrati i concetti fondamentali di AR Session, la sua composizione, il flusso di esecuzione e il rapporto con AR Session di Unity AR Foundation. Verrà anche spiegato come funziona il flusso dati di EasyAR Sense in Unity.
Che cos'è AR Session
Tutti i processi AR, come il tracking degli oggetti, vengono eseguiti nella libreria nativa, cioè all'interno di EasyAR Sense. La sessione è il principale punto di ingresso per le funzionalità AR in Unity. Gestisce il funzionamento e lo stato del sistema AR, comprese la lettura dei dati da fotocamere fisiche e sensori, l'analisi del mondo reale, la guida del movimento e del rendering della fotocamera virtuale e di altri oggetti nella scena.
flowchart LR
A((Immagini<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 EasyAR e sessione AR Foundation
La sessione di EasyAR è il componente centrale per usare EasyAR in Unity e può funzionare indipendentemente da qualsiasi funzione AR di terze parti o di sistema. Al contrario, la sessione di AR Foundation fa parte del framework XR di Unity e si basa solo sulle 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 usa EasyAR, in genere non è necessario installare o usare anche AR Foundation. Funzionalità come il tracking immagine, il tracking del movimento e così via sono fornite direttamente da EasyAR Sense.
In alcuni casi può essere necessario combinare EasyAR Sense con AR Foundation per sfruttare funzionalità aggiuntive offerte da AR Foundation, come il rilevamento dei piani su alcuni dispositivi, e le relative interfacce. In questo caso, EasyAR Sense interagisce con il motore Unity tramite le interfacce fornite da AR Foundation.
Tuttavia, poiché EasyAR offre più funzionalità e una compatibilità con i dispositivi più ampia rispetto all'AR di sistema, usare solo AR Foundation in genere non consente di ottenere gli stessi risultati di EasyAR.
Composizione della sessione
Una sessione tipica è composta principalmente dai seguenti elementi:
- frame source: fornisce immagini della fotocamera fisica e dati dei sensori. A volte questi componenti forniscono anche dati di tracking del movimento. Per esempio, CameraDeviceFrameSource e MotionTrackerFrameSource
- frame filter(s): componenti che forniscono funzionalità AR specifiche, come ImageTrackerFrameFilter
- camera: l'oggetto della fotocamera virtuale nella scena
- origin: l'oggetto origine per il tracking del movimento
Nota
Nel concetto di AR Foundation, il tracking del movimento è considerato una funzionalità obbligatoria, quindi fornisce sempre un origin. Nel sistema EasyAR, invece, il tracking del movimento è una funzionalità opzionale, quindi anche l'origin è opzionale.
[Opzionale] Flusso dati della sessione
Il flusso dati è uno dei concetti fondamentali di EasyAR Sense. Non influenza lo sviluppo delle app AR in Unity. Questa sezione è per chi desidera una comprensione più approfondita del funzionamento della sessione.
In Unity, una sessione rappresenta in genere un flusso dati di EasyAR Sense.
flowchart LR
S[Frame Source]
R[Input Frame Recorder<br>Video Input Frame Recorder]
ift[iFrameThrottler]
iff[iFrameFork]
i2f[i2FAdapter]
fb[fbFrameFork]
i2o[i2OAdapter]
FOT[Object Tracker]
FIT[Image Tracker]
FMT[Mega Tracker]
FSSM[Sparse Spatial Map]
FST[Surface Tracker]
FDS[Dense Spatial Map]
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 dati viene creato durante l'inizializzazione della sessione. Le connessioni oltre i percorsi dati in grassetto dipendono dai componenti AR abilitati durante l'avvio.
Modificando i componenti della sessione, quindi, è possibile riorganizzare in modo flessibile il flusso dati e attivare più funzionalità AR contemporaneamente. I dettagli verranno spiegati nelle sezioni successive.
Flusso della sessione
flowchart LR
i[Inizializzazione]
a[Assemblaggio]
starta["StartSession(Assembled)"]
start[StartSession]
update(update)
stop[StopSession]
di[Deinizializzazione]
i --> a --> starta --> update --> stop --> di
i --> start --> update
Inizializzazione
L'inizializzazione è il processo con cui EasyAR Sense viene avviato usando una license key. Prima dell'inizializzazione, solo una piccola parte delle interfacce di EasyAR Sense è utilizzabile. Dopo l'inizializzazione, le funzionalità AR vengono attivate.Assemblaggio (Assembling)
Durante l'assemblaggio, in base alle opzioni configurate, vengono selezionati dalla scena i componenti adatti e collegati in un'unità di lavoro completa. Di solito il processo avviene automaticamente all'avvio, ma può anche essere eseguito manualmente prima dello start tramite l'interfaccia di assemblaggio. Una volta completato, è possibile avviare la sessione già assemblata per saltare l'assemblaggio e accelerare l'avvio. Un altro scopo importante dell'assemblaggio è determinare la disponibilità dei componenti AR e delle sorgenti di input, scegliendo la sorgente migliore tra tutte quelle candidate. Questo passaggio può anche essere usato per verificare se la sessione può funzionare sul dispositivo corrente.Il processo di assemblaggio è diviso in due fasi:
- Nella prima fase viene avviato l'aggiornamento della lista di supporto del dispositivo e, in base alla configurazione, si attende un intervallo fisso prima di iniziare l'assemblaggio. Se, al termine dell'attesa della prima fase, l'aggiornamento della lista di supporto del dispositivo è già completato, il processo termina.
- Altrimenti il processo entra nella seconda fase, che viene eseguita dopo il completamento dell'aggiornamento della lista di supporto del dispositivo. In questa fase, se la sorgente frame disponibile passa da nessuna sorgente disponibile a una sorgente disponibile e l'avvio della sessione è fallito dopo la prima fase, si tenterà di riavviare la sessione.
Indipendentemente dal fatto che l'aggiornamento della lista di dispositivi nella prima fase sia completato o meno, la sessione continuerà con i passaggi successivi dopo la fine della prima fase.
Avvio
L'avvio è il processo che fa entrare in funzione le funzionalità AR. Prima dell'avvio, i componenti AR non elaborano alcun dato. Dopo un avvio normale, la sessione inizia a controllare il movimento di alcuni oggetti nella scena e, quando si usano alcune sorgenti di input, anche il rendering dell'immagine della fotocamera fisica.Aggiornamento
Il processo di aggiornamento viene eseguito a ogni frame nel ciclo di rendering di Unity. In base ai risultati delle funzionalità AR in uso, modifica a ogni frame il transform della fotocamera virtuale (in alcune sorgenti di input), dell'origin e dei target tracciati. Il momento esatto dell'esecuzione cambia a seconda del dispositivo, ma avviene sempre prima del rendering.Arresto
L'arresto interrompe il funzionamento delle funzionalità AR, gli oggetti nella scena non sono più controllati dalla sessione e i dati delle sorgenti di input non vengono più elaborati.Deinizializzazione
La deinizializzazione libera alcune risorse globali, senza scaricare le librerie dinamiche. Dopo la deinizializzazione, i componenti AR non saranno più utilizzabili.
Nota
Tutte le funzionalità AR possono essere usate 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[Inizializzazione]
start[StartSession]
update(update)
stop[StopSession]
uload -.-> ustart -.-> udestroy
uload --> oi -. true .-> i
ustart --> ostart -. true .-> start
udestroy --> stop
i --> start --> update --> stop
Il ciclo di vita della sessione è in genere determinato dal momento in cui vengono chiamate le interfacce. Con le impostazioni predefinite, la sessione eseguirà automaticamente queste azioni nei seguenti momenti:
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().
Stato della sessione
ARSession.State descrive lo stato della sessione. Una sessione ha i seguenti stati:
| Stato | Descrizione |
|---|---|
| None | Stato iniziale, la sessione non è stata avviata né assemblata |
| Broken | La sessione è danneggiata, ad esempio a causa di un errore di assemblaggio |
| Assembling | Durante l'assemblaggio, che può durare normalmente alcuni frame |
| Assembled | Assemblaggio completato con successo, ma non ancora avviato |
| Ready | La sessione è stata avviata con successo, questo stato dura solo un frame |
| Running | La sessione è in esecuzione |
| Paused | La sessione è in pausa |
Di solito lo stato della sessione cambia quando si chiamano interfacce come avvio e arresto. Durante l'esecuzione, se si verifica un errore grave, la sessione può entrare nello stato Broken. Una sessione in stato Broken non può riprendersi e deve essere arrestata e riavviata.
Lo stato della sessione consente di capire se la sessione è utilizzabile. La maggior parte delle funzionalità può essere usata solo quando la sessione è in stato Ready o Running.
Stato del tracking del movimento
ARSession.TrackingStatus descrive lo stato del tracking del movimento della sessione e indica la qualità del tracking del movimento del dispositivo. Gli stati possibili sono:
| Stato | Descrizione |
|---|---|
| Optional<MotionTrackingStatus>.Empty | La funzionalità di tracking del movimento non è abilitata o la sessione non è in esecuzione |
| NotTracking | Il risultato del tracking del movimento non è disponibile; il motivo può essere l'inizializzazione, la perdita del tracking o il relocalization |
| Limited | Il tracking del movimento è valido ma il risultato non è ottimale; il motivo può essere una texture troppo debole nell'area corrente o un movimento troppo rapido |
| Tracking | La qualità del tracking del movimento è buona |
Nota
Nel concetto di AR Foundation, il tracking del movimento è considerato una funzionalità obbligatoria, quindi il suo stato di tracking è unito allo stato della sessione. Nel sistema EasyAR, invece, il tracking del movimento è opzionale, quindi il suo stato è separato e può anche essere vuoto.
Dove si trova lo stato di tracking delle altre funzioni AR
Poiché le funzioni AR possono tracciare più oggetti contemporaneamente, lo stato del tracking immagine e quello delle altre funzioni AR non si trovano nella sessione, ma nei componenti target.
È possibile usare TargetController.IsTracked per verificare se il target è in stato di tracking, oppure usare gli eventi TargetController.TargetFound e TargetController.TargetLost per adattare la logica del contenuto dell'app quando lo stato di tracking cambia.
Passi successivi
- Usare la sessione nell'app
- Esperimenti rapidi
- Altri componenti base
- Altri principi di funzionamento della sessione
- Unity XR e AR Foundation
- Principi interni di Sense
Creazione
- Provare a creare una sessione nella scena
Controllo dell'esecuzione
- Capire il metodo e il ruolo dell'inizializzazione
- Capire come determinare la disponibilità e il supporto del dispositivo
- Capire come controllare l'esecuzione della sessione
Accesso ai componenti e ai risultati
- Provare ad accedere ai componenti AR
- Capire come ottenere il risultato di esecuzione della sessione
Riferimenti ai componenti
- Riferimento al componente ARSession