Table of Contents

Criar e configurar AR session

Para usar AR no Unity, primeiro é preciso criar e configurar uma AR session na cena. Este artigo apresenta as principais formas de criar e configurar uma AR session. Em geral, depois de criada com sucesso, você verá a seguinte estrutura na vista Hierarchy:

alt text

Antes de começar

Criar uma session com configuração padrão

Na vista Hierarchy, clique com o botão direito em uma área vazia e use o menu EasyAR Sense > [ AR função ] > AR Session ([ função ] Preset) para criar uma session pré-configurada. A session já vem com os componentes frame source e frame filter adequados para essa função.

No código, você pode usar ARSessionFactory.CreateSession(ARSessionFactory.ARSessionPreset, ARSessionFactory.Resources) para criar uma session.

Por exemplo, em EasyAR Sense > Image Tracking > AR Session (Image Tracking Preset) você pode criar uma session para image tracking.

alt text

O código correspondente é o seguinte:

ARSessionFactory.CreateSession(ARSessionFactory.ARSessionPreset.ImageTracking);

Observe que, ao usar os presets ARSessionFactory.ARSessionPreset.SparseSpatialMapBuilder e ARSessionFactory.ARSessionPreset.DenseSpatialMapBuilder, também é necessário passar os parâmetros de resource. Por exemplo, o código abaixo cria uma session para sparse spatial mapping e especifica o material da point cloud:

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

Se o script for executado apenas no editor, você também pode usar os resources padrão do editor:

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

O menu EasyAR Sense > AR Session (Preset) > ** lista todos os presets de session disponíveis e pode ser usado como referência.

alt text

Nota

Várias sessions executadas ao mesmo tempo na mesma cena entrarão em conflito entre si, então a cena só pode ter uma session habilitada (GameObject.activeInHierarchy == true) por vez.

Adicionar componentes

Os componentes frame source e frame filter da session podem ser adicionados ou removidos conforme necessário depois que a session é criada.

Na vista Hierarchy, selecione AR Session (EasyAR) e clique com o botão direito; depois, pelo menu EasyAR Sense > [ AR função ] > **, você pode adicionar os componentes frame source e frame filter adequados para essa função.

No código, você pode usar ARSessionFactory.AddFrameSource<Source>(GameObject, bool) para adicionar um componente frame source, ou ARSessionFactory.AddFrameFilter<Filter>(GameObject, ARSessionFactory.Resources) para adicionar um componente frame filter.

Por exemplo, em EasyAR Sense > Image Tracking > Frame Filter : Image Tracker, você pode adicionar um novo image tracker à session selecionada.

alt text

O código correspondente é o seguinte:

ARSessionFactory.AddFrameFilter<ImageTrackerFrameFilter>(session);
Cuidado

A adição de componentes deve ser concluída antes de assemble. Depois que a session começa a executar assemble e após sua conclusão, qualquer adição ou remoção de componentes fará a session entrar no estado Broken e parar de funcionar.

Observe que, ao adicionar SparseSpatialMapBuilderFrameFilter e DenseSpatialMapBuilderFrameFilter, também é preciso passar parâmetros de resource. Por exemplo, o código abaixo cria um SparseSpatialMapBuilderFrameFilter para sparse spatial mapping e especifica o material da point cloud:

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

Se o script for executado apenas no editor, você também pode usar os resources padrão do editor:

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

Depois de criar um frame filter, você pode usar ARSessionFactory.SetupFrameFilters(List<GameObject>, ARSessionFactory.ARSessionPreset) para ajustar os parâmetros do frame filter de acordo com o preset.

Por exemplo, o código abaixo adiciona um novo image tracker à session e o configura com os parâmetros do preset ARSessionFactory.ARSessionPreset.ImageTrackingMotionFusion.

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

Ao criar pelo menu, os parâmetros não podem ser ajustados de acordo com o preset, então depois de criar o componente é preciso configurá-lo conforme a documentação de cada componente.

Remover componentes

Para remover um componente da session, você pode selecionar o componente correspondente na vista Hierarchy e pressionar Delete, ou destruir (Destroy) o objeto correspondente no script.

Nota

Desativar o GameObject de um componente com SetActive(false) tem o mesmo efeito que removê-lo.

Por exemplo, para remover o image tracker da session, você pode selecionar Image Tracker e pressionar Delete.

alt text

Cuidado

A remoção de componentes também deve ser concluída antes de assemble. Depois que a session começa a executar assemble e após sua conclusão, qualquer adição ou remoção de componentes fará a session entrar no estado Broken e parar de funcionar.

Efeito da ordem dos componentes

A ordem dos nós filhos de frame filter da session não tem nenhum efeito sobre a execução da session.

A ordem dos nós filhos de frame source afeta a ordem de seleção de frame source durante o processo de assemble. Apenas o primeiro frame source disponível segundo a ordem de transform será selecionado como frame source real da session.

Nota

A ordem dos nós frame source só é válida se for alterada antes de assemble. Depois de assemble, mudar a ordem não afeta o resultado de execução.

[Opcional] Criar session livremente

Se a session com configuração padrão não atender às suas necessidades, você também pode criar e configurar livremente uma session conforme necessário.

Você pode usar o menu EasyAR Sense > AR Session (Preset) > AR Session (Empty) para criar uma session vazia sem componentes frame source nem frame filter.

No código, você pode usar ARSessionFactory.CreateSession() para isso.

ARSessionFactory.CreateSession();

Depois adicione os componentes frame source e frame filter adequados às suas necessidades reais.

Por exemplo, se você quiser criar uma session que inclua sparse spatial mapping e dense spatial mapping, pode usar o código abaixo:

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

Isso criará uma estrutura de session como esta:

alt text

Próximos passos

Controle de execução

Acesso a componentes e resultados

Referência de componentes