Estabilización de hologramas: MRTK2

Rendimiento

Para que la plataforma y el dispositivo de realidad mixta subyacente generen los mejores resultados, es importante lograr velocidades de fotogramas. La velocidad de fotogramas de destino (por ejemplo: 60 FPS o 90 FPS) variará entre plataformas y dispositivos. Sin embargo, las aplicaciones de realidad mixta que cumplen la velocidad de fotogramas tendrán hologramas estables, así como seguimiento eficaz de la cabeza, seguimiento de manos y mucho más.

Seguimiento del entorno

La representación holográfica estable se basa en gran medida en el seguimiento de la posición principal por parte de la plataforma & dispositivo. Unity representará la escena cada fotograma de la posición de la cámara estimada y proporcionada por la plataforma subyacente. Si este seguimiento no sigue correctamente el movimiento real de la cabeza, los hologramas aparecerán visualmente inexactos. Esto es especialmente evidente y importante para dispositivos ar como HoloLens, donde los usuarios pueden relacionar hologramas virtuales con el mundo real. El rendimiento es significativo para el seguimiento de cabeza confiable, pero también puede haber otras características importantes. Los tipos de elementos de entorno que afectan a la experiencia del usuario dependerán de los detalles de la plataforma de destino.

Windows Mixed Reality

La plataforma Windows Mixed Reality proporciona material de referencia para estabilizar hologramas en la plataforma. Sin embargo, hay una serie de herramientas clave que los desarrolladores pueden usar para mejorar la experiencia visual de hologramas para los usuarios.

Uso compartido del búfer de profundidad

Los desarrolladores de Unity tienen la opción de compartir el búfer de profundidad de la aplicación con la plataforma. Esto proporciona información, donde existen hologramas para un marco actual, que la plataforma puede usar para estabilizar hologramas a través de un proceso asistido por hardware conocido como Late-Stage Reprojection.

Reproyecto en fase tardía

Al final de la representación de un fotograma, la plataforma de Windows Mixed Reality toma los destinos de representación de profundidad & color generados por la aplicación y transforma la salida final de la pantalla para tener en cuenta cualquier ligero movimiento de cabeza desde la última predicción de posición de cabeza. El bucle de juego de una aplicación tarda tiempo en ejecutarse. Por ejemplo, a 60 FPS, esto significa que la aplicación está tomando ~16,667 ms para representar un fotograma. Aunque esto parezca una cantidad de tiempo mínima, la posición y la orientación del usuario de su cabeza cambiarán, lo que dará lugar a nuevas matrices de proyección para la cámara en la representación. La reproyecto en fase tardía transforma los píxeles de la imagen final para tener en cuenta esta nueva perspectiva.

LSR por píxel frente al plano de estabilización

Según el punto de conexión del dispositivo y la versión del sistema operativo que se ejecuten en un dispositivo Windows Mixed Reality, el algoritmo de Late-Stage reproyecto se realizará por píxel o a través de un plano de estabilización.

Basado en profundidad por píxel

La reproyecto basada en profundidad por píxel implica el uso del búfer de profundidad para modificar la salida de la imagen por píxel y, por tanto, estabilizar los hologramas a varias distancias. Por ejemplo, una esfera de 1m de distancia puede estar delante de un pilar que está a 10 m de distancia. Los píxeles que representan la esfera tendrán una transformación diferente a los píxeles lejanos que representan el pilar si el usuario ha inclinado ligeramente la cabeza. La reproyecto por píxel tendrá en cuenta esta diferencia de distancia en cada píxel para una reproyecto más precisa.

Plano de estabilización

Si no es posible crear un búfer de profundidad preciso para compartir con la plataforma, otra forma de LSR utiliza un plano de estabilización. Todos los hologramas de una escena recibirán cierta estabilización, pero los hologramas que se muestran en el plano deseado recibirán la estabilización máxima del hardware. El punto y lo normal para el plano se pueden proporcionar a la plataforma a través de la API HolographicSettings.SetFocusPointForFrameproporcionada por Unity.

Formato de búfer de profundidad

Si el destino de HoloLens para el desarrollo es muy recomendable usar el formato de búfer de profundidad de 16 bits en comparación con 24 bits. Esto puede ahorrar enormemente en el rendimiento, aunque los valores de profundidad tendrán menos precisión. Para compensar la menor precisión y evitar la lucha z, se recomienda reducir el plano de recorte lejano del valor predeterminado de 1000 m establecido por Unity.

Nota

Si usa el formato de profundidad de 16 bits, los efectos necesarios del búfer de galería de símbolos 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 compartido de búferes de profundidad en Unity

