Estabilización de holograma: 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 un seguimiento eficaz de la cabeza, el 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 la plataforma y el 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 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 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. Aunque hay una serie de 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 marco actual, que la plataforma puede utilizar para estabilizar hologramas a través de un proceso asistido por hardware conocido como Reprojection de fase tardía.
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 color y profundidad generados por la aplicación y transforma la salida final de la pantalla para tener en cuenta cualquier movimiento leve de la cabeza desde la última predicción de la posición principal. El bucle de juego de una aplicación tarda tiempo en ejecutarse. Por ejemplo, en 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 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 de Windows Mixed Reality, el algoritmo de reproyecto en fase tardía se realizará por píxel o a través de un plano de estabilización.
Basado en profundidad por píxel
El reproyecto basado 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 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 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 de hardware. El punto y el normal para el plano se pueden proporcionar a la plataforma a través de la API HolographicSettings.SetFocusPointForFrame proporcionada por Unity.
Formato de búfer de profundidad
Si el destino es HoloLens para el desarrollo, se recomienda 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.
- En Editar configuración del proyecto Player XR Settings Virtual Reality SDKs> Enable Depth Buffer Sharing (Editar>configuración del reproductor>de configuración>del proyecto XR)>Los SDK de realidad virtual habilitan el uso compartido del búfer de profundidad
- Si el destino es HoloLens, también se recomienda seleccionar el formato de profundidad de 16 bits.
- 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 transparentes y de texto generalmente no escribirán en profundidad de forma predeterminada. Si usa el sombreador estándar 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 ESTÁNDAR de 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 en profundidad (es decir, Z-Write On).
Antes
Después
Text Mesh Pro
En Text Mesh Pro objects (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 MRTK TextMeshPro.
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 de una escena. Al hacer que el panel sea opaco o al menos escribir en profundidad, el texto y el panel serán estabilizados 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 asegurarse de que los hologramas permanecen 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.
Los dispositivos como HoloLens examinan y aprenden constantemente sobre el entorno. Por lo tanto, a medida que HoloLens realiza el seguimiento del movimiento y la posición en el espacio, sus estimaciones se actualizarán y el sistema de coordenadas de Unity se ajustará. 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 es realmente de 1,1 m de distancia. Esto provocaría el desfase del holograma. La aplicación de un WorldAnchor a un Objeto 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 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.