Table of Contents

Centro de tracking de movimiento AR en Unity: XR Origin

XR Origin es el concepto central del tracking motion en Unity. En las aplicaciones AR modernas, el tracking motion se está convirtiendo poco a poco en una función esencial. Gracias al tracking motion, la aplicación puede conocer la posición y orientación del usuario en el mundo real sin depender de otros objetos de reconocimiento, logrando una experiencia AR inmersiva. En lo siguiente conocerás el concepto básico de XR Origin, su composición y ciclo de vida, así como en qué casos debes usarlo.

Antes de empezar

Qué es XR Origin

Cuando se inicializa el tracking motion, se elige un punto de referencia como origin del tracking. Este punto de referencia suele ser la ubicación del dispositivo cuando el usuario inicia la aplicación o cuando arranca el AR service del sistema. En la scene de Unity, la representación de este punto es XR Origin. En la mayoría de los casos, la posición inicial de XR Origin en la scene también es la posición inicial predeterminada de la camera.

Este video muestra una scene AR sencilla donde solo se ejecuta tracking motion. A la izquierda está la vista Hierarchy, en el centro la vista Scene y a la derecha la vista Game. El video se grabó en Unity editor en modo Play usando datos de simulation run. El contenido de Game es el mismo que ve el usuario en el mundo real a través del teléfono.

Se puede ver que en este video XR Origin (la esfera azul) está fijo en la scene, mientras que la camera que representa al usuario (icono de camera) se mueve según el desplazamiento del usuario en el mundo real. Los conos blancos muestran la trayectoria pasada de la posición y orientación de la camera para entender mejor su movimiento. Estos conos blancos se crean bajo el node de XR Origin, y esta es también la estructura típica de los objetos en este tipo de scene.

En el sistema de tracking motion de Unity, la camera normalmente se mueve siguiendo a XR Origin. Aunque la camera no siempre sea un child node de XR Origin, AR Session calcula la posición de la camera según la posición de XR Origin para garantizar que el contenido visto por el usuario coincida con el mundo real.

Este video muestra la misma scene, pero esta vez XR Origin (la esfera azul) se mueve durante el runtime. Se puede ver que, después de mover XR Origin, la camera también se mueve siguiendo a XR Origin, mientras que el contenido de Game no cambia.

En una scene AR real, esta relación de movimiento es mucho más compleja.

Comportamiento de XR Origin en diferentes center mode

En Unity, todos los puntos de referencia centrales del tracking AR se llaman session center, y la regla que determina ese centro durante la session se llama center mode. Según el center mode, el comportamiento de XR Origin cambia:

  • En el center mode SessionOrigin, XR Origin puede moverse libremente.

    Normalmente el modo SessionOrigin se usa en scene donde solo corre tracking motion. Cuando otras funciones también están activas, normalmente no se usa este modo.

    Sin embargo, al usar un headset, si el fabricante no implementa correctamente el reference point del tracking motion en Unity, entonces hay que usar Unity world center para forzar el modo SessionOrigin. Este caso exige que el root content se mueva siguiendo a la AR function, lo que puede afectar el resultado del contenido, pero mientras el fabricante de terceros no haga cambios no hay otra opción.

  • En otros center mode, por ejemplo FirstTarget, XR Origin no puede moverse libremente.

    Normalmente el modo FirstTarget se usa en scene sin tracking motion o en scene donde otras funciones AR funcionan junto con tracking motion.

    En este modo, la posición de XR Origin la determina la AR function, por lo que no debe moverse libremente.

Para más detalles sobre center mode y sobre cómo se mueven los objetos dentro de la scene, consulte center mode.

Forma y composición de XR Origin

EasyAR puede usar dos formas distintas de XR Origin:

  • XR Origin proporcionado por EasyAR
  • XR Origin proporcionado por Unity XR framework

XR Origin (EasyAR)

La estructura típica de XR Origin es la siguiente:

alt text

El root node de XR Origin es un GameObject vacío, y puede tener uno o varios child node XR Origin Child. XR Origin Child contiene un componente XROriginChildController, que se usa para actuar como proxy de la lógica de control de XR Origin.

Durante el runtime, si la estructura de XR Origin en la scene no es correcta, se crearán automáticamente XR Origin y un XR Origin Child. Mientras se ejecuta, XR Origin Child quedará restringido a la misma posición y orientación que XR Origin.

Los objetos generados por session, como el point cloud del sparse spatial mapping o el mesh del dense spatial mapping, se crearán bajo el node XR Origin Child.

Este video muestra el efecto de ejecutar dense spatial mapping junto con tracking motion en la misma scene. Se puede ver que el mesh generado se crea bajo el node XR Origin Child.

Nota: para facilitar la comprensión, el video desactiva la generación de depth map, por lo que el contenido de la vista Scene del video es distinto del runtime real. El efecto visible en Game es el mismo que con la transparencia del mesh desactivada.

[Opcional] XR Origin (Unity XR)

Si lo necesita, puede usar el componente XR Origin proporcionado por Unity XR framework.

Al usar el XR Origin de Unity XR framework, la estructura típica es la siguiente:

alt text

En un scene de headset, la estructura típica es la siguiente:

alt text

El root node XR Origin es un GameObject creado y mantenido por Unity XR framework, y puede tener uno o varios child node XR Origin Child. XR Origin Child contiene un componente XROriginChildController, que se usa para actuar como proxy de la lógica de control de XR Origin.

Durante el runtime, si la estructura de XR Origin Child en la scene no es correcta, XR Origin Child se creará automáticamente. Mientras se ejecuta, XR Origin Child quedará restringido a la misma posición y orientación que XR Origin.

XR Origin proporcionado por Unity XR framework da soporte principalmente a dos situaciones:

  • Ya está usando AR Foundation en el project y quiere que funcione junto con EasyAR o alternar entre ambos según el soporte del dispositivo.
  • El SDK del headset que usa emplea el componente XR Origin proporcionado por Unity XR framework.
Nota

Cuando el paquete principal de Unity XR com.unity.xr.core-utils todavía no se ha importado en el project, si la camera de la scene está en la misma jerarquía que el XR Origin proporcionado por Unity XR framework (Camera y un node padre llamado Camera Offset), el session asumirá que esa estructura fue creada por Unity XR framework y la usará. Esto se hace para ofrecer la máxima compatibilidad de scene, es decir, una scene creada con AR Foundation seguirá funcionando aunque AR Foundation no esté importado en el project, mientras el resto de funciones AR siguen normales. Salvo las funciones que solo puede ofrecer AR Foundation, esto incluso no afecta la funcionalidad general de AR ni la compatibilidad de dispositivos.

La mayoría de las scene de ejemplo de EasyAR usan este método para seguir funcionando sin AR Foundation y, cuando AR Foundation está presente, mostrar también la capacidad de cooperación con él.

En la definición de AR Foundation, su XR Origin es el centro del tracking espacial en la XR scene. Sin embargo, hay que notar que, en el concepto de AR Foundation, el tracking motion se considera una función obligatoria, y el tracking que describe en la XR scene es tracking motion.

En el sistema EasyAR, el tracking motion es una función opcional, por lo que XR Origin también lo es. XR Origin solo se crea y usa cuando se habilita tracking motion.

Ciclo de vida de XR Origin

El ciclo de vida de XR Origin depende de session. Cuando session se inicia, XR Origin se selecciona o se crea (si la estructura de XR Origin en la scene no es correcta). Cuando session se detiene, XR Origin permanece en su lugar hasta que sea usado por el siguiente session o eliminado manualmente.

Siguientes pasos

Creación

Control del runtime

Temas relacionados