Para usar LSR basado en profundidad, hay dos pasos importantes que deben seguir los desarrolladores.

  1. En Editar> los SDK de configuración delreproductor>de configuración del> proyectoXR>, habilite el uso compartido de búferes> de profundidad.
    1. Si el destino es HoloLens, también se recomienda seleccionar el formato de profundidad de 16 bits .
  2. Al representar el color en pantalla, la profundidad de representación también

GameObjects opaco en Unity generalmente escribirá en profundidad automáticamente. Sin embargo, los objetos de texto transparentes & generalmente no escribirán en profundidad de forma predeterminada. Si utiliza el sombreador estándar de MRTK o Text Mesh Pro, esto se puede solucionar fácilmente.

Nota

Para determinar rápidamente qué objetos de una escena no escriben en el búfer de profundidad visualmente, puede usar la utilidad Búfer de profundidad de representación en la configuración del editor en el perfil de configuración de MRTK.

Sombreador estándar de MRTK transparente

Para materiales transparentes mediante el sombreador MRTK Standard, seleccione el material para verlo en la ventana Inspector . A continuación, haga clic en el botón Corregir ahora para convertir el material para escribir en profundidad (es decir, Z-Write On).

Antes

Búfer de profundidad antes de corregir el sombreador estándar de MRTK

Después

Sombreador estándar mrTK fijo del búfer de profundidad

Text Mesh Pro

En Objetos Text Mesh Pro, seleccione el objeto GameObject TMP para verlo en el inspector. En el componente de material, cambie el sombreador del material asignado para usar el sombreador MRTK TextMeshPro.

Corrección del búfer de profundidad pro de malla de texto

Sombreador personalizado

Si escribe un sombreador personalizado, agregue la marca ZWrite a la parte superior de la definición de bloque Pass para configurar el sombreador para escribir en el búfer de profundidad.

Shader "Custom/MyShader"
{
    SubShader
    {
        Pass
        {
            ...
            ZWrite On
            ...
        }
    }
}
Respaldos opacos

Si los métodos anteriores no funcionan para un escenario determinado (es decir, mediante la interfaz de usuario de Unity), es posible que otro objeto escriba en el búfer de profundidad. Un ejemplo común es usar texto de interfaz de usuario de Unity en un panel flotante en una escena. Al hacer que el panel sea opaco o al menos escribir en profundidad, el texto & el panel será estabilizado por la plataforma, ya que sus valores z están tan cerca entre sí.

WorldAnchors (HoloLens)

Además de garantizar que se cumplen las configuraciones correctas para garantizar la estabilidad visual, es importante garantizar que los hologramas permanezcan estables en sus ubicaciones físicas correctas. Para informar a la plataforma en ubicaciones importantes en un espacio físico, los desarrolladores pueden aprovechar WorldAnchors en GameObjects que necesitan permanecer en un solo lugar. Un WorldAnchor es un componente agregado a un GameObject que toma el control absoluto sobre la transformación de ese objeto.

Los dispositivos como HoloLens examinan y aprenden constantemente sobre el entorno. Por lo tanto, a medida que HoloLens realiza el seguimiento del movimiento & posición en el espacio, sus estimaciones se actualizarán y se ajustará el sistema de coordenadas de Unity. Por ejemplo, si un GameObject se coloca a 1 m de la cámara al principio, ya que HoloLens realiza un seguimiento del entorno, puede darse cuenta del punto físico donde se encuentra gameObject en realidad está a 1,1 m de distancia. Esto provocaría el desfase de hologramas. La aplicación de un WorldAnchor a un GameObject permitirá que el delimitador controle la transformación del objeto para que el objeto permanezca en la ubicación física correcta (es decir, actualizar a 1,1m de distancia en lugar de 1 m en tiempo de ejecución). Para conservar WorldAnchors entre sesiones de aplicación, los desarrolladores pueden emplear WorldAnchorStore para guardar y cargar WorldAnchors.

Nota

Una vez que se ha agregado un componente WorldAnchor a un GameObject, no es posible modificar la transformación de GameObject (es decir, transform.position = x). Un desarrollador debe quitar WorldAnchor para editar la transformación.

WorldAnchor m_anchor;

public void AddAnchor()
{
    this.m_anchor = this.gameObject.AddComponent<WorldAnchor>();
}

public void RemoveAnchor()
{
    DestroyImmediate(m_anchor);
}

Si desea una alternativa a trabajar manualmente con Anchors, consulte las Herramientas de bloqueo mundial de Microsoft.

Consulta también