Cámara de Unity en escenas de realidad aumentada
La cámara en Unity es esencial para la representación de efectos de realidad aumentada. A continuación, aprenderá el papel de la cámara en escenas de realidad aumentada y cómo la sesión controla sus propiedades para garantizar una experiencia de realidad aumentada correcta.
Antes de comenzar
- Comprenda los conceptos básicos, componentes y flujo de trabajo de una sesión a través de Introducción a ARSession.
El papel de la cámara en escenas de realidad aumentada
En Unity, la cámara se utiliza para mostrar el mundo del juego a los jugadores, pero en escenas de realidad aumentada, su papel es aún más crucial. No solo se encarga de renderizar contenido virtual, sino que también debe alinearse con el mundo real para garantizar que los objetos virtuales se superpongan correctamente en la escena real.
Este video muestra una escena simple de realidad aumentada. A la izquierda está la vista
Scene, a la derecha la vistaGame. El video se grabó utilizando datos de simulación en el modoPlaydel editor de Unity. El contenido de la vistaGamees idéntico a lo que vería un usuario en el mundo real con su teléfono.Puede observarse que la cámara (representada por el icono de cámara) se mueve según el desplazamiento del usuario en el mundo real. El cono blanco muestra la trayectoria pasada de posición y orientación de la cámara. En la vista
Game, la cámara no solo muestra el contenido virtual de la vistaScene, sino que también superpone imágenes del mundo real bajo el contenido virtual. Esta es la forma típica de funcionamiento de la cámara en escenas de realidad aumentada.
Para garantizar que los objetos virtuales se superpongan correctamente en la escena real, algunas propiedades de la cámara deben ajustarse según el estado de ejecución de la realidad aumentada. Estas propiedades incluyen:
- El transform de la cámara (posición y orientación)
- El campo de visión (FOV), relación de aspecto (aspect-ratio) y matriz de proyección de la cámara
- La configuración de culling (GL.invertCulling)
Advertencia
Al desarrollar aplicaciones, modificar estas propiedades de la cámara de sesión no es compatible, ya que podría causar una alineación incorrecta entre el contenido virtual y el mundo real, afectando la experiencia del usuario. Incluso si se modifican estas propiedades mediante ciertos métodos, el sistema de realidad aumentada las sobrescribirá durante la ejecución, o comportamientos inesperados podrían ocurrir debido a inconsistencias entre los datos de renderizado y los datos de cálculo.
Según qué objeto controla estas propiedades, las cámaras utilizadas por la sesión se pueden clasificar en dos tipos: cámaras controladas por la sesión y cámaras no controladas por la sesión.
Cámaras controladas por la sesión
Si la cámara de la sesión no pertenece a ningún sistema externo, como un visor o AR Foundation, la sesión controlará automáticamente las propiedades mencionadas para garantizar que la cámara se alinee correctamente con el mundo real.
Transform
El transform (posición y orientación) de la cámara es ajustado por la sesión según el estado de funcionamiento de las funciones de realidad aumentada. Generalmente, la sesión actualiza la posición y orientación de la cámara basándose en datos de seguimiento de movimiento y/o datos de seguimiento del objetivo, asegurando que lo que ve el usuario coincida con el mundo real.
En Unity, el punto de referencia central para todo el seguimiento de realidad aumentada se denomina centro de sesión, y la regla que determina este centro durante la ejecución de la sesión se llama modo de centro. En diferentes modos de centro, el comportamiento del transform de la cámara varía:
En el modo de centro Camera, la cámara se puede mover libremente.
El modo Camera rara vez es utilizado por aplicaciones.
En otros modos de centro (como FirstTarget), la cámara no se puede mover libremente.
FirstTarget es el modo adoptado por la mayoría de aplicaciones de realidad aumentada.
Advertencia
El valor de escala del transform de la cámara siempre debe mantenerse en (1, 1, 1). Modificar la escala de la cámara podría causar comportamientos inesperados.
Matriz de proyección
La matriz de proyección de la cámara se actualiza cada fotograma según los parámetros intrínsecos de la cámara física, garantizando que el contenido virtual se superponga correctamente en la escena real.
Configuración de culling
La configuración de culling (GL.invertCulling) se ajusta según la configuración de espejo de la sesión, asegurando que el contenido virtual se renderice correctamente en la escena real.
Cuando la configuración de la cámara actual en HorizontalFlip corresponde a World, GL.invertCulling se establece en true. Esta es la configuración predeterminada para cámaras frontales.
Flujo de video de fondo de realidad aumentada
En escenas de realidad aumentada, la cámara generalmente renderiza el flujo de video de la cámara física como fondo para mejorar la inmersión del usuario. La sesión maneja automáticamente la obtención y renderización del flujo de video, garantizando su correcta alineación con el contenido virtual.
Cámaras no controladas por la sesión
Cuando se utilizan visores y AR Foundation, o cuando se implementa un FrameSource con IsCameraUnderControl establecido en false, la sesión no controla las propiedades mencionadas de la cámara. En su lugar, un sistema externo es responsable de controlarlas.
Advertencia
Aunque en este caso la sesión no controla las propiedades de la cámara, estas son controladas por sistemas de terceros (como SDK de visores o AR Foundation). Modificar estas propiedades durante el desarrollo de aplicaciones sigue sin ser compatible.
Consideraciones al copiar cámaras
A veces puede ser necesario copiar parámetros de la cámara de sesión a otra cámara. En estos casos, preste atención adicional a dos puntos:
- Momento de obtención de propiedades: Al usar cámaras controladas, consulte Obtener resultados de ejecución de sesión para obtener los parámetros en el momento correcto; al usar cámaras no controladas por la sesión, consulte la documentación del sistema de terceros para obtenerlos en el momento adecuado.
- Campo de visión (FOV), relación de aspecto (aspect-ratio) y matriz de proyección: Utilice Camera.projectionMatrix para obtener la matriz de proyección de la cámara y copiarla a otra cámara. Camera.fieldOfView y Camera.aspect son matemáticamente parte de la matriz de proyección, y usarlos no es suficiente.
Próximos pasos
- Lea Configuración de cámara para aprender a configurar la cámara y obtener la mejor experiencia de realidad aumentada