Table of Contents

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 :

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

É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

Création

Contrôle de l'exécution

Accéder aux composants et résultats

Référence des composants