Cámara de Unity en escenas AR
La experiencia AR en Unity depende de la cámara. Este artículo explica el papel de la cámara en escenas AR y cómo session controla las propiedades de la cámara para garantizar la experiencia AR correcta.
Antes de empezar
- Aprenda los conceptos básicos, componentes y flujo de trabajo de session en Introducción a ARSession.
El papel de la cámara en escenas AR
En Unity, la cámara se usa para mostrar el mundo del juego al jugador, pero en escenas AR su papel es aún más importante. No solo renderiza contenido virtual, también debe alinearse con el mundo real para asegurar que los objetos virtuales se superpongan correctamente sobre la escena real.
Este video muestra una escena AR sencilla. A la izquierda está la vista
Sceney a la derecha la vistaGame. El video se grabó en el modoPlaydel Editor de Unity usando simulation data. El contenido en la vistaGamees el mismo que ve el usuario en el teléfono en el mundo real.En este video, la cámara que representa al usuario (icono de cámara) se mueve según el movimiento del usuario en el mundo real. El cono blanco muestra la posición y orientación de la cámara durante el periodo anterior. En la vista
Game, la cámara no solo muestra el contenido virtual de la vistaScene, sino que también superpone la imagen del mundo real en la parte inferior del contenido virtual. Este es el comportamiento típico de una cámara en una escena AR.
Para asegurar que los objetos virtuales se superpongan correctamente sobre la escena real, algunas propiedades de la cámara deben ajustarse según el estado de ejecución de AR. Estas propiedades incluyen:
- el transform de la cámara (posición y orientación)
- el field of view (FOV), aspect ratio y projection matrix de la cámara
- los ajustes de culling de la cámara (
<xref:UnityEngine.GL.invertCulling?displayProperty=nameWithType>)
Advertencia
Al desarrollar una aplicación, modificar estas propiedades de la cámara en la session camera no está soportado, porque puede hacer que el contenido virtual no se alinee correctamente con el mundo real y afectar la experiencia del usuario. Incluso si estas propiedades se modifican por algún medio, el sistema AR sobrescribirá esos cambios durante la ejecución, o pueden ocurrir comportamientos inesperados debido a la inconsistencia entre los datos renderizados y los datos calculados.
Según el objeto que controla estas propiedades, la cámara usada por la session se puede dividir en dos tipos: cámaras controladas por la session y cámaras no controladas por la session.
Cámaras controladas por la session
Si la session camera no pertenece a ningún sistema externo, como un headset o AR Foundation, la session controla automáticamente las propiedades anteriores de la cámara para asegurar que esté correctamente alineada con el mundo real.
transform
El transform de la cámara (posición y orientación) se ajusta por session según el estado de ejecución de la función AR. En general, session actualiza la posición y orientación de la cámara en función de motion tracking y/o tracking target para asegurar que el contenido visto por el usuario coincida con el mundo real.
En Unity, el punto de referencia central para todo el tracking AR se llama session origin, y la regla que determina este origin durante la ejecución de session se llama center mode. El transform de la cámara se comporta de forma diferente en distintos center mode:
En el center mode
<xref:u:easyar.ARSession.ARCenterMode.Camera>, la cámara puede moverse libremente.En general, el mode
<xref:u:easyar.ARSession.ARCenterMode.Camera>rara vez se usa en las aplicaciones.En otros center mode, como
<xref:u:easyar.ARSession.ARCenterMode.FirstTarget>, la cámara no puede moverse libremente.<xref:u:easyar.ARSession.ARCenterMode.FirstTarget>es el modo utilizado por la mayoría de las aplicaciones AR.
Advertencia
El valor de scale del transform de la cámara siempre debe permanecer en (1, 1, 1). Modificar la scale de la cámara puede provocar comportamientos inesperados.
Projection matrix
La projection matrix de la cámara se actualiza en cada frame por session según las intrinsics de la cámara física para asegurar que el contenido virtual se superponga correctamente sobre la escena real.
Ajustes de culling
Los ajustes de culling de la cámara (<xref:UnityEngine.GL.invertCulling?displayProperty=nameWithType>) se ajustan según la configuración mirror de session para asegurar que el contenido virtual se renderice correctamente en la escena real.
Cuando la configuración correspondiente a la cámara actual en <xref:u:easyar.ARSession.HorizontalFlip> es <xref:u:easyar.ARSession.ARHorizontalFlipMode.World>, <xref:UnityEngine.GL.invertCulling?displayProperty=nameWithType> se establece en true. Esta es la configuración predeterminada para la cámara frontal.
Flujo de video de fondo AR
En escenas AR, la cámara normalmente renderiza el flujo de video de la cámara física como fondo para aumentar la inmersión. Session maneja automáticamente la obtención y el renderizado del flujo de video, y asegura que el flujo esté correctamente alineado con el contenido virtual.
Cámaras no controladas por la session
Cuando se usa un headset o AR Foundation, o cuando la implementación especifica <xref:u:easyar.FrameSource.IsCameraUnderControl> como false para <xref:u:easyar.FrameSource>, session no controla las propiedades de cámara anteriores. En su lugar, están controladas por el sistema externo.
Advertencia
Aunque session no controla las propiedades de la cámara en este caso, siguen estando controladas por un sistema de terceros como un SDK de headset o AR Foundation, por lo que modificar estas propiedades durante el desarrollo sigue sin estar soportado.
Consideraciones al copiar cámaras
A veces puede ser necesario copiar los parámetros de la session camera a otra cámara. En ese caso, preste especial atención a los dos puntos siguientes:
- Tiempo de obtención de propiedades: al usar una cámara controlada, consulte Obtener la salida de session para obtener estos parámetros en el momento correcto; al usar una cámara no controlada por session, consulte la documentación del sistema de terceros para obtenerlos en el momento correcto.
- El field of view (FOV), aspect ratio y projection matrix de la cámara: use
<xref:UnityEngine.Camera.projectionMatrix?displayProperty=nameWithType>para obtener la projection matrix de la cámara y copiarla a la otra cámara.<xref:UnityEngine.Camera.fieldOfView?displayProperty=nameWithType>y<xref:UnityEngine.Camera.aspect?displayProperty=nameWithType>forman matemáticamente parte de la projection matrix, por lo que usar solo<xref:UnityEngine.Camera.fieldOfView?displayProperty=nameWithType>y<xref:UnityEngine.Camera.aspect?displayProperty=nameWithType>no es suficiente.
Siguientes pasos
- Lea Configuración de la cámara para aprender a configurar la cámara para la mejor experiencia AR