Table of Contents

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

    1. 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.
    2. 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 :

É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

Créer

Contrôler l’exécution

Accéder aux composants et aux résultats

Référence des composants