Continuamos nuestra exploración de las capacidades de Realidad Mixta del Meta Quest 3 usando Unreal Engine y el plugin MetaXR que comenzamos en una publicación de devlog anterior.
En esta publicación, miramos las posibilidades de usar Materiales Passthrough para mezclar dinámicamente el mundo virtual y real en Realidad Mixta. Usando tales materiales, podemos hacer un agujero en el mundo virtual, para que el mundo real se vuelva visible.
Stack Tecnológico
Para esta exploración, estamos usando el siguiente stack tecnológico:
Material Passthrough Simple
En su forma más simple, un Material Passthrough es un Material de Unreal Engine con las siguientes propiedades:
- Material Domain
Surface - Blend Mode
Translucent - Shading Model
Unlit - Write Only Alpha
true - Opacity entre
0.0(sin passthrough) y1.0(passthrough completo)
Cuando el material se aplica a una malla, la malla misma no será visible, excepto por el efecto de mezcla passthrough. Se puede ver en las imágenes a continuación, donde el Material Passthrough se ha aplicado a la parte circular de una malla amarilla.



El gráfico del material es muy simple, como se esperaba. Usamos un Material Parameter para la opacidad, por lo que puede personalizarse fácilmente en Material Instances.

Material Passthrough usando Vertex Color
Unreal Engine proporciona un cubo gris/amarillo por defecto que usa Vertex Color para determinar qué parte es el lado (gris), y qué parte es el borde (amarillo/negro).
¿Qué pasaría si quisiéramos hacer que los lados grises del cubo habiliten Passthrough en su lugar, mientras seguimos mostrando los bordes amarillos/negros del cubo?

Cuando aplicamos el Material Passthrough simple al cubo, el cubo completo habilitará passthrough, perdiendo todos los detalles sobre lados y bordes.

Entonces al menos necesitamos crear un Material Passthrough que use el nodo Vertex Color para determinar el valor de Opacity, para que podamos habilitar Passthrough para los lados y deshabilitarlo para el borde.
En el gráfico del material usamos un Material Parameter para seleccionar qué canal de color de vértice queremos usar (Rojo / Verde / Azul / Alpha), y otro Material Parameter para poder invertir el valor del color de vértice para producir la opacidad (por ejemplo, si queremos mostrar passthrough en todo excepto los lados).

Cuando asignamos este material al cubo, vemos que los lados habilitan Passthrough como se pretendía, pero aún no vemos los bordes amarillos/negros. Esto es porque un Material Passthrough solo afecta el canal alfa, básicamente decidiendo si mostrar la imagen Passthrough o lo que sea visible en el mundo virtual (en este caso, el escritorio de madera virtual).

Entonces si queremos combinar el material Passthrough (passthrough o no) con el material del cubo original (gris o amarillo), entonces podemos hacerlo usando la propiedad Overlay Material en la malla estática.
Materialse establece en el material del cuboOverlay Materialse establece en el material Passthrough
Básicamente el cubo ahora se renderiza dos veces, una vez con el material regular para renderizar gris o amarillo, y una vez con el material overlay para mostrar el mundo virtual o real.

Que es exactamente el efecto previsto que queríamos tener.
Material Passthrough Superpuesto con un Borde Dinámico
Como ejemplo con un poco más de interacción, hemos mejorado los proyectiles que pueden ser disparados con una pistola.
Cuando un proyectil golpea una malla generada (como una pared, techo o suelo), generará un plano cuadrado alineado con el punto de impacto, y se destruirá a sí mismo. Después de unos segundos, el plano se reducirá y finalmente desaparecerá.
La configuración del Material es similar al cubo de la sección anterior:
Materialse establece en el material del borde, que renderiza un borde azul/blanco fluido entre el mundo virtual y realOverlay Materialse establece en el material Passthrough, que habilita Passthrough en el interior del borde con un gradiente similar
El efecto final se puede ver en el video a continuación, donde podemos disparar múltiples proyectiles alrededor del mismo punto en la pared, componiendo un área con passthrough habilitado, rodeada por un borde azul.

Al hacer clic en el botón de reproducción, se incrustará el reproductor de YouTube y se pueden establecer cookies de terceros y recopilar datos de YouTube.
En el Blueprint del proyectil para generar el plano cuando golpea una superficie generada, el evento OnComponentHit proporciona toda la información que necesitamos para colocar y alinear correctamente el plano.

En el Blueprint del plano nos aseguramos de que después de un breve retraso se reproduzca una línea de tiempo para reducir el plano, después de lo cual se destruye completamente.

Para que la superposición de múltiples planos funcione correctamente, necesitamos cambiar el Blend Mode en el Material Passthrough de Translucent a AlphaHoldout. De esta manera, el alfa Passthrough de planos superpuestos se fusiona correctamente, en lugar de sobrescribir el alfa Passthrough para cada plano (lo que hace que los bordes azules sean visibles dentro de donde los planos se superponen, e incluso muestra partes del borde que normalmente serían completamente invisibles).


Los gráficos de material para los materiales passthrough y borde usan la misma Material Function que creamos para generar un borde circular con algo de animación para hacerlo más dinámico.



Conclusión
La Realidad Mixta es una forma emocionante de crear experiencias únicas que mezclan el mundo real y virtual. Los Materiales Passthrough hacen que la mezcla sea realmente dinámica, abriendo nuevas posibilidades para crear experiencias increíbles.
Nosotros en Immerstory estamos emocionados de apoyar a nuestros clientes con sus experiencias inmersivas, y esperamos compartir más progreso de exploración pronto.
¿Qué experiencia inmersiva te gustaría ver? ¡Déjanos saber!
Recursos Adicionales
La documentación para el plugin MetaXR, específicamente el Mixed Reality Utility Kit que se usó para esta demo, se puede encontrar aquí
Los efectos de sonido en la aplicación demo han sido amablemente obtenidos de Sonniss GameAudioGDC
