Aujourd’hui, nous allons nous plonger dans les nuages. Petits ou grands, épais ou fins, lumineux ou fuligineux… les nuages prennent toutes sortes de formes et de couleurs. Ils sont toujours là, au-dessus de nous, bien que nous n’y prêtions pas tellement d’attention. Dans cet atelier, on va tenter de leur en porter un peu.
Cet atelier est le premier d'un duo, le second s'attelant quant à lui à réaliser ces nuages en pixel-art.
Fil d'actualités
-
27/11/240
Comments
Une vidéo bien sympa, comme d'hab!
Merci!
Super vidéo !!
C'est marrant, ça fait des mois que dès que j'ai du temps je regarde les nuages, dans la voiture, en vélo, au boulot, ...
J'essaye de réaliser un algorithme pour réaliser ce genre d'effet pour un jeu :
https://www.youtube.com/watch?v=MZSORhkCfJM
https://www.youtube.com/watch?v=l3-BVBocCxI
Ou tout simplement des nuages et des couleurs de lumière réalistes à n'importe quelle heure.
Mais dès que je comprends quelque chose, je m'aperçois qu'il y en a 2 autres que je ne saisis pas
Le travail d'artiste technique, c'est un énorme investissement. Il faut à la fois développer son sens artistique et la partie programmation.
Pour avoir fait un peu de programmation de shaders, j'utilisais surtout des masques et des textures faites main. Ce n'est pas simple de faire de beaux nuages procéduralement.
Ce qu'a fait Nival marche plutôt bien sinon - il ne manque qu'un peu de color grading et un dégradé convaincant au niveau du ciel pour que ça soit bien réaliste, mais le gros du travail est fait.
En fait, le procédural (et rien que la classique texture "noise") permet quand même des choses plutôt cool je trouve, à partir du moment où on l'utilise par imbrications multiples ; pour tout ce qui est phénomènes "naturels" elle permet souvent des représentations assez sympas tout en s'affranchissant de compétences en graphismes et du temps (et difficulté) que cela peut représenter de réaliser des textures de grandes dimensions non répétitives et au besoin dynamiques.
J'avais expérimenté la chose aussi pour le rendu d'un plan d'eau infini:
http://nival.free.fr/images/oceantea.mov
(3 niveaux de "noise" associés, un large et étiré pour les vagues qui se déplacent par translation, un plus fin, régulier et sans translation pour la houle, un encore plus fin pour restituer une "micro-agitation" de surface)
Ou encore dans cette séquence où l'intégralité de l'astéroïde n'est qu'une sphère sur laquelle sont appliqués différents niveaux de "noise" tant pour la forme que pour la texture:
http://nival.free.fr/images/earthtest.mov
Bon, c'est du niveau parfaitement dilettante , mais je suis assez persuadé qu'en poussant la chose on peut arriver à des résultats très bon pour le rendu de pas mal de phénomènes naturels. Le problème c'est qu'un moment ça devient une spécialisation en soi, qui risque de demander autant de compétences et d'investissement que le travail de graphiste "traditionnel" si on devient vraiment exigent .
(voir des projets comme Infinity Battlescape où la surface des planètes générée de façon procédurale est bluffante de richesse et de naturel je trouve!)
C'est juste que lorsque tu veux pousser le niveau de détails et la finesse de ta représentation procédurale, cela demande beaucoup d'expérimentation et donc de temps. Surtout, c'est assez facile de modéliser un phénomène naturel de façon procédurale. De l'eau, des nuages, des plantes, des flammes... mais c'est très difficile de représenter quelque chose de précis. C'est assez facile de faire de l'eau. Mais une rivière, un ruisseau, un océan ou un marais vraiment crédibles...
Après oui le procédural, c'est très utile, très intéressant aussi. Et on le trouve un peu partout aujourd'hui en production.
Faut pas être trop ambitieux je pense, surtout si on pense "temps réel", je parle surtout de la deuxième vidéo que tu mets en exemple!
J'avais par le passé fait quelques expérimentations partant sur plusieurs plans empilés, sur lesquelles était appliquée une transparence basée sur une texture procédurale type "noise", avec une valeur seuil à partir de laquelle la transparence était à 100% (créant l'espace "vide" entre les "nuages") ; couleur diffuse = blanc, et projection d'ombre d'une couche sur l'autre respectant la transparence ; manquait à appliquer une approximation de lumière transmise il me semble ; et je me demande si j’utilisais pas aussi un "bump mapping" toujours basé sur la texture "noise"? En tout cas, en animant la texture "noise" en plus d'une translation on évitait des nuages trop statiques, et si on changeait la valeur seuil de la transparence on pouvait augmenter ou baisser (progressivement au besoin) le pourcentage de couverture nuageuse.
Ça donnait ça (pour une proportion de couverture nuageuse constante):
http://nival.free.fr/images/skytest.gif
(bon, le rendu était pour le moins "brut" et avait encore besoin de pas mal de peaufinage, mais ça reste une piste je pense)
Après c'était du pré-calculé, mais sur des bases à mon sens assez "simples" pour être transposé avec d'éventuelles approximations (a fortiori 10 ans plus tard ) à un moteur de jeu.
Je pense que je me suis mal exprimé en disant "algorithme"
Je cherche à réaliser à la main des nuages réalistes en 2D, avec différents claques pour les faire évoluer selon l'inclinaison et la couleur du soleil. Les rendus seraient précalculés et enregistrés en images que j'utiliserai par la suite.
Il est sûr que créer quelque chose de procédural serait génial mais je 'en ai pas les compétences, ni réellement la nécessité. Je me "contenterai" donc d'une banque de nuages que je mixerai par la suite. Ce n'est peut-être pas le plus optimal, mais j'essaye de trouver du temps comme je peux après le boulot
Nival je trouve ça vraiment super ce que tu as fait !!
Pour un rendu 2D qui prenne en compte orientation et couleur du soleil, un système de mixage de calque me parait un peu difficile, parce que au final chaque "couche" de rendu (deux essentiellement je pense: la lumière diffusée et celle transmise) dépendent TOUTES DEUX de la couleur et position du soleil... Donc chaque situation reviendrait à un cas particulier pour chaque calque, et donc au final à simplement un dessin particulier! Tu peux en revanche réaliser un dessin pour différentes orientations de la lumière, et définir pour chaque cas deux calques: éclairage direct par le soleil et "illumination globale", ce qui permettra de faire varier la teinte des deux couleurs en fonction de l'ambiance lumineuse de chaque scène.
Si tu veux pouvoir prendre en compte, à partir d'un nombre restreint de représentations, différentes positions d'éclairage, je doute que tu puisse faire sans un modèle d'éclairage dynamique, même sommaire. Pour autant cela doit être réalisable en 2D avec des considérations techniques assez simples, il faudrait en revanche passer je pense par du normal mapping ou un équivalent. Une représentation façon "bump mapping" peut être intéressant car permettant, à partir d'une unique image, de considérer pour chaque pixel autant la profondeur du nuage (pour le rendu de la lumière transmise) que l'orientation de sa surface (pour le rendu de la lumière diffuse).
Une possibilité intermédiaire, c'est représenter "à la main" différentes situations d'éclairage, comme tu réaliserais une animation du nuage autour du quel tournerait une lumière: chaque image de l'animation peut alors être rattacher à une orientation différente du soleil. Tu peux aussi pour chaque frame proposer un calque pour la l'éclairage direct et un autre pour l'illumination globale histoire d'avoir une bonne souplesse pour faire évoluer la teinte du nuage de façon dynamique.
L'intérêt de travailler chaque représentation de ton nuage comme faisant parie d'une animation, c'est de t'assurer d'une bonne fluidité si dans ton jeu la situation d'éclairage doit pouvoir évoluer de façon progressive.
Merci!
J'ai eu à l'époque l'occasion de pouvoir manipuler 3DS Max, donc autant dire que j'ai un peu expérimenté dans tous les sens!
Super vidéo ! J'ai bien apprécié tes derniers Atelier Créa. Celle-ci m'a rappelé à quel point il est important d'observer son environnement. Bonne continuation !
Pages