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.
- 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)
Video y fotos tomadas desde el Quest 2 con el apk (Link de descarga en la sección archivos adjuntos)
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