Table of Contents

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

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

alt text

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

  • Ознакомьтесь с основными понятиями, составом и рабочим процессом сессии через Введение в ARSession.

Создание сессии с конфигурацией по умолчанию

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

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

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

alt text

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

ARSessionFactory.CreateSession(ARSessionFactory.ARSessionPreset.ImageTracking);

Важно отметить, что при использовании пресетов ARSessionFactory.ARSessionPreset.SparseSpatialMapBuilder и ARSessionFactory.ARSessionPreset.DenseSpatialMapBuilder необходимо также передавать параметры ресурсов. Например, следующий код создает сессию для построения разреженной карты пространства и указывает материал облака точек:

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

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

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

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

alt text

Примечание

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

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

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

В представлении 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 можно добавить новый трекер изображений к текущей выбранной сессии.

alt text

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

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

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

Важно отметить, что при добавлении SparseSpatialMapBuilderFrameFilter и DenseSpatialMapBuilderFrameFilter необходимо также передавать параметры ресурсов. Например, следующий код создает SparseSpatialMapBuilderFrameFilter для построения разреженной карты пространства и указывает материал облака точек:

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

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

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

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

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

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

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

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

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

Примечание

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

Например, чтобы удалить трекер изображений из сессии, выберите Image Tracker и нажмите клавишу Delete.

alt text

Осторожно

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

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

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

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

Примечание

Порядок узлов frame source эффективен только при изменении до сборки. После сборки изменение порядка не повлияет на результат работы.

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

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

Можно использовать меню EasyAR Sense > AR Session (Preset) > AR Session (Empty) для создания пустой сессии без каких-либо компонентов frame source и frame filter.

В скриптах можно использовать ARSessionFactory.CreateSession() для этого.

ARSessionFactory.CreateSession();

Затем, в зависимости от фактических потребностей, добавьте соответствующие компоненты frame source и frame filter.

Например, если необходимо создать сессию с функциями построения разреженной и плотной карты пространства, можно использовать следующий код:

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

Он создаст такую структуру сессии:

alt text

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

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

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

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

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