Table of Contents

Создание и настройка AR session

Чтобы использовать AR в Unity, сначала нужно создать и настроить AR session в сцене. В этой статье описаны основные способы создания и настройки AR session. Обычно после успешного создания в окне Hierarchy можно увидеть такую структуру:

alt text

Перед началом

Создание session с настройками по умолчанию

В окне Hierarchy щёлкните правой кнопкой мыши по пустому месту и через меню EasyAR Sense > [ AR функция ] > AR Session ([ функция ] Preset) создайте предварительно настроенную session. Session уже содержит компоненты frame source и frame filter, подходящие для этой функции.

В коде можно использовать ARSessionFactory.CreateSession(ARSessionFactory.ARSessionPreset, ARSessionFactory.Resources) для создания session.

Например, через EasyAR Sense > Image Tracking > AR Session (Image Tracking Preset) можно создать session для image tracking.

alt text

Соответствующий код:

ARSessionFactory.CreateSession(ARSessionFactory.ARSessionPreset.ImageTracking);

Обратите внимание, что при использовании preset ARSessionFactory.ARSessionPreset.SparseSpatialMapBuilder и ARSessionFactory.ARSessionPreset.DenseSpatialMapBuilder также нужно передавать параметры resource. Например, следующий код создаёт session для sparse spatial mapping и задаёт material point cloud:

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

Если скрипт выполняется только в editor, можно также использовать стандартные editor resources:

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

В меню EasyAR Sense > AR Session (Preset) > ** перечислены все доступные preset session, и на них можно ориентироваться.

alt text

Примечание

Несколько session, запущенных одновременно в одной сцене, будут конфликтовать друг с другом, поэтому в сцене может быть только одна включённая (GameObject.activeInHierarchy == true) session.

Добавление компонентов

Компоненты frame source и frame filter session можно добавлять и удалять по необходимости после создания.

В окне Hierarchy выберите AR Session (EasyAR) и щёлкните правой кнопкой мыши; затем через меню EasyAR Sense > [ AR функция ] > ** можно добавить соответствующие этой функции компоненты frame source и frame filter.

В коде можно использовать ARSessionFactory.AddFrameSource<Source>(GameObject, bool) для добавления компонента frame source или ARSessionFactory.AddFrameFilter<Filter>(GameObject, ARSessionFactory.Resources) для добавления компонента frame filter.

Например, через EasyAR Sense > Image Tracking > Frame Filter : Image Tracker можно добавить новый image tracker в выбранную session.

alt text

Соответствующий код:

ARSessionFactory.AddFrameFilter<ImageTrackerFrameFilter>(session);
Осторожно

Добавление компонентов нужно завершить до assemble. После того как session начнёт выполнять assemble и после его завершения, любое добавление или удаление компонентов переведёт session в состояние Broken и она перестанет работать.

Обратите внимание, что при добавлении SparseSpatialMapBuilderFrameFilter и DenseSpatialMapBuilderFrameFilter также нужно передавать параметры resource. Например, следующий код создаёт SparseSpatialMapBuilderFrameFilter для sparse spatial mapping и задаёт material point cloud:

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

Если скрипт выполняется только в editor, можно также использовать стандартные editor resources:

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

После создания frame filter можно использовать ARSessionFactory.SetupFrameFilters(List<GameObject>, ARSessionFactory.ARSessionPreset), чтобы настроить параметры frame filter в соответствии с preset.

Например, следующий код добавляет новый image tracker в session и настраивает его параметрами preset ARSessionFactory.ARSessionPreset.ImageTrackingMotionFusion.

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

При создании через меню нельзя настроить параметры по preset, поэтому после создания нужно настраивать компонент по его отдельному описанию.

Удаление компонентов

Чтобы удалить компонент из session, можно выбрать нужный компонент в окне Hierarchy и нажать Delete, либо уничтожить (Destroy) соответствующий объект в скрипте.

Примечание

Отключение GameObject компонента через SetActive(false) имеет тот же эффект, что и удаление.

Например, чтобы удалить image tracker из session, можно выбрать Image Tracker и нажать Delete.

alt text

Осторожно

Удаление компонентов тоже нужно завершить до assemble. После того как session начнёт выполнять assemble и после его завершения, любое добавление или удаление компонентов переведёт session в состояние Broken и она перестанет работать.

Влияние порядка компонентов

Порядок дочерних узлов frame filter у session не влияет на её выполнение.

Порядок дочерних узлов frame source влияет на порядок выбора frame source во время assemble. В качестве реального frame source session будет выбран только первый доступный frame source согласно порядку transform.

Примечание

Порядок узлов frame source имеет значение только если его изменить до assemble. После assemble изменение порядка не влияет на результат выполнения.

[Опционально] Свободное создание session

Если session с настройками по умолчанию не подходит под ваши задачи, можно свободно создавать и настраивать session по необходимости.

Через меню EasyAR Sense > AR Session (Preset) > AR Session (Empty) можно создать пустую session без компонентов frame source и frame filter.

В коде можно использовать ARSessionFactory.CreateSession().

ARSessionFactory.CreateSession();

Затем добавьте подходящие компоненты frame source и frame filter в соответствии с реальными потребностями.

Например, если нужно создать session, включающую sparse spatial mapping и dense spatial mapping, можно использовать такой код:

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);

Это создаст такую структуру session:

alt text

Следующие шаги

Управление выполнением

Доступ к компонентам и результатам

Справка по компонентам

  • Справка по компоненту ARSession