Creado por DevDrache
Creado por Rembot Games
Esta entrada va a ser algo diferente, como ya se está viendo. He realizado una
fusión de dos tutoriales sobre el ciclo de día y noche, adaptando el código un
poco a mi manera y de forma experimental.
En este caso veremos dos
enfoques distintos para crear el ciclo de día y noche. Por un lado
utilizaremos ProceduralSkyMaterial, que permite darle distintos tonos de color
al cielo, y por otro PhysicalSkyMaterial, que proporciona una iluminación más
realista.
Creamos un mundo, pero en esencia necesitamos los siguientes para la iluminación.
Primero vemos brevemente la función de los nodos. El nodo SunContainer
actúa como contenedor del DirectionalLight3D y nos permite controlar su eje
de rotación.
Gracias a esto podemos definir la trayectoria del
sol, haciendo que salga por el norte y se ponga por el sur. En términos
prácticos, lo que hacemos es rotar el DirectionalLight3D en su eje X dentro
de un rango de 0 a 180 grados para el dia y 180 a 360 grados para la
noche.
SunContainer(Node3D).
DirectionalLight3D
Desde el nodo WorldEnvironment podemos cambiar el material del cielo. El script que adjuntaremos, funciona tanto con ProceduralSkyMaterial como con PhysicalSkyMaterial, por lo que podemos escoger el que más nos convenga, ya que no interfieren entre si.
Adjuntamos el script al Node DayNight.
A diferencia del tutorial, que utiliza de forma algo extraña el rango del gradiente 0-360 como equivalente al rango 0-24, provocando situaciones como que anochezca a mediodía o hacer que el sol aparezca en el cielo de la nada, he decidido que la salida del sol sea a las 5 y que el dia y la noche dependan de las horas de sol que hayamos introducido.Otro de los cambios, tomado del segundo tutorial, es que el cambio de color del cielo se realiza a partir de los gradientes de la rotación del DirectionalLight3D.
A partir de estas dos ideas he tenido que aplicar un pequeño ajuste: separar el reloj de la lógica de la rotación utilizando una segunda variable. De lo contrario, si por ejemplo indicamos que el día tiene solo 4 horas de luz, el tiempo avanzaría absurdamente rápido durante el día y se ralentizaría por la noche. En lugar de eso, el reloj debe avanzar a una velocidad constante, ya que la rotación del DirectionalLight3D no debería condicionar la hora actual.
Para mejorar la oscuridad en interiores y evitar que la luz parezca atravesar la estructura, debemos ir al nodo WorldEnvironment, buscar la pestaña SDFGI y activar la opción Use Occlusion.
No funciona del todo porque hay fugas de luz, como si se colase entre mallas.
No hay comentarios:
Publicar un comentario