La génération du cloud est amusante! Je couvrirai les méthodes hors ligne et d'exécution.
Nuages pré-rendus
Si vous souhaitez pré-rendre vos textures cloud hors ligne, ne cherchez pas plus loin que Photoshop (ou Gimp , si vous préférez). Les deux programmes peuvent facilement générer des modèles de nuages. Les éléments de menu ont tendance à se déplacer entre les versions, mais à partir de Gimp 2.8.2, la commande principale que vous recherchez est Filters -> Render -> Clouds -> Solid Noise
. Vous devrez créer une nouvelle image vierge avant d'activer la commande. Je vous encourage à expérimenter avec les paramètres de bruit, mais à titre d'exemple, voici ce qui se passe si vous définissez "Random Seed" sur 1, "Detail" sur 4, "X Size" sur 4.0, "Y Size" sur 8.0, désactivez "Randomize" et "Turbulent", et activez "Tilable":
Une autre étape que je recommande vraiment est de modifier les niveaux de l'image ( Colors -> Levels...
dans Gimp). En faisant glisser les points de terminaison, vous pouvez modifier efficacement le niveau de couverture nuageuse de «entièrement couvert» à «pas un nuage dans le ciel».
Autres possibilités intéressantes:
- Utilisez les outils "Esquiver" et "Graver" pour éclaircir / assombrir manuellement des parties de l'image.
- Déformez l'image du nuage pour suggérer des modèles de vent. Essayez la
Filters -> Distorts -> Whirl and Pinch...
commande de Gimp , ou pour plus de contrôle, utilisez Filters -> Distorts -> IWarp...
le mode Déformation réglé sur "Tourbillon". Restez subtil, cependant - trop de déformation a tendance à brouiller les détails haute fréquence de l'image.
- Ajoutez plusieurs couches de nuages indépendantes pour simuler différents types de nuages, des nuages fins et vaporeux aux gros et gros morceaux (je suis sûr qu'ils ont des noms scientifiques appropriés, mais bon sang Jim, je suis programmeur, pas météorologue!). Dans ce cas, vous souhaiterez probablement enregistrer chaque calque en tant qu'image distincte afin de pouvoir les animer indépendamment au moment de l'exécution.
Cela dépend vraiment de votre vision artistique. Devenir fou! Lorsque vous avez terminé, n'oubliez pas d'exporter la texture sous la forme d'une image en niveaux de gris monocanal, afin de pouvoir utiliser les mêmes données cloud pour votre couleur et votre canal alpha lors de l'exécution.
Génération de cloud d'exécution
La génération de modèles de cloud illimités lors de l'exécution est un peu plus complexe, mais toujours totalement réalisable. C'est un sujet énorme, et cela ne couvrira que les grands traits.
Fondamentalement, vous allez répliquer la commande "Solid Noise" de Gimp dans votre code de shader, en utilisant une fonction de bruit comme le canonique Perlin Noise pour générer des volumes de bruit infinis, lisses, déterministes, (éventuellement) périodiques. Votre question n'a pas précisé quelle API de rendu vous visez, donc je ne peux pas être trop précis ici; le chapitre 26 de "GPU Gems 2" couvre une variante du bruit Perlin dans HLSL et CgFX (quelque peu daté), ou vous pouvez utiliser cette fonction de bruit GLSL. En échantillonnant une tranche 2D d'un volume de bruit 3D, vous obtenez quelque chose comme la commande "Solid Noise" de Gimp avec Detail = 0. Plus la distance entre vos échantillons de volume de bruit est faible, plus le bruit sera de basse fréquence ("plus lisse"). Pour augmenter le niveau de détail des hautes fréquences, commencez par un modèle de bruit de basse fréquence de base et ajoutez des "octaves" de bruit plus hautes fréquences, où chaque "octave" est une tranche différente du volume de bruit 3D avec une plus grande distance d'échantillonnage et une amplitude plus faible. Un exemple visuel de ce processus (que j'ai trouvé par Googling "bruit Perlin multi-octave") peut être trouvé ici .
En prime, les textures de nuages générées de cette façon peuvent très facilement être animées! Ajoutez un décalage basé sur le temps à vos coordonnées d'échantillon de fonction de bruit 3D, et vous obtiendrez un mouvement de nuage extrêmement convaincant (comme on le voit dans cette vidéo , par exemple). En effet, la fonction de bruit est lisse dans les trois dimensions; le défilement de la texture dans le sens U / V provoque le déplacement des nuages autour de la planète, tandis que le défilement dans le sens W (perpendiculaire) a pour effet d '"évoluer" lentement les nuages.
La déformation des nuages lors de l'exécution est également possible, pour des effets de type ouragan. Les résultats peuvent en fait être de bien meilleure qualité que les filtres de chaîne naïfs de Gimp, ce qui (comme mentionné précédemment) peut conduire à une texture trop floue. Une technique que vous voulez certainement étudier est les "cartes de flux", comme décrit par Alex Vlachos de Valve ( diapositives SIGGRAPH 2010 ) ou Carlos Gonzalez de Naughty Dog ( diapositives GDC 2012 ). L'idée de base est de peindre un champ vectoriel (la "carte de flux") et de l'utiliser pour déformer et faire défiler la texture du nuage lors de l'exécution, tout en effectuant un fondu enchaîné périodiquement entre deux textures de nuage différentes lorsque la distance de distorsion devient trop élevée.
Quelle méthode utiliser?
Le pré-rendu des textures de nuage dans Gimp / Photoshop est extrêmement facile; vous pouvez générer une nouvelle texture en quelques secondes une fois que vous avez compris. Le code d'exécution est trivial et très rapide. Cependant, des textures cloud plus uniques signifient des exigences d'espace disque plus élevées (également, un téléchargement plus important / plus lent) et plus d'utilisation de la VRAM lors de l'exécution.
La génération de cloud d'exécution est beaucoup plus difficile au début, mais une fois qu'elle fonctionne, elle présente plusieurs avantages évidents par rapport aux textures de cloud pré-rendues. Vous pouvez générer une variété infinie de modèles de nuages animés réalistes sans utiliser d'espace disque supplémentaire ou de VRAM. Cependant, le coût d'exécution de l'évaluation de plusieurs fonctions de bruit 3D par pixel peut être élevé; vos shaders de pixels cloud seront beaucoup plus lents que dans le cas pré-rendu.
TL; DR: commencez certainement par utiliser des nuages pré-rendus et passez aux nuages de procédures d'exécution si vous avez besoin d'une variété supplémentaire (ou si vous voulez un défi de programmation supplémentaire).