Table of Contents

Centro de rastreamento de movimento AR no Unity - XR Origin

XR Origin é o conceito central do tracking motion no Unity. Em aplicações AR modernas, o tracking motion está gradualmente se tornando uma função indispensável. Com tracking motion, o aplicativo pode conhecer a posição e a orientação do usuário no mundo real sem depender de outros objetos de reconhecimento, proporcionando uma experiência AR imersiva. A seguir, você entenderá o conceito básico de XR Origin, sua composição e seu ciclo de vida, além de quando usar XR Origin.

Antes de começar

O que é XR Origin

Quando o tracking motion é inicializado, um ponto de referência é escolhido como origin do tracking. Esse ponto de referência geralmente é a posição do dispositivo quando o usuário inicia o aplicativo ou quando o AR service do sistema começa. Na scene do Unity, a representação desse ponto é XR Origin. Na maioria dos casos, a posição inicial do XR Origin na scene também é a posição inicial padrão da camera.

Este video mostra uma scene AR simples em que apenas o tracking motion está ativo. À esquerda está a vista Hierarchy, ao centro a vista Scene e à direita a vista Game. O video foi gravado no Unity editor em modo Play usando dados de simulation run. O conteúdo da vista Game é o mesmo que o usuário vê no mundo real pelo smartphone.

É possível ver que neste video o XR Origin (a esfera azul) fica fixo na scene, enquanto a camera que representa o usuário (ícone de camera) se move conforme o usuário se desloca no mundo real. Os cones brancos mostram a trajetória anterior da posição e da orientação da camera para entender melhor seu movimento. Esses cones brancos são criados abaixo do node XR Origin, e essa também é a estrutura típica de objetos nesse tipo de scene.

No sistema de tracking motion do Unity, a camera normalmente se move seguindo o XR Origin. Embora a camera nem sempre seja um child node do XR Origin, o AR Session calcula a posição da camera com base na posição do XR Origin para garantir que o conteúdo visto pelo usuário esteja alinhado ao mundo real.

Este video mostra a mesma scene, mas desta vez o XR Origin (a esfera azul) é movido durante o runtime. É possível ver que, ao mover o XR Origin, a camera também se move acompanhando-o, enquanto o conteúdo da vista Game não muda.

Em uma scene AR real, essa relação de movimento é muito mais complexa.

Comportamento do XR Origin em diferentes center mode

No Unity, todos os pontos de referência centrais do tracking AR são chamados de session center, e a regra que determina esse centro durante a session é chamada de center mode. Em diferentes center mode, o comportamento do XR Origin muda:

  • No center mode SessionOrigin, o XR Origin pode ser movido livremente.

    Normalmente o modo SessionOrigin é usado em scenes em que apenas o tracking motion está ativo. Quando outras funções também estão ativas, esse modo normalmente não é usado.

    No entanto, ao usar um headset, se o fabricante não implementou corretamente o reference point do tracking motion no Unity, então é necessário usar o Unity world center para forçar o modo SessionOrigin. Nesse caso, o root content deve se mover acompanhando a AR function, o que pode afetar o resultado visual, mas enquanto o fabricante de terceiros não fizer alterações, não há outra opção.

  • Nos demais center mode, por exemplo FirstTarget, o XR Origin não pode ser movido livremente.

    Normalmente o modo FirstTarget é usado em scenes sem tracking motion ou em scenes em que outras funções AR rodam junto com tracking motion.

    Nesse modo, a posição do XR Origin é determinada pela AR function, portanto ele não deve ser movido livremente.

Para mais detalhes sobre center mode e sobre como os objetos se movem na scene, veja center mode.

Forma e composição do XR Origin

A EasyAR pode usar duas formas diferentes de XR Origin:

  • XR Origin fornecido pela EasyAR
  • XR Origin fornecido pelo Unity XR framework

XR Origin (EasyAR)

A estrutura típica do XR Origin é a seguinte:

alt text

O root node do XR Origin é um GameObject vazio, e ele pode ter um ou mais child node XR Origin Child. O XR Origin Child contém um componente XROriginChildController, usado para representar a lógica de controle do XR Origin.

Durante a session, se a estrutura do XR Origin na scene não estiver correta, o XR Origin e um XR Origin Child serão criados automaticamente. Durante a execução, o XR Origin Child será restringido à mesma posição e orientação do XR Origin.

Os objetos gerados pela session, como a point cloud do sparse spatial mapping ou a mesh do dense spatial mapping, serão criados abaixo do node XR Origin Child.

Este video mostra o efeito de executar dense spatial mapping junto com tracking motion na mesma scene. É possível ver que a mesh gerada é criada abaixo do node XR Origin Child.

Nota: para facilitar o entendimento, o video desativa a geração de depth map, então o conteúdo da vista Scene no video é diferente do runtime real. O efeito visível na vista Game é o mesmo de quando a transparência da mesh está desativada.

[Opcional] XR Origin (Unity XR)

Se necessário, você pode usar o componente XR Origin fornecido pelo Unity XR framework.

Ao usar o XR Origin do Unity XR framework, a estrutura típica é a seguinte:

alt text

Em uma scene de headset, a estrutura típica é a seguinte:

alt text

O root node do XR Origin é um GameObject criado e mantido pelo Unity XR framework, e ele pode ter um ou mais child node XR Origin Child. O XR Origin Child contém um componente XROriginChildController, usado para representar a lógica de controle do XR Origin.

Durante a session, se a estrutura do XR Origin Child na scene não estiver correta, o XR Origin Child será criado automaticamente. Durante a execução, o XR Origin Child será restrito à mesma posição e orientação do XR Origin.

O XR Origin fornecido pelo Unity XR framework dá suporte principalmente a dois casos:

  • Você já usa AR Foundation no project e quer que ele funcione junto com EasyAR ou alternar entre os dois conforme o suporte do device.
  • O SDK de headset que você usa emprega o componente XR Origin fornecido pelo Unity XR framework.
Nota

Quando o pacote principal do Unity XR com.unity.xr.core-utils ainda não foi importado no project, se a camera na scene estiver na mesma hierarquia que o XR Origin fornecido pelo Unity XR framework (Camera e um node pai chamado Camera Offset), a session assumirá que essa estrutura foi criada pelo Unity XR framework e a usará. Isso é feito para oferecer o máximo de compatibilidade de scene, ou seja, uma scene criada com AR Foundation continuará funcionando mesmo que o AR Foundation não esteja importado no project, enquanto o restante das funções AR continua normal. Exceto pelas funções que só o AR Foundation pode oferecer, isso nem afeta a funcionalidade AR total nem a compatibilidade com devices.

A maioria das scenes de exemplo da EasyAR usa esse método para continuar funcionando sem AR Foundation e, quando o AR Foundation está presente, também mostrar a capacidade de cooperação com ele.

Na definição do AR Foundation, o XR Origin é o centro do tracking espacial na XR scene. Porém, é importante notar que, no conceito do AR Foundation, o tracking motion é considerado uma função obrigatória, e o tracking descrito na XR scene é tracking motion.

No sistema EasyAR, o tracking motion é uma função opcional, então o XR Origin também é opcional. O XR Origin só é criado e usado quando o tracking motion está ativado.

Ciclo de vida do XR Origin

O ciclo de vida do XR Origin depende da session. Quando a session começa, o XR Origin é selecionado ou criado se a estrutura do XR Origin na scene não estiver correta. Quando a session para, o XR Origin permanece no lugar até ser usado pela próxima session ou ser removido manualmente.

Próximos passos

Criação

Controle de runtime

Tópicos relacionados