Saltar al contenido principal

Descripción General

El uso de este plugin ayuda a tener mejores reflejos en Unity en proyectos AR y VR. Ya que los reflejos generados con los reflection probes no son siempre fieles a la realidad en cuanto a escala, incluso con el checkbox de Box projection activado.  Ejemplos de reflejos por default:

Guía de trabajo

Descarga e instalación

Instala al plugin desde la cuenta de developer URP Mirror Shaders / AR-VR Ready | VFX Shaders | Unity Asset Store  , una vez importado, coloca el folder "AkilliMum" en la carpeta "Downloads" del proyecto. Este plugin solo es compatible con URP

Configuración rápida:

Nota (Los espejos se veran negros o blancos, los reflejos solo se ven en la ventana game)

1.En la escena selecciona la cámara, en el inspector,  da clic en add component y selecciona el script   Mirror manager . En este script Configura Platform como  VR .

2.Selecciona tu objeto que será el espejo y cambia el shader del material  a Shaders Graphs/ AMMirrorTwoEyes.(para VR funciona con dos cámaras) Los objetos que van en la misma direccion(como los espejos en la misma pared de un baño ) pueden compartir el mismo material.

3.Regresa al Mirror Manager en al cámara,  Hay que adjuntar  el objeto espejo. En la sección "Reflective Objects "  da clic en la opción + y arrastra el objeto(s) a la lista.   Puedes agregar todos los objetos que se encuentran mirando a la misma dirección. Esto ayudará a que el calculo se haga una sola vez.

  1. Para objetos que tienen una dirección diferente entre sí, tienes que crear otro Mirror manager.

5 Clic en Apply changes, da clic en este botón para ver los cambios reflejados.

Atributos importantes

Name : Puedes nombrar los espejos para identificarlos fácilmente y tener una mejor organización.

Turn off Occlusion - SI hay gitches en los reflejos de objetos que no se dibujan.

Platform Type : VR, AR   o Standalone para aplicaciones no vr Reflective Objetcs : Si tienes espejos que miran en la mis dirección puedes agregarlos en un solo Mirror manager, el proceso de los reflejos se hará una vez y ahorrará recursos.

Working Type - usa Reflect , Transparent es para AR y mixed

UP vector - Esta es muy importante para que funcione bien  el espejo,  tienes que asegurarte que la dirección  concuerde con el eje que quieres  renderizar , si tus ejes están en global no podrás ver el eje real del objeto, tiene que estar en local, este espejo esta configurado en el eje azul Z negativo.

Seccion Cámara  (esto se aplica a los reflejos )

HDR - Esto es para lograr un look mas realista con un poco mas de exposición , evaluar su uso con pruebas.

MSAA -( Multisample antialiasing)  Úsalo solo si vez vibración en los reflejos , en x4  (esto afecta al performance)

Antialiasing Mode : al igual que el anterior , de ser necesario utilizar el FXAA

Disable Pixel Lights : Desactiva el renderizado para las luces adicionales y eso ayuda al performance

Shadow : activa el renderizado de sombras . Hay que mantenerlo apagado

Render Texture Size : Aquí ajustas la calidad del reflejo, es recomendable dejarlo en Full para que no se vea pixelado y sea un espejo perfecto. Habrá caso donde talvez no se vea tan cerca el espejo y puedes bajar el tamaño.

LOD Level -  Si tienes LODs puedes configurar a partir de que numero se empieza a renderizar.

Reflect layers - Puedes reflejar ciertas layers.

Shader complex - Crear reflejos y charcos de agua

Se siguen los mismo pasos que en el caso anterior, solo que aquí se usa el Shader Complex, esta hecho tomando como base el shader Lit, por lo que puedes configurar un piso como lo harías normalmente y añadir un mascara  para simular  charcos. El shader es compatible con VR/AR  y standalone apps.

Locally Correction - Corrige  las reflection probes en el shader.

Reflection intensity - Mas intensidad mas reflejos , 1= mirror 0= no reflejos

Reflection . Disable GI .  Aveces aunque la intensidad de los reflejos esten en 1  no se ve bien el espejo, puedes activar esta opcion para corregirlo.

Reflection - Refraction Map : Puedes crear un efecto de refraction para imitar hielo por ejemplo, usando un mapa de normal, para usarlo debe haber un mapa de normal en el normal map de surface inputs.Se puede configurar la intensidad de la refraction

Relfection - Depth - Puedes crear profundidad del reflejo en la superficie . Depth también debe estar activado en el script Mirror Manager.

Alpha mask Map - Usa este mapa para crear charcos por medio de una mascara. Puedes controlar el Cut-off

Reflection -> Alpha Mask Map -> Edge Darkness: oscurece los edges de los charcos, puede servir en charcos sobre tierra.

Reflection -> Alpha Mask Map -> Tiling - Solo sirve en X y Y .

Glass Mat

Piso con reflejos con deph blur

Depth en los reflejos (debe estar activado en el mirror manager)

Mip level

Reflejos con Refraction

Wave y ripples

**En la carpeta samples hay escenas con estos ejemplos.

En el siguiente video se hace una comparación solo con el skybox nomal y con un skybox falso, los reflejos ya no se escalan ni se ven raros. También se puede ver los reflejos por default y los reflejos con el shader. Y como se distorsionan/se ven negros/se ve el skybox si se renderiza un reflejo con shader especial.  (Se uso el shader Shaders Graphs/ AMMirrorTwoEyes)

