Point d'entrée Unity AR —— AR Session
La session AR est le point d'entrée de toutes les fonctionnalités AR. Ce qui suit vous présente les concepts de base d'une session AR, sa composition, son flux d'exécution, et sa relation avec l'AR Session d'Unity AR Foundation. Vous découvrirez également comment fonctionne exactement le flux de données d'EasyAR Sense dans Unity.
Qu'est-ce qu'une session AR
Tous les flux AR (comme le suivi d'objets) s'exécutent dans des bibliothèques natives, c'est-à-dire au sein d'EasyAR Sense. La session est le point d'entrée principal des fonctionnalités AR dans Unity. Elle gère le processus d'exécution et l'état du système AR, y compris la lecture des données de la caméra physique et des capteurs, l'analyse du monde réel, le déplacement de la caméra virtuelle dans la scène et d'autres parties de l'objet, le rendu, etc.
flowchart LR
A((Image<br>et autres données))
B[Session]
C([Caméra])
O([Origine])
T([Cible])
A --> B
B -. transform .-> C
B -. transform .-> O
B -. transform .-> T
[Optionnel] Session de EasyAR vs session de AR Foundation
La session de EasyAR est le composant central pour utiliser EasyAR dans Unity, fonctionnant indépendamment de toute fonctionnalité AR tierce ou système. En revanche, la session de AR Foundation fait partie du cadre XR de Unity et ne peut utiliser que les fonctionnalités fournies par les plugins XR de Unity (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
Lors de l'utilisation de EasyAR, il n'est généralement pas nécessaire d'installer et d'utiliser simultanément AR Foundation. Par exemple, les fonctionnalités de suivi d'images, de suivi de mouvement, etc., sont fournies indépendamment par EasyAR Sense.
Dans certains cas, il peut être nécessaire de combiner EasyAR Sense avec AR Foundation pour exploiter des fonctionnalités supplémentaires (comme la détection de plans sur certains appareils) et des interfaces fournies par AR Foundation. Dans ce scénario, EasyAR Sense interagit avec le moteur Unity via les interfaces fournies par AR Foundation.
Cependant, comme EasyAR offre plus de fonctionnalités et une meilleure adaptation aux appareils que les systèmes AR natifs, l'utilisation indépendante de AR Foundation n'atteint généralement pas les mêmes résultats qu'avec EasyAR.
Composition d'une session
Une session typique se compose principalement des éléments suivants :
- Source d'images (frame source) : Composant fournissant les images physiques de la caméra et les données des capteurs. Parfois, ces composants fournissent également des données de suivi de mouvement. Par exemple, CameraDeviceFrameSource et MotionTrackerFrameSource.
- Filtre(s) d'images (frame filter(s)) : Composants fournissant des fonctionnalités AR spécifiques, comme ImageTrackerFrameFilter.
- Caméra (camera) : Objet de caméra virtuelle dans la scène.
- Origine (origin) : Objet d'origine pour le suivi de mouvement.
Note
Dans le concept d'AR Foundation, le suivi de mouvement est considéré comme une fonctionnalité obligatoire, il fournit donc toujours une origine (origin).
Dans le système EasyAR, le suivi de mouvement est une fonctionnalité optionnelle, donc l'origine (origin) est également optionnelle.
[Optionnel] Flux de données de session
Flux de données est l'un des concepts fondamentaux d'EasyAR Sense. Il n'affecte pas votre développement d'applications AR dans Unity. Si vous souhaitez comprendre plus en profondeur le fonctionnement d'une session, vous pouvez lire cette section.
Dans Unity, une session représente généralement un flux de données d'EasyAR Sense.
flowchart LR
S[Source d'images]
R[Enregistreur d'images d'entrée<br>Enregistreur d'images d'entrée vidéo]
ift[Limiteur d'images]
iff[Fourche d'images]
i2f[Adaptateur i2F]
fb[Fourche d'images fb]
i2o[Adaptateur i2O]
FOT[Traqueur d'objets]
FIT[Traqueur d'images]
FMT[Mega Traqueur]
FSSM[Carte spatiale parcimonieuse]
FST[Traqueur de surface]
FDS[Carte spatiale dense]
FCR[Reconnaisseur de nuage]
ofj[Jonction d'images o]
off[Fourche d'images o]
ofb[Tampon d'images o]
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éé lors du démarrage de la session. À l'exception des chemins de données en gras, la connexion des autres parties dépend des composants AR activés pendant le processus de démarrage.
Ainsi, en modifiant les composants activés dans une session, vous pouvez adapter de manière flexible la structure et la fonctionnalité du flux de données, et activer simultanément plusieurs fonctionnalités AR de manière pratique. Cette méthode sera détaillée dans les paragraphes suivants.
Flux de session
flowchart LR
i[Initialisation<br>Initialize]
a[Assemblage<br>Assemble]
starta["Démarrer (assemblé)<br>StartSession(Assembled)"]
start[Démarrer<br>StartSession]
update((Mise à jour<br>update))
stop[Arrêter<br>StopSession]
di[Désinitialisation<br>Deinitialize]
i --> a --> starta --> update --> stop --> di
i --> start --> update
Initialisation
L'initialisation est le processus de démarrage d'EasyAR Sense avec une clé de licence. Avant l'initialisation, seules quelques interfaces d'EasyAR Sense sont utilisables. Les fonctionnalités AR sont activées après l'initialisation.Assemblage (Assembling)
L'assemblage sélectionne des composants appropriés dans la scène et les connecte en une unité de travail cohérente, selon les options configurées. Ce processus s'effectue généralement automatiquement au démarrage, mais peut aussi être déclenché manuellement avant le démarrage. Une fois assemblé, démarrer la session assemblée permet de sauter l'étape d'assemblage pour accélérer le lancement.
L'assemblage permet aussi de vérifier la disponibilité des composants AR et des sources d'entrée, en sélectionnant la source optimale. Cette étape détermine également si la session peut s'exécuter sur l'appareil.L'assemblage comporte deux phases :
- La première phase lance la mise à jour de la liste des appareils pris en charge et démarre l'assemblage après un délai fixe. Si la liste est actualisée avant la fin de ce délai, l'assemblage se termine immédiatement ;
- Sinon, l'assemblage entre en deuxième phase après la mise à jour complète de la liste. Si une source d'images (frame source) devient disponible durant cette phase et que la session a échoué au démarrage après la première phase, une relance est tentée.
La session poursuit son exécution après la première phase, indépendamment de l'état de mise à jour de la liste.
Démarrage
Le démarrage lance l'exécution des fonctionnalités AR. Avant cela, aucun composant AR ne traite les données. Après un démarrage réussi, la session contrôle les déplacements d'objets dans la scène et gère le rendu des images de la caméra physique pour certaines sources d'entrée.Mise à jour
La mise à jour s'exécute à chaque image (frame) dans la boucle de rendu d'Unity. Elle ajuste les transformations de la caméra virtuelle (pour certaines sources d'entrée), de l'origine et des cibles de suivi (tracking targets) en fonction des résultats AR courants. Le moment d'exécution varie selon les appareils, mais précède toujours le rendu.Arrêt
L'arrêt interrompt l'exécution des fonctionnalités AR. Les objets de la scène ne sont plus contrôlés par la session, et les données des sources d'entrée ne sont plus traitées.Désinitialisation
La désinitialisation libère certaines ressources globales (sans décharger la bibliothèque dynamique). Les composants AR deviennent inutilisables après cette étape.
Note
Toutes les fonctionnalités 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émarrer<br>StartSession]
update((Mise à jour<br>update))
stop[Arrêter<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 est généralement déterminé par le moment des appels d'interface. Avec les paramètres par défaut, la session s'exécute automatiquement aux moments suivants :
Initialisation (EasyARSettings.InitializeOnStartup ==
true)
L'initialisation automatique s'exécute au point temporel BeforeSceneLoad d'Unity.Démarrage (ARSession.AutoStart ==
true)
Le démarrage automatique s'exécute au point temporel MonoBehaviour.Start() de la session.Arrêt
L'arrêt automatique s'exécute au point temporel MonoBehaviour.OnDestroy() de la session.
État de session
ARSession.State décrit l'état de la session. Une session a les états suivants :
| État | Description |
|---|---|
| None | État initial, la session n'est ni démarrée ni assemblée |
| Broken | La session est cassée, par exemple en raison d'un échec d'assemblage |
| Assembling | En cours d'assemblage, ce processus dure généralement quelques images |
| Assembled | Assemblage réussi, mais pas encore démarré |
| Ready | La session a démarré avec succès, cet état ne dure qu'une seule image |
| Running | La session est en cours d'exécution |
| Paused | La session est en pause |
Généralement, l'état de la session change lors de l'appel d'interfaces comme le démarrage ou l'arrêt. Pendant l'exécution, en cas d'erreur grave, la session peut aussi entrer dans l'état Broken. Une session dans l'état Broken ne peut pas reprendre son exécution ; il faut appeler l'arrêt puis la redémarrer.
L'état de la session permet de savoir si elle est actuellement utilisable. La grande majorité des fonctionnalités ne sont disponibles que lorsque la session est dans l'état Ready ou Running.
État de suivi de mouvement
ARSession.TrackingStatus décrit l'état de suivi du suivi de mouvement de la session. Il indique la qualité du suivi de mouvement de l'appareil et peut présenter ces états :
| État | Description |
|---|---|
| Optional<MotionTrackingStatus>.Empty | La fonction de suivi de mouvement n'est pas activée ou la session ne fonctionne pas |
| NotTracking | Les résultats du suivi de mouvement ne sont pas disponibles, peut-être en raison d'une initialisation, d'une perte de suivi ou d'une re-localisation |
| Limited | Le suivi de mouvement est valide mais les résultats ne sont pas optimaux, peut-être en raison d'une texture trop faible dans la zone actuelle ou d'un mouvement trop rapide |
| Tracking | La qualité du suivi de mouvement est bonne |
Note
Dans le concept d'AR Foundation, le suivi de mouvement est considéré comme une fonctionnalité obligatoire, son état de suivi est donc fusionné avec l'état de la session.
Dans le système EasyAR, le suivi de mouvement est une fonctionnalité facultative, son état de suivi existe donc indépendamment et peut être vide.
Où se trouve l'état de suivi des autres fonctionnalités AR
Comme les fonctionnalités AR peuvent suivre plusieurs objets simultanément, l'état de suivi de l'image et l'état de suivi des autres fonctionnalités AR ne se trouvent pas dans la session, mais dans le composant cible.
Vous pouvez utiliser TargetController.IsTracked pour savoir si la cible est dans un état de suivi, ou utiliser les événements TargetController.TargetFound et TargetController.TargetLost pour ajuster la logique du contenu de l'application lorsque l'état de suivi change.
Prochaines étapes
- Utiliser session dans l'application
- Expérience rapide
- Plus de composants de base
- En savoir plus sur le fonctionnement des sessions
- Unity XR et AR Foundation
- Principes fondamentaux de sense
Création
- Essayer de créer session
Contrôle de l'exécution
- Comprendre les méthodes et fonctions d'initialisation
- Comprendre comment déterminer la disponibilité et le support matériel
- Comprendre les méthodes de contrôle de l'exécution de session
Accéder aux composants et résultats
- Essayer d'accéder aux composants fonctionnels AR
- Comprendre comment obtenir les résultats d'exécution de session
Référence des composants
- Référence du composant ARSession