Table of Contents

Criar e configurar sessão AR

Para usar AR no Unity, você precisa primeiro criar e configurar uma sessão AR na cena. Este artigo apresenta várias maneiras principais de criar e configurar uma sessão AR. Geralmente, após criar uma sessão com sucesso, você pode ver a seguinte estrutura na visualização Hierarchy:

alt text

Antes de começar

Criar sessão com configuração padrão

Na visualização Hierarchy, clique com o botão direito em um espaço vazio e use o menu EasyAR Sense > [ Função AR ] > AR Session ([ Função ] Preset) para criar uma sessão pré-configurada. A sessão vem pré-configurada com componentes frame source e frame filter adequados para essa função.

Em scripts, você pode usar ARSessionFactory.CreateSession(ARSessionFactory.ARSessionPreset, ARSessionFactory.Resources) para criar uma sessão.

Por exemplo, usando o menu EasyAR Sense > Image Tracking > AR Session (Image Tracking Preset), você cria uma sessão para rastreamento de imagem.

alt text

O código de script correspondente é:

ARSessionFactory.CreateSession(ARSessionFactory.ARSessionPreset.ImageTracking);

Note que ao usar ARSessionFactory.ARSessionPreset.SparseSpatialMapBuilder e ARSessionFactory.ARSessionPreset.DenseSpatialMapBuilder, você também precisa passar parâmetros de recursos. Por exemplo, este código cria uma sessão para construção espacial esparsa e especifica o material da nuvem de pontos:

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

Se o script for executado apenas no Editor, você pode usar recursos padrão do Editor:

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

O menu EasyAR Sense > AR Session (Preset) > ** lista todas as sessões predefinidas disponíveis para uso.

alt text

Nota

Várias sessões executando simultaneamente na mesma cena entrarão em conflito. Portanto, você deve ter no máximo uma sessão habilitada (GameObject.activeInHierarchy == true) na cena.

Adicionar componentes

Os componentes frame source e frame filter da sessão podem ser adicionados e removidos conforme necessário após a criação da sessão.

Na visualização Hierarchy, selecione AR Session (EasyAR), clique com o botão direito e use o menu EasyAR Sense > [ Função AR ] > ** para adicionar componentes frame source e frame filter adequados para essa função.

Em scripts, 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, usando o menu EasyAR Sense > Image Tracking > Frame Filter : Image Tracker, você adiciona um novo rastreador de imagem à sessão selecionada.

alt text

O código de script correspondente é:

ARSessionFactory.AddFrameFilter<ImageTrackerFrameFilter>(session);
Cuidado

A adição de componentes deve ser concluída antes do assemble. Após a sessão iniciar o assemble ou concluí-lo, qualquer adição ou remoção de componentes fará com que a sessão entre no estado Broken e pare de funcionar.

Note que ao adicionar SparseSpatialMapBuilderFrameFilter e DenseSpatialMapBuilderFrameFilter, você também precisa passar parâmetros de recursos. Por exemplo, este código cria um SparseSpatialMapBuilderFrameFilter para construção espacial esparsa e especifica o material da nuvem de pontos:

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

Se o script for executado apenas no Editor, você pode usar recursos padrão do Editor:

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

Após criar um frame filter, você pode usar ARSessionFactory.SetupFrameFilters(List<GameObject>, ARSessionFactory.ARSessionPreset) para ajustar os parâmetros do frame filter de acordo com a predefinição.

Por exemplo, este código adiciona um novo rastreador de imagem à sessão e o configura com os parâmetros predefinidos de ARSessionFactory.ARSessionPreset.ImageTrackingMotionFusion:

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

Ao usar o menu para criação, você não pode ajustar os parâmetros por predefinição. Configure-os após a criação de acordo com as instruções específicas do componente.

Remover componentes

Para remover um componente da sessão, selecione o componente correspondente na visualização Hierarchy e pressione Delete, ou destrua (Destroy) o objeto correspondente no script.

Nota

Desabilitar (SetActive(false)) o GameObject do componente tem o mesmo efeito que removê-lo.

Por exemplo, para remover um rastreador de imagem da sessão, selecione Image Tracker e pressione Delete.

alt text

Cuidado

A remoção de componentes deve ser concluída antes do assemble. Após a sessão iniciar o assemble ou concluí-lo, qualquer adição ou remoção de componentes fará com que a sessão entre no estado Broken e pare de funcionar.

Impacto da ordenação de componentes

A ordem dos nós filhos frame filter da sessão não afeta a execução da sessão.

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

Nota

A ordem dos nós frame source só é eficaz se modificada antes do assemble. Após o assemble, ajustar a ordem não afeta o resultado da execução.

[Opcional] Criar sessão livremente

Se a sessão configurada por padrão não atender às suas necessidades, você pode criar e configurar uma sessão livremente conforme necessário.

Use o menu EasyAR Sense > AR Session (Preset) > AR Session (Empty) para criar uma sessão vazia sem componentes frame source ou frame filter.

Em scripts, você pode usar ARSessionFactory.CreateSession() para isso.

ARSessionFactory.CreateSession();

Em seguida, adicione os componentes frame source e frame filter apropriados conforme necessário.

Por exemplo, para criar uma sessão com recursos de construção espacial esparsa e densa, use este código:

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 sessão como esta:

alt text

Próximos passos

Controle de execução

Acessar componentes e resultados

Referência de componentes