https://www.youtube.com/shorts/PlFfI1cb-Dc

Observaciones:

  • Se hace una comparación con el shader  AMMirrorTwoEyes, Complex  y shader Lit
  • Los reflejos  con el shader lit (metallic y smoothness al 100%) tienen errores de escala y rotación
  • Los espejos con el shader complex y  AMMirrorTwoEyes reflejan los espejos con el shader Lit pero sigue siendo evidente el error de escala
  • No funciona el reflejo entre espejos con el shader especial, (en VR) tanto en  espejos como el piso de charcos y el cristal con el logo de Unity.
  • Si se reflejan las partículas
  • Todos  los espejos a excepción de las que están colocadas  cerca en L , en la pared y el piso  tiene activado el MSAA en X4.

Consideraciones

En esta sección debes colocar las consideraciones a tomar en cuenta para la correcta implementación de la guía.

Compatibilidad con dispositivos:

Rift, Rift-S->Single Pass Instanced mode only

Quest, Quest2 standalone->Multi View mode only

Quest, Quest2 with Oculus-Link->Single Pass Instance mode only

Tested on XR-Plugin->Oculus Provider

Tested on XR-Plugin->OpenXR Provider-Oculus Runtime

Si en  VR No puede dibujar skyboxes, se tienen se hacer skybox falsos, el shader ya se incluye en el package. tutorial aquí.

En VR no funciona recursivamente -  reflejo del espejo en espejo.

URP feature SSAO (ambient occlusion )  rompe los reflejos, asegúrate de apagarlo desde el renderable asset de URP settings

Reflection probes mixed with mirror - Asegúrate de desactivar la propiedad Reflection probes en el mesh que uses como espejo para evitar que el relfection probe se mezcle con al textura del espejo.

En algunos casos los sistemas de partículas no visibles : Crea un nuevo material con el shader URP - particles - Unlit  con la configuración Both en la propiedad Render Face.

Los elementos de la UI no se renderizan en los reflejos, parece ser  un bug con el URP

Se puede tener reflejos en tiempo real ,via script  (hay que actualizar constantemente la aplicación de los cambios)  - esto afecta le performance

(Comentarios de programación)

Múltiples reflejos:  - Se debe crear un material diferente para cada reflejo, es decir "Todos los reflejos cuya orientación sea distinta deberán tener un material distinto ente ellos"  - Es decir un reflejo con una rotación de ( 0 , 90 , -90 ) necesita un material diferente al de uno con una rotación de ( 0 , 0 , 90)

Uso de la cámara en plataformas diferentes:  -  Los reflejos deben ser asociados a un objeto Cámara, la cual tendrá que tener seleccionada un tipo de plataforma (VR, AR, Standalone, etc.)  -  Se notó que en el caso de tener Múltiples plataformas activas (Ej. Standalone + VR) los reflejos solo se acoplarán a una única cámara, no a ambas, es decir que aún generando "Reflejos/Espejos" distintos asociados a una cámara diferente, estos no se notarán si ya existe una cámara con una plataforma diferente seleccionada.  - Por ende en estos casos se concluyó que solo un conjunto de cámaras pueden hacer uso de este Asset siempre y cuando estas tengan seleccionado el mismo tipo de plataforma.

Enlaces de descarga

Los enlaces de descarga ya sean plugins o Assets.

YouTube: https://www.youtube.com/@akillimum Asset Store: https://assetstore.unity.com/packages/vfx/shaders/urp-mirror-shaders-ar-vr-ready-135215

Archivos Adjuntos

Documentación del creador: https://docs.google.com/document/d/1dv7F1IYzoxZllZWAqFF4cY6sp4VN3BADZES8oAlOJdE/edit

APK del proyecto usado para esta investigación  (puedes usar Side Quest para instalarlo)  https://drive.google.com/drive/folders/1p5KUWdCM9Lh823SZIfsQPExykyZPSNZR?usp=drive_link

Comentarios

Comentarios generales o extras de la investigación.

Sería de utilidad realizar una investigación más profunda sobre la manera de "Resolver" el caso de el uso de la cámara en plataformas diferentes.

Ventajas

Comentarios generales o extras de la investigación.

(Arte 3D)

Puedes elegir entre los shaders AMMirrorTwoEyes o complex dependiendo de los reflejos que quieras lograr. Ademas son muy intuitivos de usar y ofrece varias opciones.

La documentación del creador es bastante completa. (Unity / Programación) El uso básico es prácticamente "Drag & Drop" y es muy sencillo de utilizar, siempre y cuando los casos de uso sean así de simples.

Desventajas

(Arte 3D)

Hay que tener cuidado con colocar muchos espejos que se reflejen entre sí ya que en VR no funciona bien. (Unity / Programación) En la escena, específicamente en los objetos que tienen los scripts asociados, al trabajarse con muchos materiales o muchos reflejos distintos, los objetos pueden llegar a acumular una gran cantidad de componentes (scipts) en el Inspector. Sin embargo la funcionalidad es impecable.

Elaboró

(Unity / Programación) Joshua Adair Soto Guerra

(Arte 3D) Diana Delfino