Compartir a través de


Estabilización del holograma: MRTK2

Rendimiento

Para que la plataforma y el dispositivo de realidad mixta subyacentes generen los mejores resultados, es importante lograr velocidades de fotogramas de rendimiento. 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 un 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 de la cabeza por parte de la plataforma & dispositivo. Unity representará la escena cada fotograma de la posición de la cámara estimado y proporcionado 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 e importante para los dispositivos de AR, como HoloLens, donde los usuarios pueden relacionar hologramas virtuales con el mundo real. El rendimiento es significativo para el seguimiento de la 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 algunas herramientas clave que los desarrolladores pueden usar para mejorar la experiencia visual del holograma 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 fotograma actual, que la plataforma puede usar para estabilizar los hologramas a través de un proceso asistido por hardware conocido como Late-Stage Reproyecto.

Reproyecto en fase tardía

Al final de la representación de un fotograma, la plataforma Windows Mixed Reality toma el color & destinos de representación de profundidad 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 tarda aproximadamente 16,667 ms en representar un fotograma. Aunque esto puede parecer una cantidad pequeña de tiempo, la posición y orientación de la cabeza del usuario cambiará, 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 a 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 Late-Stage Reprojection se realizará por píxel o a través de un plano de estabilización.

Basado en la profundidad por píxel

La reproyecto basada en la profundidad por píxel implica usar el 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 1 m 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 de 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 encuentran en el plano deseado recibirán la estabilización máxima del hardware. El punto y lo normal del plano se pueden proporcionar a la plataforma a través de la API HolographicSettings.SetFocusPointForFrameproporcionada por Unity.

Formato de búfer de profundidad

Si tiene como destino HoloLens para el desarrollo, se recomienda encarecidamente 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 precisión más baja y evitar la lucha z, se recomienda reducir el plano de clip 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, normalmente 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 del búfer de profundidad en Unity

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

  1. En EditProject Settings PlayerXR Settings Virtual Reality SDKs Enable Depth Buffer Sharing (Editar> configuración del >proyecto player>XR settings>Virtual Reality SDKs> enable Depth Buffer Sharing) (Habilitar el uso compartido del búfer de profundidad)
    1. Si tiene como destino HoloLens, se recomienda seleccionar también el formato de profundidad de 16 bits .
  2. Al representar el color en la pantalla, también se representa la profundidad.

Los GameObjects opacos de Unity suelen escribir en profundidad automáticamente. Sin embargo, los objetos de texto & transparentes generalmente no escribirán en profundidad de forma predeterminada. Si usa mrtk Standard sombreador o Text Mesh Pro, esto se puede corregir fácilmente.

Nota:

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

Sombreador de Standard de MRTK transparente

En el caso de los materiales transparentes que usan el sombreador de Standard MRTK, 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, escribir en Z).

Antes

Búfer de profundidad antes de corregir el sombreador de Standard MRTK

Después

Sombreador de Standard mrtk corregido del búfer de profundidad

Text Mesh Pro

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

Corrección del búfer de profundidad de Text Mesh Pro

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 que escriba 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 el uso del texto de la interfaz de usuario de Unity en un panel flotante de una escena. Al hacer que el panel sea opaco o al menos escribir en profundidad, la plataforma estabilizará el texto & el panel, 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 de ubicaciones importantes en un espacio físico, los desarrolladores pueden aprovechar WorldAnchors en GameObjects que necesitan permanecer en un solo lugar. WorldAnchor es un componente agregado a un GameObject que toma el control absoluto sobre la transformación de ese objeto.

Dispositivos como HoloLens examinan y aprenden constantemente sobre el entorno. Por lo tanto, a medida que HoloLens realiza un seguimiento del movimiento & posición en el espacio, se actualizarán sus estimaciones 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 de que el punto físico donde se encuentra GameObject está realmente a 1,1 m de distancia. Esto provocaría el desfase del holograma. Aplicar un WorldAnchor a un GameObject permitirá al delimitador controlar la transformación del objeto para que el objeto permanezca en la ubicación física correcta (es decir, actualice a 1,1 m de distancia en lugar de 1 m en tiempo de ejecución). Para conservar WorldAnchors entre sesiones de aplicaciones, 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 para trabajar manualmente con Anchors, consulte Herramientas de bloqueo de Microsoft World.

Vea también