AR Session, porte d’entrée de l’AR dans Unity
La session AR est le point d’entrée de toutes les fonctions AR. À travers ce contenu, vous découvrirez les concepts de base d’AR Session, sa composition, son flux d’exécution et sa relation avec la session AR d’Unity AR Foundation. Vous verrez aussi comment le flux de données d’EasyAR Sense fonctionne dans Unity.
Qu’est-ce qu’AR Session
Tous les flux AR, comme le suivi d’objet, s’exécutent dans la bibliothèque native, c’est-à-dire à l’intérieur d’EasyAR Sense. La session est le principal point d’entrée des fonctions AR dans Unity. Elle gère le fonctionnement et l’état du système AR, y compris la lecture des données des caméras et capteurs physiques, l’analyse du monde réel, et la conduite du mouvement et du rendu de la caméra virtuelle ainsi que des autres objets de la scène.
flowchart LR
A((Images<br>et autres données))
B[Session]
C([Camera])
O([Origin])
T([Target])
A --> B
B -. transform .-> C
B -. transform .-> O
B -. transform .-> T
[Optionnel] Session EasyAR et session AR Foundation
La session d’EasyAR est le composant central pour utiliser EasyAR dans Unity ; elle peut fonctionner indépendamment de toute fonction AR tierce ou système. La session d’AR Foundation, elle, fait partie du framework Unity XR et ne peut utiliser que les fonctions fournies par les plug-ins Unity XR, comme ARKit ou 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
EasyAR ne nécessite généralement pas l’installation et l’utilisation simultanées d’AR Foundation. Par exemple, le suivi d’image, le suivi de mouvement, et d’autres fonctions sont fournis indépendamment par EasyAR Sense.
Dans certains cas, il peut être nécessaire de combiner EasyAR Sense avec AR Foundation afin d’utiliser les fonctions supplémentaires et les interfaces fournies par AR Foundation, comme la détection de plans sur certains appareils. Dans ce cas, EasyAR Sense interagit avec le moteur Unity via les interfaces fournies par AR Foundation.
Cependant, comme EasyAR fournit davantage de fonctions que les AR système et une meilleure prise en charge des appareils, utiliser AR Foundation seul n’atteint généralement pas le même résultat qu’EasyAR.
Composition de la session
Une session typique se compose principalement des éléments suivants :
- frame source : composant qui fournit les images de la caméra physique et les données de capteurs, et parfois les données de suivi de mouvement. Par exemple CameraDeviceFrameSource et MotionTrackerFrameSource
- frame filter(s) : composant qui fournit des fonctions AR spécifiques, comme ImageTrackerFrameFilter
- camera : objet caméra virtuelle dans la scène
- origin : objet d’origine du suivi de mouvement
Note
Dans le concept d’AR Foundation, le suivi de mouvement est une fonction obligatoire, donc une origin est toujours fournie. Dans le système EasyAR, le suivi de mouvement est facultatif, et l’origin l’est donc aussi.
[Optionnel] Flux de données de la session
Le flux de données est l’un des concepts de base d’EasyAR Sense. Il n’affecte pas votre développement AR dans Unity. Si vous souhaitez mieux comprendre le fonctionnement de la session, vous pouvez lire cette section.
Dans Unity, une session exprime généralement un flux de données d’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
Ce flux de données est créé pendant le démarrage de la session. À l’exception des chemins de données en gras, le fait que les autres parties soient connectées dépend des composants AR activés pendant le démarrage.
Ainsi, en modifiant les composants activés dans la session, vous pouvez modifier de manière flexible la structure et les capacités du flux de données, et activer facilement plusieurs fonctions AR en même temps. Cette méthode sera détaillée dans les sections suivantes.
Processus de la session
flowchart LR
i[Initialisation<br>Initialize]
a[Assemblage<br>Assemble]
starta["Démarrage (assemblé)<br>StartSession(Assembled)"]
start[Démarrage<br>StartSession]
update((Mise à jour<br>update))
stop[Arrêt<br>StopSession]
di[Désinitialisation<br>Deinitialize]
i --> a --> starta --> update --> stop --> di
i --> start --> update
Initialisation
L’initialisation est le processus qui permet de démarrer EasyAR Sense avec la clé de licence. Avant l’initialisation, seule une très petite partie des interfaces d’EasyAR Sense est disponible. Après l’initialisation, les fonctions AR sont activées.Assemblage (Assembling)
Le processus d’assemblage sélectionne dans la scène les composants appropriés selon les options d’assemblage, puis les relie en une unité de travail cohérente. Ce processus est généralement effectué automatiquement au démarrage, mais il peut aussi être lancé manuellement avant le démarrage. Une fois l’assemblage terminé, vous pouvez démarrer la session déjà assemblée pour sauter le processus d’assemblage et accélérer le démarrage. L’assemblage sert aussi à déterminer la disponibilité des composants AR et des sources d’entrée, puis à choisir la source d’entrée la plus adaptée parmi toutes les candidates. Il peut aussi servir à déterminer si la session peut fonctionner sur l’appareil courant.Le processus d’assemblage se divise en deux phases
- La première phase lance la mise à jour de la liste de prise en charge de l’appareil et attend un délai fixe selon la configuration avant de commencer l’assemblage. Si la liste a déjà été mise à jour à la fin de cette attente, le processus se termine.
- Sinon, le processus entre dans la deuxième phase, qui s’exécute une fois la liste de prise en charge mise à jour. À cette phase, si aucune frame source n’est disponible dans la première phase mais qu’une frame source devient disponible ensuite, et si la session a échoué au démarrage après la première phase, une nouvelle tentative de démarrage sera effectuée.
Que la liste d’appareils soit mise à jour ou non à la fin de la première phase, la session poursuit les étapes suivantes après cette phase.
Démarrage
Le démarrage lance l’exécution des fonctions AR. Avant le démarrage, les composants AR ne traitent aucune donnée. Après un démarrage normal, la session commence à contrôler le mouvement de certains objets dans la scène et, lors de l’utilisation de certaines sources d’entrée, le rendu de l’image de la caméra physique.Mise à jour
Le processus de mise à jour s’exécute à chaque image dans la boucle de rendu d’Unity. Il modifie à chaque frame le transform de la caméra virtuelle (pour certaines sources d’entrée), de l’origin et des targets de suivi, selon les résultats des fonctions AR actuellement utilisées. Le moment exact d’exécution varie selon l’appareil, mais il se produit toujours avant le rendu.Arrêt
L’arrêt met fin à l’exécution des fonctions AR. Les objets de la scène ne sont plus contrôlés par la session et les données de la source d’entrée ne sont plus traitées.Réinitialisation
La réinitialisation libère certaines ressources globales (sans décharger les bibliothèques dynamiques). Après la réinitialisation, les composants AR ne sont plus utilisables.
Note
Toutes les fonctions AR ne peuvent être utilisées qu’après ARSession.StartSession.
Cycle de vie par défaut de la session
flowchart LR
uload("BeforeSceneLoad")
ustart("MonoBehaviour.Start")
udestroy("MonoBehaviour.OnDestroy")
oi{Initialize<br>OnStartup}
ostart{AutoStart}
i[Initialisation<br>Initialize]
start[Démarrage<br>StartSession]
update((Mise à jour<br>update))
stop[Arrêt<br>StopSession]
uload -.-> ustart -.-> udestroy
uload --> oi -. true .-> i
ustart --> ostart -. true .-> start
udestroy --> stop
i --> start --> update --> stop
Le cycle de vie de la session dépend généralement du moment où les interfaces sont appelées. Avec la configuration par défaut, la session exécute automatiquement les actions suivantes :
Initialisation (EasyARSettings.InitializeOnStartup ==
true) L’initialisation automatique s’exécute au moment BeforeSceneLoad d’Unity.Démarrage (ARSession.AutoStart ==
true) Le démarrage automatique s’exécute au moment MonoBehaviour.Start() de la session.Arrêt L’arrêt automatique s’exécute au moment MonoBehaviour.OnDestroy() de la session.
État de la session
ARSession.State décrit l’état de la session. Une session possède les états suivants :
| État | Description |
|---|---|
| None | État initial, session non démarrée ni assemblée |
| Broken | Session cassée, par exemple après un échec d’assemblage |
| Assembling | En cours d’assemblage, l’assemblage peut durer plusieurs frames |
| Assembled | Assemblage terminé avec succès, mais session pas encore démarrée |
| Ready | La session a démarré avec succès, cet état ne dure qu’une frame |
| Running | Session en cours d’exécution |
| Paused | Session en pause |
En général, l’état de la session change lors de l’appel d’interfaces comme démarrage et arrêt. En cours d’exécution, si une erreur grave survient, la session peut aussi entrer dans l’état Broken. Une session dans l’état Broken ne peut pas reprendre son exécution et doit être arrêtée puis redémarrée.
Vous pouvez utiliser l’état de la session pour savoir si elle est actuellement utilisable. La plupart des fonctions ne peuvent être utilisées que dans les états Ready ou Running.
État du suivi de mouvement
ARSession.TrackingStatus décrit l’état du suivi de mouvement de la session, c’est-à-dire la qualité du suivi de mouvement de l’appareil :
| État | Description |
|---|---|
| Optional<MotionTrackingStatus>.Empty | La fonction de suivi de mouvement n’est pas activée ou la session ne tourne pas |
| NotTracking | Le résultat du suivi de mouvement est indisponible, par exemple pendant l’initialisation, une perte de suivi ou une relocalisation |
| Limited | Le suivi de mouvement est valide, mais pas très bon, par exemple parce que la texture de la zone actuelle est faible ou que le mouvement est trop rapide |
| Tracking | La qualité du suivi de mouvement est bonne |
Note
Dans le concept d’AR Foundation, le suivi de mouvement est obligatoire, et son état de suivi est donc fusionné avec l’état de la session. Dans le système EasyAR, le suivi de mouvement est facultatif, donc l’état de suivi est indépendant et peut être vide.
Où se trouve l’état de suivi des autres fonctions AR
Comme les fonctions AR peuvent suivre plusieurs objets en même temps, l’état de suivi d’image et l’état de suivi des autres fonctions AR ne se trouvent pas dans la session, mais dans les composants target.
Vous pouvez utiliser TargetController.IsTracked pour savoir si une target est en état de suivi, ou les événements TargetController.TargetFound et TargetController.TargetLost pour ajuster la logique du contenu de l’application lorsque l’état de suivi change.
Étapes suivantes
- Utiliser la session dans l’application
- Expérimentation rapide
- Plus de composants de base
- Plus de principes d’exécution de session
- Unity XR et AR Foundation
- Principes de base d’EasyAR Sense
Créer
- Essayez de créer une session dans la scène
Contrôler l’exécution
- Découvrez les méthodes et usages de l’initialisation
- Découvrez comment déterminer la disponibilité et la prise en charge de l’appareil
- Découvrez comment contrôler l’exécution de la session
Accéder aux composants et aux résultats
- Essayez d’accéder aux composants de fonctionnalité AR
- Découvrez comment obtenir les résultats d’exécution de la session
Référence des composants
- Référence du composant ARSession