Estabilización de hologramas: MRTK2

Rendimiento

Para que la plataforma y el dispositivo subyacentes de realidad mixta 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, la velocidad de fotogramas de reunión de aplicaciones de realidad mixta tendrá hologramas estables, así como un seguimiento de cabeza eficaz, 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 del dispositivo de la plataforma & . 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 e 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 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 algún material de referencia para estabilizar hologramas en la plataforma. Aunque 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 fotograma 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 Windows Mixed Reality toma los destinos de representación de profundidad de 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 toma aproximadamente 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 la 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 reproyecto de Late-Stage 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 1 m de distancia puede estar delante de un pilar que está a 10m 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. El 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 encuentra en el plano deseado recibirán la estabilización máxima del hardware. El punto y el 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 el 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 menor precisión y evitar la lucha z, se recomienda reducir el plano de recorte lejano del valor predeterminado de 1000m 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 los desarrolladores deben seguir.

  1. En Editar>Project Configuración>Player>XR Configuración> Sdk de realidad virtual Habilitar el uso compartido de búferes> de profundidad
    1. Si el destino HoloLens, también se recomienda seleccionar el formato de profundidad de 16 bits.
  2. Al representar el color en pantalla, también se representa la profundidad

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 usa el sombreador estándar de MRTK o el Mesh Pro de texto, 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, se puede usar la utilidad Búfer de profundidad de representación en el editor Configuración 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 en profundidad (es decir, Z-Write On).

Antes del

Depth Buffer Before Fix MRTK Standard Shader

Después

Depth Buffer Fixed MRTK Standard Shader

Texto Mesh Pro

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

Text Mesh Pro Depth Buffer Fix

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 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 escribiendo en profundidad, el texto & que el panel va a estabilizar por la plataforma, ya que sus valores z están tan cerca entre sí.

WorldAnchors (HoloLens)

Además de garantizar que se cumplan 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. 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 están examinando y aprendiendo constantemente sobre el entorno. Por lo tanto, a medida que el HoloLens realiza un seguimiento de la posición del movimiento & 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 el HoloLens realiza un seguimiento del entorno, puede darse cuenta del punto físico donde se encuentra gameObject es realmente de 1,1 m de distancia. Esto provocaría el desfase del holograma. Aplicar 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, actualice 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 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 Microsoft World Locking Tools.

Consulta también