Table of Contents

Créer et configurer une session AR

Pour utiliser AR dans Unity, il faut d’abord créer et configurer une session AR dans la scène. Cet article présente plusieurs façons principales de créer et configurer une session AR. En général, une fois la création réussie, on peut voir la structure suivante dans la vue Hierarchy :

alt text

Avant de commencer

Créer une session avec configuration par défaut

Dans la vue Hierarchy, faites un clic droit dans une zone vide, puis utilisez le menu EasyAR Sense > [ AR fonction ] > AR Session ([ fonction ] Preset) pour créer une session préconfigurée. La session contient déjà les composants frame source et frame filter adaptés à cette fonction.

Dans le code, vous pouvez utiliser ARSessionFactory.CreateSession(ARSessionFactory.ARSessionPreset, ARSessionFactory.Resources) pour créer une session.

Par exemple, via EasyAR Sense > Image Tracking > AR Session (Image Tracking Preset), vous pouvez créer une session pour l’image tracking.

alt text

Le code correspondant est le suivant :

ARSessionFactory.CreateSession(ARSessionFactory.ARSessionPreset.ImageTracking);

Notez que, pour les presets ARSessionFactory.ARSessionPreset.SparseSpatialMapBuilder et ARSessionFactory.ARSessionPreset.DenseSpatialMapBuilder, il faut aussi fournir les paramètres de ressources. Par exemple, le code suivant crée une session pour le sparse spatial mapping et spécifie le matériau de nuage de points :

ARSessionFactory.CreateSession(ARSessionFactory.ARSessionPreset.SparseSpatialMapBuilder, new ARSessionFactory.Resources { SparseSpatialMapPointCloudMaterial = PointCloudMaterial });

Si le script ne s’exécute que dans l’éditeur, vous pouvez aussi utiliser les ressources par défaut de l’éditeur :

ARSessionFactory.CreateSession(ARSessionFactory.ARSessionPreset.SparseSpatialMapBuilder, ARSessionFactory.Resources.EditorDefault());

Le menu EasyAR Sense > AR Session (Preset) > ** liste tous les presets de session disponibles et peut servir de référence.

alt text

Note

Plusieurs sessions exécutées en même temps dans la même scène entreront en conflit, donc une seule session activée au plus (GameObject.activeInHierarchy == true) peut rester dans la scène.

Ajouter des composants

Les composants frame source et frame filter de la session peuvent être ajoutés ou supprimés selon les besoins après sa création.

Dans la vue Hierarchy, sélectionnez AR Session (EasyAR) puis faites un clic droit ; via le menu EasyAR Sense > [ AR fonction ] > **, vous pouvez ajouter les composants frame source et frame filter adaptés à cette fonction.

Dans le code, vous pouvez utiliser ARSessionFactory.AddFrameSource<Source>(GameObject, bool) pour ajouter un composant frame source, ou ARSessionFactory.AddFrameFilter<Filter>(GameObject, ARSessionFactory.Resources) pour ajouter un composant frame filter.

Par exemple, via EasyAR Sense > Image Tracking > Frame Filter : Image Tracker, vous pouvez ajouter un nouvel image tracker à la session sélectionnée.

alt text

Le code correspondant est le suivant :

ARSessionFactory.AddFrameFilter<ImageTrackerFrameFilter>(session);
Attention

L’ajout de composants doit être terminé avant assemble. Une fois que la session commence assemble et après sa fin, tout ajout ou suppression de composants fera passer la session en état Broken et elle cessera de fonctionner.

Notez que, lors de l’ajout de SparseSpatialMapBuilderFrameFilter et DenseSpatialMapBuilderFrameFilter, il faut aussi fournir des paramètres de ressources. Par exemple, le code suivant crée un SparseSpatialMapBuilderFrameFilter pour le sparse spatial mapping et spécifie le matériau de nuage de points :

ARSessionFactory.AddFrameFilter<SparseSpatialMapBuilderFrameFilter>(session, new ARSessionFactory.Resources { SparseSpatialMapPointCloudMaterial = PointCloudMaterial })

Si le script ne s’exécute que dans l’éditeur, vous pouvez aussi utiliser les ressources par défaut de l’éditeur :

ARSessionFactory.AddFrameFilter<SparseSpatialMapBuilderFrameFilter>(session, ARSessionFactory.Resources.EditorDefault());

