UE4 | Le cycle du jour et de la nuit | Modification de SkySphere

Le changement de jour et de nuit augmente souvent chez les utilisateurs. Et si le mouvement du soleil lui-même est assez simple à organiser, alors réaliser un travail plus ou moins réaliste *** SkySphere *** est déjà beaucoup plus difficile.

Dans cet article, je n'ai pas l'intention de montrer toutes sortes de façons de changer l'orientation de DirectionalLight avec les saisons et la précession. À ce sujet, à mon avis, il y a suffisamment de matériel. Quelqu'un le fait via Blueprint , mais j'utilise C ++ , afin que l'horloge tourne sur le serveur et synchronise périodiquement (une fois toutes les quelques secondes) l'horloge du client. En même temps, aucun mouvement ne se produit sur le serveur. Ce n'est pas une chose noble de déplacer le soleil dans le ciel.


Ensuite, je vais parler des problèmes qui se posent et montrer ma version de mise à niveau du BP_Sky_Sphere standard pour qu'il fonctionne correctement avec le cycle quotidien.




Avant la modification, il sera très utile de copier tout le contenu du dossier EngineSky dans votre répertoire afin de ne pas gâcher le Blueprint standard et les ressources qui y sont connectées.





Tout d'abord, je veux parler d'un bug (ou des fonctionnalités) de la sphère standard. Le StaticMesh ci- joint pour la sphère a une échelle de 400. Si vous le changez à 1, il semble que rien ne changera, mais si vous avancez un peu, vous vous sentirez comme dans le film "The Truman Show". Oui, cette sphère, bien qu'énorme, a ses propres frontières. Un problème évident pour les mondes ouverts, qui est très facile à résoudre en faisant bouger la sphère avec le joueur.



Bien sûr, comme alternative, vous pouvez agrandir la sphère, mais une telle idée ne m'impressionne pas beaucoup.




L'élément suivant définit une nuit normale. Je n'aime pas du tout que les étoiles n'apparaissent qu'à minuit et le reste du temps - c'est juste une sorte de soirée prolongée.


Il est également tout simplement résolu en ajustant les courbes existantes et en en ajoutant de nouvelles.



Exemple de courbe



Le problème suivant est l'amortissement de la lumière pour DirectionalLight et SkyLight . Il est assez étrange de constater que la nuit, il ne peut être vu pire que pendant la journée. Il est également résolu très simplement en ajoutant et en ajustant des courbes.


Modification des niveaux d'éclairage



Bon, pour le dessert ... Les étoiles ne bougent pas! Si la nuit est longue et pleine d'horreurs , alors le joueur ne le remarquera peut-être pas. Mais sommes-nous pour une approche sérieuse?


Tout d'abord, j'ai fait bouger la texture des étoiles en ajoutant des variables supplémentaires au matériau.


Quelque chose comme ça

Tant que le soleil se déplace le long du plan équatorial, tout est en ordre. Mais lors de la simulation de hautes latitudes, les difficultés mathématiques commencent et le refus de la texture de tourner comme nous le voulons. Mais sommes-nous pour une approche sérieuse? :)


En conséquence, il a décidé de faire deux sphères célestes. L'une avec des nuages, le soleil et le ciel, et la seconde, un peu plus grande, avec des étoiles. BP_Sky_Sphere a également connecté une sphère supplémentaire et lui a poliment demandé de tourner avec le soleil ...


Et la partie la plus intéressante! Rendre la sphère céleste plus petite partiellement transparente. En connectant simplement la logique du matériau à l' opacité , bien sûr, j'ai obtenu de merveilleuses étoiles qui brillaient à travers les nuages ​​de la nuit noire. Par conséquent, j'ai dû à nouveau modifier le matériau avec un fichier, dessinant en fait deux cieux. Un avec des nuages ​​noirs pour les visuels. Et le second, avec des nuages ​​toujours blancs comme neige, pour Opacity . De plus, il a ajouté beaucoup de blanc pendant la journée, ce qui a rendu le ciel opaque afin que le bleu translucide n'effraye pas sa profondeur.


Blueprint

Image cliquable


Matière







Maintenant, tout fonctionne comme prévu par le Créateur, dans ce cas - par moi. Il ne reste plus qu'à affiner les courbes de contrôle, mais dans l'ensemble, il semble assez bon.




Si vous avez des idées sur la façon de rendre cela plus facile, veuillez partager. Je vous en serais reconnaissant.

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


All Articles