Wolkengenerierung macht Spaß! Ich werde sowohl Offline- als auch Laufzeitmethoden behandeln.
Vorgerenderte Wolken
Wenn Sie Ihre Cloud-Texturen offline vorrendern möchten, brauchen Sie nicht länger als Photoshop (oder Gimp , wenn Sie es vorziehen) zu suchen . Beide Programme können leicht Wolkenmuster erzeugen. Menüelemente bewegen sich in der Regel zwischen den Releases, aber ab Gimp 2.8.2 ist der Kernbefehl, den Sie suchen, der Filters -> Render -> Clouds -> Solid Noise
. Sie müssen ein neues leeres Bild erstellen, bevor der Befehl aktiviert wird. Ich empfehle Ihnen, mit den Rauschparametern zu experimentieren, aber hier ist nur ein Beispiel, was passiert, wenn Sie "Random Seed" auf 1, "Detail" auf 4, "X Size" auf 4,0, "Y Size" auf 8,0 und deaktivieren "Randomize" und "Turbulent", und aktivieren Sie "Tilable":
Ein weiterer Schritt, den ich auf jeden Fall empfehle, ist das Bearbeiten der Bildebenen ( Colors -> Levels...
in Gimp). Durch Ziehen der Endpunkte können Sie die Wolkenbedeckung effektiv von "vollständig bedeckt" in "keine Wolke am Himmel" ändern.
Weitere interessante Möglichkeiten:
- Verwenden Sie die Werkzeuge "Ausweichen" und "Brennen", um Teile des Bildes manuell aufzuhellen / abzudunkeln.
- Verwerfe das Wolkenbild, um Windmuster vorzuschlagen. Probieren Sie den
Filters -> Distorts -> Whirl and Pinch...
Befehl von Gimp aus oder verwenden Sie für mehr Kontrolle Filters -> Distorts -> IWarp...
den Deform-Modus, der auf "Wirbel" eingestellt ist. Behalten Sie dies jedoch bei - zu viel Verzerrung führt dazu, dass die hochfrequenten Details aus dem Bild verschwimmen.
- Fügen Sie mehrere unabhängige Wolkenebenen hinzu, um verschiedene Wolkentypen zu simulieren, von dünn und dünn bis groß und klobig (ich bin mir sicher, dass sie richtige wissenschaftliche Namen haben, aber verdammt, Jim, ich bin ein Programmierer, kein Meteorologe!). In diesem Fall möchten Sie wahrscheinlich jede Ebene als separates Bild speichern, damit Sie sie zur Laufzeit unabhängig animieren können.
Es hängt wirklich von Ihrer künstlerischen Vision ab. Verrückt werden! Wenn Sie fertig sind, müssen Sie die Textur als einkanaliges Graustufenbild exportieren, damit Sie zur Laufzeit dieselben Wolkendaten für Ihren Farb- und Alphakanal verwenden können.
Laufzeit-Cloud-Generierung
Das Generieren von unbegrenzten Wolkenmustern zur Laufzeit ist etwas aufwändiger, aber durchaus machbar. Es ist ein riesiges Thema, das nur die großen Bereiche abdeckt.
Grundsätzlich werden Sie den Befehl "Solid Noise" von Gimp in Ihrem Shader-Code replizieren und eine Rauschfunktion wie das kanonische Perlin-Rauschen verwenden , um unendliche, glatte, deterministische (optional) periodische Rauschvolumina zu erzeugen. In Ihrer Frage wurde nicht angegeben, auf welche Rendering-API Sie abzielen. Daher kann ich hier nicht zu genau vorgehen. Kapitel 26 von "GPU Gems 2" behandelt eine Variante des Perlin-Rauschens in (etwas datiertem) HLSL und CgFX, oder Sie können diese Drop-In-GLSL-Rauschfunktion verwenden. Durch Abtasten eines 2D-Schnitts eines 3D-Geräuschvolumens erhalten Sie so etwas wie den Gimp-Befehl "Solid Noise" mit Detail = 0. Je geringer der Abstand zwischen den Lautstärkemustern ist, desto niedriger ist die Frequenz ("weicher") des Geräusches. Beginnen Sie mit einem niederfrequenten Grundrauschmuster und fügen Sie weitere höherfrequente "Oktaven" des Rauschens hinzu, wobei jede "Oktave" eine andere Schicht des 3D-Rauschvolumens mit größerem Abtastabstand ist, um die Detailgenauigkeit zu erhöhen und niedrigere Amplitude. Ein visuelles Beispiel für diesen Prozess (den ich durch Googeln von "Multi-Octave Perlin Noise" gefunden habe) finden Sie hier .
Als großen zusätzlichen Bonus können auf diese Weise erzeugte Wolkentexturen sehr einfach animiert werden! Wenn Sie die Beispielkoordinaten für die 3D-Rauschfunktion mit einem zeitbasierten Versatz versehen, erhalten Sie eine äußerst überzeugende Wolkenbewegung (wie in diesem Video dargestellt ). Dies liegt daran, dass die Rauschfunktion in allen drei Dimensionen gleichmäßig ist. Durch Scrollen der Textur in U / V-Richtung bewegen sich die Wolken um den Planeten, während durch Scrollen in W-Richtung (senkrecht) die Wolken sich langsam "entwickeln".
Es ist auch möglich, Wolken zur Laufzeit zu verziehen, um Hurrikan-ähnliche Effekte zu erzielen. Die Ergebnisse können tatsächlich eine viel höhere Qualität aufweisen als die naiven Gimp-Warp-Filter, was (wie bereits erwähnt) zu einer übermäßig verschwommenen Textur führen kann. Eine Technik, die Sie unbedingt untersuchen möchten, sind "Flow Maps", wie sie von Alex Vlachos von Valve ( SIGGRAPH 2010 Folien ) oder Carlos Gonzalez von Naughty Dog ( GDC 2012 Folien ) beschrieben werden. Die Grundidee ist, dass Sie ein Vektorfeld (die "Flusskarte") zeichnen und es zur Laufzeit verwenden, um die Wolkentextur zu verzerren und zu scrollen, während Sie regelmäßig zwischen zwei verschiedenen Wolkentexturen überblenden, wenn die Verzerrungsentfernung zu groß wird.
Welche Methode soll man anwenden?
Das Vorrendern von Cloud-Texturen in Gimp / Photoshop ist extrem einfach. Sobald Sie den Dreh raus haben, können Sie in wenigen Sekunden eine neue Textur erzeugen. Der Laufzeitcode ist trivial und sehr schnell. Einzigartigere Cloud-Texturen bedeuten jedoch einen höheren Speicherplatzbedarf (auch ein größerer / langsamerer Download) und eine stärkere Nutzung des VRAM zur Laufzeit.
Die Erzeugung von Laufzeitwolken ist anfangs viel schwieriger, aber wenn Sie sie erst einmal zum Laufen gebracht haben, hat sie einige klare Vorteile gegenüber vorgerenderten Wolkentexturen. Sie können unendlich viele realistische animierte Wolkenmuster generieren, ohne zusätzlichen Speicherplatz oder VRAM zu verwenden. Die Laufzeitkosten für die Auswertung mehrerer 3D-Rauschfunktionen pro Pixel können jedoch erheblich sein. Ihre Cloud-Pixel-Shader sind viel langsamer als im vorgerenderten Fall.
TL; DR: Beginnen Sie auf jeden Fall mit vorgerenderten Clouds und wechseln Sie zur Laufzeit zu prozeduralen Clouds, wenn Sie die zusätzliche Vielfalt benötigen (oder eine zusätzliche Programmierherausforderung wünschen).