Après avoir créé un frame filter, vous pouvez utiliser ARSessionFactory.SetupFrameFilters(List<GameObject>, ARSessionFactory.ARSessionPreset) pour ajuster ses paramètres selon le preset.

Par exemple, le code suivant ajoute un nouvel image tracker à la session et le configure avec les paramètres du preset ARSessionFactory.ARSessionPreset.ImageTrackingMotionFusion.

var filter = ARSessionFactory.AddFrameFilter<ImageTrackerFrameFilter>(session);
ARSessionFactory.SetupFrameFilters(new() { filter }, ARSessionFactory.ARSessionPreset.ImageTrackingMotionFusion);

Lorsqu’on crée depuis le menu, il n’est pas possible d’ajuster les paramètres selon le preset ; il faut donc configurer le composant après sa création selon la documentation de ce composant.

Supprimer des composants

Pour supprimer un composant de la session, vous pouvez sélectionner le composant correspondant dans la vue Hierarchy et appuyer sur Delete, ou détruire (Destroy) l’objet correspondant dans le script.

Note

Désactiver le GameObject d’un composant avec SetActive(false) a le même effet que le supprimer.

Par exemple, pour supprimer l’image tracker de la session, vous pouvez sélectionner Image Tracker et appuyer sur Delete.

alt text

Attention

La suppression de composants doit être terminée avant assemble. Une fois que la session commence assemble et après sa fin, tout ajout ou suppression de composants fera passer la session en état Broken et elle cessera de fonctionner.

Effet de l’ordre des composants

L’ordre des nœuds enfants de frame filter de la session n’a aucun effet sur son exécution.

L’ordre des nœuds enfants de frame source influence l’ordre de sélection du frame source pendant assemble. Seul le premier frame source disponible selon l’ordre de transform sera sélectionné comme frame source réel de la session.

Note

L’ordre des nœuds frame source n’est pris en compte que s’il est modifié avant assemble. Après assemble, le changement d’ordre n’a aucun effet sur le résultat d’exécution.

[Optionnel] Créer une session librement

Si la session avec configuration par défaut ne couvre pas vos besoins, vous pouvez aussi créer et configurer librement une session selon vos besoins.

Vous pouvez utiliser le menu EasyAR Sense > AR Session (Preset) > AR Session (Empty) pour créer une session vide sans composants frame source ni frame filter.

Dans le code, vous pouvez utiliser ARSessionFactory.CreateSession() pour le faire.

ARSessionFactory.CreateSession();

Ajoutez ensuite les composants frame source et frame filter adaptés à vos besoins réels.

Par exemple, si vous voulez créer une session incluant le sparse spatial mapping et le dense spatial mapping, vous pouvez utiliser le code suivant :

var session = ARSessionFactory.CreateSession();

var group = new GameObject("Frame Source Group");
group.transform.SetParent(session.transform, false);

ARSessionFactory.AddFrameSource<XREALFrameSource>(session);
ARSessionFactory.AddFrameSource<AREngineFrameSource>(session);
ARSessionFactory.AddFrameSource<ARCoreFrameSource>(session);
ARSessionFactory.AddFrameSource<ARCoreARFoundationFrameSource>(session);
ARSessionFactory.AddFrameSource<ARKitFrameSource>(session);
ARSessionFactory.AddFrameSource<ARKitARFoundationFrameSource>(session);
ARSessionFactory.AddFrameSource<VisionOSARKitFrameSource>(session);
ARSessionFactory.AddFrameSource<MotionTrackerFrameSource>(session);

List<GameObject> filters = new();
filters.Add(ARSessionFactory.AddFrameFilter<SparseSpatialMapBuilderFrameFilter>(session, resources));
filters.Add(ARSessionFactory.AddFrameFilter<DenseSpatialMapBuilderFrameFilter>(session, resources));

ARSessionFactory.SetupFrameFilters(filters, ARSessionFactory.ARSessionPreset.SparseSpatialMapBuilder);
ARSessionFactory.SetupFrameFilters(filters, ARSessionFactory.ARSessionPreset.DenseSpatialMapBuilder);

Cela créera une structure de session comme ceci :

alt text

Étapes suivantes

Contrôle d’exécution

Accès aux composants et aux résultats

Référence des composants