Cuando usas un casco de realidad mixta, se convierte en el centro de tu mundo holográfico. El componente De cámara unity controlará automáticamente la representación estereoscópica y seguirá el movimiento y la rotación de la cabeza. Sin embargo, para optimizar completamente la calidad visual y la estabilidad del holograma, debe establecer la configuración de la cámara que se describe a continuación.
Cascos envolventes de HoloLens frente a VR
La configuración predeterminada en el componente de cámara de Unity es para las aplicaciones 3D tradicionales, que necesitan un fondo similar a skybox, ya que no tienen un mundo real.
Cuando se ejecuta en un casco envolvente, se representa todo lo que ve el usuario, por lo que es probable que quiera mantener el skybox.
Sin embargo, cuando se ejecuta en un casco holográfico como HoloLens, el mundo real debería aparecer detrás de todo lo que representa la cámara. Establezca el fondo de la cámara para que sea transparente (en HoloLens, el negro se representa como transparente) en lugar de una textura de Skybox:
Seleccione la cámara principal en el panel Jerarquía.
En el panel Inspector, busque el componente Cámara y cambie la lista desplegable Borrar marcas de Skybox a Color sólido.
Seleccione el selector color de fondo y cambie los valores RGBA a (0, 0, 0, 0, 0)
Si establece esto desde el código, puede usar unity. Color.clear
MRTK controlará automáticamente la configuración de la cámara específica, en función de la configuración del perfil del sistema de cámara.
Espacio de nombres:Microsoft.MixedReality.Toolkit.CameraSystem Tipo:MixedRealityCameraSystem
Para comprobar la opacidad de la cámara, el sistema MixedRealityCamera tiene una IsOpaque propiedad .
CoreServices.CameraSystem.IsOpaque;
Espacio de nombres:UnityEngine.XR Tipo:XRDisplaySubsystem
Puede usar código de script para determinar en tiempo de ejecución si el casco está envolvente o holográfico comprobando displayOpaque en el XRDisplaySubsystem que se ejecuta activamente.
Espacio de nombres:UnityEngine.XR.WSA Tipo:HolographicSettings
Puede usar código de script para determinar en tiempo de ejecución si el casco está envolvente o holográfico comprobando HolographicSettings.IsDisplayOpaque.
Configuración de la cámara
Sea cual sea el tipo de experiencia que esté desarrollando, la cámara principal es siempre el componente principal de representación estéreo conectado a la pantalla montada en la cabeza del dispositivo. Será más fácil diseñar la aplicación si imaginas la posición inicial del usuario como (X: 0, Y: 0, Z: 0). Puesto que la cámara principal está realizando un seguimiento del movimiento de la cabeza del usuario, se puede establecer la posición inicial del usuario estableciendo la posición inicial de la cámara principal.
La elección central que debes hacer es si estás desarrollando para cascos envolventes de HoloLens o VR. Una vez que lo tenga, vaya a la sección de configuración que se aplique.
Configuración de la cámara de HoloLens
En el caso de las aplicaciones de HoloLens, debe usar anclajes para los objetos que quiera bloquear en el entorno de la escena. Se recomienda usar espacio sin enlazar para maximizar la estabilidad y crear anclajes en varias salas.
Siga este tutorial paso a paso para agregar y configurar automáticamente Mixed Reality Toolkit en el proyecto de Unity. También es posible trabajar directamente con la clase MixedRealityPlayspace de MRTK para Unity y establecer la escala de destino en Mundo:
MRTK debe controlar la posición del espacio de reproducción y la cámara automáticamente, pero es bueno comprobar lo siguiente:
En el panel Jerarquía, expanda mixedRealityPlayspace GameObject y busque el objeto secundario Cámara principal.
En el panel Inspector , busque el componente Transformar y cambie la posición a (X: 0, Y: 0, Z: 0)
Puesto que el objeto Main Camera se etiqueta automáticamente como la cámara, Unity potencia todo el movimiento y la traducción.
Nota:
Esta configuración debe aplicarse a la cámara en cada escena de la aplicación.
De forma predeterminada, al crear una nueva escena en Unity, contendrá un GameObject de cámara principal en la jerarquía que incluye el componente Cámara, pero puede que no se aplique correctamente la configuración.
Configuración de la cámara VR
Windows Mixed Reality admite aplicaciones en una amplia gama de escalas de experiencia, desde aplicaciones de solo orientación y de escalado vertical a través de aplicaciones a escala de salas. En HoloLens, puede ir más allá y crear aplicaciones a escala mundial que permitan a los usuarios caminar más allá de 5 metros, explorando todo un piso de un edificio y más allá.
El primer paso para crear una experiencia de realidad mixta en Unity es determinar qué escala de experiencia tendrá como destino la aplicación:
Si va a compilar para HL2, se recomienda crear una experiencia de nivel de ojo o considerar el uso de Scene Understanding para razonar sobre el piso de la escena.
Puesto que el objeto Main Camera se etiqueta automáticamente como la cámara, Unity potencia todo el movimiento y la traducción.
Nota:
Esta configuración debe aplicarse a la cámara en cada escena de la aplicación.
De forma predeterminada, al crear una nueva escena en Unity, contendrá un GameObject de cámara principal en la jerarquía que incluye el componente Cámara, pero no tiene la configuración siguiente aplicada correctamente.
Espacio de nombres:UnityEngine.XR Tipo:XRDevice
Para una experiencia de escala permanente o de escala de sala, deberá colocar el contenido en relación con el piso. El motivo es que el piso del usuario use la fase espacial, que representa el origen definido del nivel de piso del usuario y el límite opcional de la sala, configurado durante la primera ejecución.
Para asegurarse de que Unity funciona con su sistema de coordenadas del mundo en el nivel de planta, puede establecer y probar que Unity usa el tipo de espacio de seguimiento RoomScale:
if (XRDevice.SetTrackingSpaceType(TrackingSpaceType.RoomScale))
{
// RoomScale mode was set successfully. App can now assume that y=0 in Unity world coordinate represents the floor.
}
else
{
// RoomScale mode was not set successfully. App cannot make assumptions about where the floor plane is.
}
Si SetTrackingSpaceType devuelve true, Unity ha cambiado correctamente su sistema de coordenadas del mundo para realizar un seguimiento del marco de fase de referencia.
Si SetTrackingSpaceType devuelve false, Unity no pudo cambiar al marco de referencia de fase, probablemente porque el usuario no ha configurado un piso en su entorno. Aunque un valor devuelto falso no es habitual, puede ocurrir si la fase está configurada en otra sala y el dispositivo se mueve a la sala actual sin que el usuario configure una nueva fase.
Una vez que la aplicación establece correctamente el tipo de espacio de seguimiento RoomScale, el contenido colocado en el plano y=0 aparecerá en el suelo. El origen en 0, 0, 0 será el lugar específico en el piso donde el usuario estaba durante la instalación de la sala, con -Z que representa la dirección hacia delante que estaban orientadas durante la instalación.
Puesto que el objeto Main Camera se etiqueta automáticamente como la cámara, Unity potencia todo el movimiento y la traducción.
Nota:
Esta configuración debe aplicarse a la cámara en cada escena de la aplicación.
De forma predeterminada, al crear una nueva escena en Unity, contendrá un GameObject de cámara principal en la jerarquía que incluye el componente Cámara, pero no tiene la configuración siguiente aplicada correctamente.
Espacio de nombres:UnityEngine.XR Tipo:XRDevice
Para crear una experiencia de solo orientación o de escalado sentado, debe establecer Unity en el tipo de espacio de seguimiento estacionario. El espacio de seguimiento estacionario establece el sistema de coordenadas del mundo de Unity para realizar un seguimiento del marco fijo de referencia. En el modo de seguimiento estacionario, el contenido colocado en el editor justo delante de la ubicación predeterminada de la cámara (adelante es -Z) aparecerá delante del usuario cuando se inicie la aplicación.
Espacio de nombres:UnityEngine.XR Tipo:InputTracking
Para una experiencia de solo orientación pura, como un visor de vídeo de 360 grados (donde las actualizaciones de la cabeza posicional arruinarían la ilusión), puede establecer XR. InputTracking.disablePositionalTracking en true:
InputTracking.disablePositionalTracking = true;
Para obtener una experiencia de escalado sentado, para permitir que el usuario más adelante haga más reciente el origen sentado, puede llamar a la XR. Método InputTracking.Recenter :
InputTracking.Recenter();
Si va a crear una experiencia de escalado sentado, puede obtener el origen mundial de Unity más reciente en la posición principal actual del usuario llamando a la XR. Método InputTracking.Recenter .
Configuración del fondo de la cámara
Si usa MRTK, el fondo de la cámara se configura y administra automáticamente. En el caso de los proyectos del SDK de XR o WSA heredado, se recomienda establecer el fondo de la cámara en negro sólido en HoloLens y mantener el skybox para VR.
Uso de varias cámaras
Cuando hay varios componentes de cámara en la escena, Unity sabe qué cámara usar para la representación estereoscópica en función de la cual GameObject tiene la etiqueta MainCamera. En XR heredado, también usa esta etiqueta para sincronizar el seguimiento de la cabeza. En el SDK de XR, el seguimiento de la cabeza se controla mediante un script TrackedPoseDriver asociado a la cámara.
Uso compartido de búferes de profundidad
Compartir el búfer de profundidad de la aplicación en Windows cada fotograma proporcionará a la aplicación uno de los dos aumentos en la estabilidad del holograma, en función del tipo de casco para el que se representa:
Los cascos envolventes de VR pueden ocuparse de la reprotección posicional cuando se proporciona un búfer de profundidad, ajustando los hologramas para evitar errores de posición y orientación.
Los cascos holoLens tienen algunos métodos diferentes. HoloLens 1 seleccionará automáticamente un punto de enfoque cuando se proporcione un búfer de profundidad, optimizando la estabilidad del holograma a lo largo del plano que interseca el contenido más. HoloLens 2 estabilizará el contenido mediante LSR de profundidad (consulte comentarios).
El cuadro de diálogo de configuración de MRTK intentará establecer la configuración del búfer de profundidad para el SDK de XR y WSA heredado, pero es bueno comprobar esas pestañas y comprobar la configuración en Unity.
Para establecer si la aplicación de Unity proporcionará un búfer de profundidad a Windows:
Vaya a Edit Project Settings XR Plug-in Management (Editar>configuración>del proyecto XR Plug-in Management) y asegúrese de que el elemento de menú está expandido.
Haga clic en el elemento de menú correspondiente al entorno de ejecución de XR que ha elegido, ya sea Windows Mixed Reality o OpenXR. Además, asegúrese de que está seleccionada la plataforma de compilación correcta, ya que las pestañas de Windows Standalone y Plataforma universal de Windows están disponibles.
Para habilitar y configurar:
En OpenXR, seleccione un formato de profundidad o "Ninguno" en la lista desplegable Modo de envío de profundidad.
Para Windows Mixed Reality, active o desactive la casilla Búfer de profundidad compartida. A continuación, seleccione un formato en la lista desplegable Formato de búfer de profundidad.
Nota:
Por lo general, se recomienda usar búferes de profundidad de 16 bits para mejorar el rendimiento. Sin embargo, si usa formato de profundidad de 16 bits, los efectos necesarios del búfer de galería de símbolos (como algunos paneles de desplazamiento de la interfaz de usuario de Unity) no funcionarán porque Unity no crea un búfer de galería de símbolos en esta configuración. Al seleccionar el formato de profundidad de 24 bits, por el contrario, se creará un búfer de galería de símbolos de 8 bits si procede en la plataforma de gráficos de punto de conexión.
Para establecer si la aplicación de Unity proporcionará un búfer de profundidad a Windows:
Vaya a Editar>reproductor> de configuración del>proyecto Plataforma universal de Windows pestaña>XR Settings (Configuración de XR).
Expanda el elemento SDK de Windows Mixed Reality.
Active o desactive la casilla Habilitar uso compartido del búfer de profundidad. Habilitar el uso compartido del búfer de profundidad se comprueba de forma predeterminada en los nuevos proyectos, pero es posible que se haya desmarcado de forma predeterminada en proyectos anteriores.
Un búfer de profundidad puede mejorar la calidad visual siempre que Windows pueda asignar con precisión los valores normalizados de profundidad por píxel en el búfer de profundidad a distancias en metros, usando los planos cercanos y lejanos que ha establecido en Unity en la cámara principal. Si la representación pasa valores de profundidad de maneras típicas, normalmente debería estar bien aquí, aunque la representación translúcida pasa esa escritura en el búfer de profundidad mientras se muestra a píxeles de color existentes puede confundir la reproyecto. Si sabe que los pases de representación dejarán muchos de los píxeles de profundidad finales con valores de profundidad inexactos, es probable que obtenga una mejor calidad visual desactivando "Habilitar el uso compartido del búfer de profundidad".
Nota:
Por lo general, se recomienda usar búferes de profundidad de 16 bits para mejorar el rendimiento. Sin embargo, si usa formato de profundidad de 16 bits, los efectos necesarios del búfer de galería de símbolos (como algunos paneles de desplazamiento de la interfaz de usuario de Unity) no funcionarán porque Unity no crea un búfer de galería de símbolos en esta configuración. Al seleccionar el formato de profundidad de 24 bits, por el contrario, se creará un búfer de galería de símbolos de 8 bits si procede en la plataforma de gráficos de punto de conexión.
Uso de planos de recorte
La representación del contenido demasiado cerca del usuario puede resultar incómodo en la realidad mixta. Puedes ajustar los planos clip cercanos y lejanos en el componente Cámara.
Seleccione la cámara principal en el panel Jerarquía .
En el panel Inspector, busque el componente Cámara Clipping Planos y cambie el cuadro de texto Near (Cerca) de 0.3 a 0.85. El contenido representado más cerca puede provocar molestias del usuario y debe evitarse según las directrices de distancia de representación.
MRTK proporciona un sistema de teletransporte integrado que funciona automáticamente entre manos y controladores articulados.
Se recomienda usar la implementación de teletransportación de MRTK.
Si decide no usar MRTK, Unity proporciona una implementación de teletransportación en XR Interaction Toolkit.
Si decide implementar su propio, es bueno tener en cuenta que no se puede mover la cámara directamente. Debido al control de Unity de la cámara para el seguimiento de la cabeza, deberá proporcionar a la cámara un elemento primario en la jerarquía y mover ese GameObject en su lugar. Este es el equivalente del espacio de reproducción de MRTK.
Se recomienda usar la implementación de teletransportación de MRTK.
Si decide implementar su propio, es bueno tener en cuenta que no se puede mover la cámara directamente. Debido al control de Unity de la cámara para el seguimiento de la cabeza, deberá proporcionar a la cámara un elemento primario en la jerarquía y mover ese GameObject en su lugar. Este es el equivalente del espacio de reproducción de MRTK.
Modos de reproyecto
Tanto HoloLens como cascos envolventes volverán a crear cada fotograma que tu aplicación represente para ajustar cualquier falta de preparación de la posición real de la cabeza del usuario cuando se emiten fotones.
De manera predeterminada:
Los cascos envolventes de VR se encargarán de la reproyecto posicional si la aplicación proporciona un búfer de profundidad para un fotograma determinado. Los cascos envolventes también ajustarán los hologramas para evitar errores de posición y orientación. Si no se proporciona un búfer de profundidad, el sistema solo corregirá errores en la orientación.
Los cascos holográficos como HoloLens 2 se encargarán de la reproyecto posicional si la aplicación proporciona su búfer de profundidad o no. La reproyecto posicional es posible sin búferes de profundidad en HoloLens, ya que la representación suele estar dispersa con un fondo estable proporcionado por el mundo real.
Por ejemplo, si va a crear una experiencia de solo orientación con contenido rígido bloqueado por el cuerpo (por ejemplo, contenido de vídeo de 360 grados), puede establecer explícitamente el modo de reproyecto en orientación solo estableciendo en ReprojectionMode.OrientationOnly.
Por ejemplo, si va a crear una experiencia de solo orientación con contenido rígido bloqueado por el cuerpo (por ejemplo, contenido de vídeo de 360 grados), puede establecer explícitamente el modo de reproyecto en orientación solo estableciendolo en HolographicReprojectionMode.OrientationOnly.
Siguiente punto de control de desarrollo
Si sigue el recorrido de desarrollo de Unity que hemos diseñado, está en medio de la exploración de los bloques de creación principales de MRTK. Desde aquí, puede continuar con el siguiente bloque de compilación: