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
- Entenda o conceito básico de session por meio da introdução ao ARSession.
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 vistaScenee à direita a vistaGame. O video foi gravado no Unity editor em modoPlayusando dados de simulation run. O conteúdo da vistaGameé 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
Gamenã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:

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
Sceneno video é diferente do runtime real. O efeito visível na vistaGameé 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:

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

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
- Tente criar o XR Origin na scene
Controle de runtime
- Aprenda a estratégia de controle Active para XR Origin