UE4 | El ciclo del día y la noche | Modificación de SkySphere

El cambio de día y noche a menudo aumenta entre los usuarios. Y si el movimiento del sol en sí mismo es bastante simple de organizar, entonces lograr un trabajo más o menos realista *** SkySphere *** ya es mucho más difícil.

En este artículo, no planeo mostrar todo tipo de formas de cambiar la orientación de DirectionalLight con las estaciones y la precesión. Sobre este tema, en mi opinión, hay suficientes materiales. Alguien hace esto a través de Blueprint , pero yo uso C ++ , de modo que el reloj corre en el servidor y periódicamente (una vez cada pocos segundos) sincronizo el reloj del cliente. Al mismo tiempo, no se produce movimiento en el servidor. No es una cosa señorial mover el sol por el cielo.


A continuación, hablaré sobre los problemas que surgen y mostraré mi versión de actualización del BP_Sky_Sphere estándar para que funcione correctamente con el ciclo diario.




Antes de la modificación, será bastante útil copiar todo el contenido de la carpeta EngineSky a su directorio para no estropear el Blueprint estándar y los recursos conectados a él.





En primer lugar, quiero hablar sobre un error (o características) de la esfera estándar. El StaticMesh adjunto para la esfera tiene una escala de 400. Si lo cambia a 1, parece que nada cambiará, pero si se adelanta un poco, se sentirá como en la película "The Truman Show". Sí, esta esfera, aunque enorme, tiene sus propias fronteras. Un problema obvio para los mundos abiertos, que es muy fácil de solucionar haciendo que la esfera se mueva con el jugador.



Por supuesto, como alternativa, puede hacer que la esfera sea aún más grande, pero no estoy muy impresionado con esa idea.




El siguiente elemento es establecer una noche normal. No me gusta que las estrellas aparezcan solo a medianoche, y el resto del tiempo, es solo una especie de tarde prolongada.


También se resuelve simplemente ajustando las curvas existentes y agregando otras nuevas.



Ejemplo de curva



El siguiente problema es la amortiguación de la luz para DirectionalLight y SkyLight . Es bastante extraño observar que por la noche no se puede ver peor que durante el día. También se resuelve de manera muy simple agregando y ajustando curvas.


Cambio de niveles de iluminación



Bueno, para el postre ... ¡Las estrellas no se mueven! Si la noche es larga y llena de horrores , tal vez el jugador no lo note. ¿Pero estamos por un enfoque serio?


Primero, hice que la textura de las estrellas se moviera agregando variables adicionales al material.


Algo como esto

Mientras el sol se mueva a lo largo del plano ecuatorial, todo estará en orden. Pero al simular altas latitudes, comienzan las dificultades matemáticas y la falta de voluntad de la textura para girar como queremos. ¿Pero estamos por un enfoque serio? :)


Como resultado, decidió hacer dos esferas celestiales. Uno con nubes, sol y cielo, y el segundo, un poco más grande, con estrellas. BP_Sky_Sphere también conectó una esfera adicional y cortésmente le pidió que girara con el sol ...


Y la parte más interesante! Haz que la esfera celeste más pequeña sea parcialmente transparente. Simplemente conectando la lógica del material a Opacity , por supuesto, obtuve maravillosas estrellas brillando a través de las nubes negras de la noche. Por lo tanto, nuevamente tuve que modificar el material con un archivo, en realidad dibujando dos cielos. Uno con nubes de noche negras para las imágenes. Y el segundo, con nubes siempre blancas como la nieve, para Opacity . Además, agregó mucho blanco durante el día, haciendo que el cielo se volviera opaco para que el azul translúcido no asustara su profundidad.


Anteproyecto

Imagen en la que se puede hacer clic


Material







Ahora todo funciona según lo previsto por el Creador, en este caso, por mí. Solo queda ajustar las curvas de control, pero en general se ve bastante bien.




Si tiene ideas sobre cómo hacer esto más fácil, por favor comparta. Estaría agradecido

Source: https://habr.com/ru/post/es419469/


All Articles