Home

How-To: Canyon

Freitag, 24. August 2007 | Autor:

Ein hübscher Canyon ist gar nicht so einfach.

Das stellt spätestens dann jeder fest, wenn das Mesh aussieht wie eine Ziehharmonika und der Redirect mal wieder genau das tut, was er nicht soll; entweder gar nix, zuviel, oder er sorgt für eine Renderzeit, die nur Methusalem begrüßen würde. Daher wird es hier nun ein kleines How-to geben das erklärt, wie man mit möglichst einfachen Mitteln und möglichst Renderzeit-freundlich einen Canyon bastelt.

Ein mögliches Ergebnis sieht dann in etwa so aus:

Ja, die Surface am Boden ist mies, aber darum geht es hier nicht.

Der Plan: Wir nehmen zwei Heightfields, die gerade nach oben ragen. Zwischen ihnen lassen wir etwas Abstand und schon haben wir einen Canyon.

Das um 1200m angehoben HeightfieldAls erstes brauchen nichts weiter tun, als den sowieso schon vorhandenen Heightfield Shader 01 mit Adjust vertical (Heightfield Shader 01 markieren – Add Operator – Adjust vertical) um einige Meter anzuheben. Ich wähle dabei etwa 1200m bei Add height. Dadurch erhalten wir einen Bereich, der höher ist als die Umgebung. Allerdings ist dieser noch etwas zu klein. Ein Canyon ist normalerweise eher lang und nicht nur ein paar Hundert Meter. Der Heightfield Shader 01 ist im übrigen erstmal nur eine Seite des Canyons. Die Andere fügen wir später hinzu.

hfplus1200-70000.jpgNun stellen wir aber erstmal die Dimensionen noch etwas anders ein, damit wir ein eher längliches Stück haben. Dies können wir beim Heightfield generate 01 unter Size in Meters. Ich nehme 70 000m in Z-Richtung (das rechte Feld). Alles andere lassen wir, wie es ist. Das Heightfield braucht übrigens nicht generiert zu werden, da wir mit Adjust vertical gleich einfach die gesamte Fläche anheben. Heightfield generate dient in diesem Fall nur der reinen Existenz und der Steuerung der Größe der Fläche. Der Vorteil ist, dass wir so kein Terrain haben, dass nur eine begrenzte Anzahl an Pixeln hat. Am besten wäre es, wenn man bei dem Heigthfield Shader das Border Blending auf 0.25 erhöht. Dies sorgt für sanftere Kanten.

Da wir noch eine gegenüber gesetzte Wand brauchen, kopieren wir nun einfach den Highfield Shader 01 (Strg+D) und verbinden den erstellten Heightfield Shader 01_1 mit dem Heightfield adjust vertical 01 als Heightfield. Dadurch haben wir nun zwei Heightfields in der gleichen Größe und Höhe. Allerdings liegen sie noch übereinander und das Heightfield 01_1 ist garnicht zu sehen. Dafür müssen wir es wieder mit dem ersten Heightfield zusammen führen.
Wir klicken rechts im Node Network und wählen Create Shader – Other Shader – Merge Shader. Dann verbinden wir das Heightfield 01 mit dem Input Node-Input und das Heightfield 01_1 mit dem Shader A-Input. Den Output verbinden wir jetzt noch mit dem Input von Compute Terrain. Anschließend wählen wir den Merge Shader 01, stellen unter Mix to A einen Wert von 1 ein und bei Choose by Altitude wählen wir Highest (raise). Um nun noch eins der beiden zu verschieben, wählen wir den Heightfield Shader 01_1 und schreiben unter Position einen Wert von 10000m + die gewünschte Breite des Canyons in das linke Feld. Ich habe 11000m gewählt. In der Preview sollte das so ausehen:

hfplus1200-70000-mal-zwei.jpg

Jetzt sollten wir die Sonne erstmal auf Heading 0 stellen und eine Elevation von 60° nehmen, sonst wird es nachher im Canyon zu dunkel.

Wenn wir uns den Canyon nun ansehen, bemerken wir, dass die Wände nicht gerade nach Oben geneigt sind. Dem helfen wir mit zwei Twist and Shear Shadern ab. Diese neigen das Terrain jeweils in eine Richtung mit einem bestimmten Faktor. Wir klicken Rechts im Node Network, wählen Create Shader – Surface Shader – Twist and Shear Shader und fügen ihn zwischen unseren Heigthfield Shader 01 und dem Merge Shader ein. Wenn wir das ganze nun noch einmal für den Anderen Heightfield Shader machen, bloß mit einem Lean Faktor von -1, habe wir fast gerade nach Oben ausgerichtete Wände auf beiden Seiten.

Als nächstes werden wir den Canyon ein wenig verdrehen. Kaum ein natürlicher Canyon zeigt über 70km immer genau geradeaus. Dafür werden wir einen Redirect Shader benötigen. Diesen holen wir uns einfach über Add Terrain – Surface Shader – Redirect Shader. Wie wir sehen, tut der erstmal nichts. Damit er etwas tut, benötigt er einen Input. Am besten eignet sich hier ein einfaches Power Fractal. Also für den X shader auf das Kästchen mit den drei Punkten klicken, dann Create Shader – Colour Shader – Power Fractal Shader V3 auswählen. Das aber reicht noch nicht. Der Redirect tut nichts anderes, als das gesamte Terrain mit einer Funktion zu verschieben. Da wir hier eine recht große Funktion benötigen, müssen wir noch einige Einstellungen des Power Fractals verändern. Dabei sollten wir auf Folgendes achten:

  • Wir brauchen große Strukturen, da wir den Canyon nicht bloß ein wenig „verdrehen“ wollen.
  • Je kleiner die Strukturen für einen Redirect werden, desto mehr Renderzeit frisst er.
  • Wir brauchen keine großen Feinheiten in unserer Struktur.

Schauen wir uns das Power Fractal einmal an, sehen wir unter der Scale eine Angabe der Noise Octaves. Je kleiner dieser Wert ist, desto sanfter sind im Allgemeinen unsere Strukturen. Also stellen wir die Werte darüber (Scale, Lead-In Scale, smallest Scale) alle auf 7500. Danach gehen wir in den Tab Displacement und stellen eine Displacement Amplitude von 7500 ein. Jetzt sollten wir einen leicht gewundenen Canyon haben, der von oben in etwas so aussehen sollte:

Und hier das Node-Network bisher:

Jetzt sollten wir uns einen schönen POV suchen und die Struktur des Canyons noch ein wenig verfeinern.

Im Übrigen werden wir nun alles weitere hinter dem Compute Terrain-Node bzw. im Shader-Tab machen, da wir einen Distribution Shader benutzen und einen Power Fractal mit Lateral only brauchen. Dieses funktioniert allerdings erst nach Compute Terrain, sofern man nicht tiefer in die Trickkiste greift.

Nun wollen wir erst einmal die Wände und vor allem die Oberseite des Canyons etwas verfeinern. Allerdings sollte der Boden des Canyons eben bleiben, für den Fall dass wir später Wasser hinzufügen wollen oder sonstiges damit vorhaben. Also benötigen wir noch einen so genannten Blending Shader. Dieser legt fest, wo ein anderer Shader zu sehen ist und noch wichtiger: wo nicht.

Wir fangen damit an, einen Blending Shader farbig auf das Terrain zu legen. Dafür gehen wir in das Shader-Tab und wählen Add Layer – Surface Layer. Nun sehen wir überall Hellgrau. Um erstmal für Übersichtlichkeit zu sorgen, deaktivieren wir beim Surface Layer Fractal breakup und löschen den entsprechenden Shader aus dem Node Network. Das ist zwar nicht unbedingt nötig, aber je mehr Shader, desto länger wird die Renderzeit. Anschließend gehen wir in die Altitude Constraints und stellen die Minimum Altitude auf 0 und die Min Alt Fuzzy Zone auf etwa 150m. (Es hilft übrigens immer, wenn man einen solchen Shader erstmal rot färbt. damit sieht man in der Vorschau besser, wo er überall abdeckt.) Jetzt stellen wir die Farbe auf Weiß. Nun markiert der Surface Layer genau die Bereiche des Terrains mit weißer Farbe, die höher als 0m sind (mit einer Übergangszone von 150m). Nun lösen wir im Node Network alle Verbindungen dieses Layers und verbinden danach Base Colours wieder mit Planet 01.

Als nächstes brauchen wir wieder mal ein Power Fractal. Dieses können wir mit Add Layer – Surface Shader – Power Fractal Shader V3 hinzufügen. Dann verbinden wir den Surface Layer mit dem Blending Shader-Input des Power Fractals und aktivieren bei diesem die Option Blend by Shader. Jetzt brauchen wir nurnoch passende Werte zu wählen um zu bestimmen, wie das Power Fractal geformt sein soll. Dafür wählen wir Tweak Noise und stellen erstmal alle Werte unter Noise Variation auf 0. Als Noise flavour nehme ich hier Perlin ridges. Dann gehen wir in die Scale und passen die Werte unseren Bedürfnissen an. Ich habe folgende Werte genommen:

  • Feature Scale: 2500
  • Lead-In Scale: 5000
  • Smallest Scale: 10

Unter Displacement habe ich mich dafür entschieden:

  • Amplitude: 1000
  • Roughness: 0.45
  • Spike Limit: 0.5

Diese „richtigen“ Werte für euch können sich aber stark von meinen unterscheiden. Auch kann es sein, dass man oft auf Random Seed klicken muss, bevor man etwas passendes findet. Bei mir siehts inzwischen etwa so aus:

Und unser Node Network wurde inzwischen durch dies ergänzt:

Bisher haben wir schon mit Hilfe zweier Heightfields, einem Redirect Shader und einem Power Fractal einen Canyon erstellt, der zwar in der Form schon stimmit ist, aber noch arm an Details ist. Nun wollen wir wieder mit dem Redirect Shader und weiteren Power Fractal Shadern die Details ergänzen und so unseren Canyon fertig stellen.

Zuerst wollen wir etwas mehr Struktur in der Horizontalen. Kleine Überhänge und Einbuchtungen in den Wänden würden sicherlich gut aussehen, also nehmen wir wieder einen Redirect Shader und ebenso erstellen wir wieder ein Power Fractal, dass an den X-Input angehängt wird. Diesmal werden wir aber bedeutend kleinere Werte nehmen, da wir keine großen, sondern eher kleine Strukturen haben wollen. Hier gibts es aber zu beachten, dass die Werte so klein wie nötig und so groß wie möglich sind. Wir können die wirklich feinen Details später auch Renderzeit-sparender machen als mit einem Redirect. Allerdings hat dieser auch den Vorteil, dass er beide Seiten unseres Canyons jeweils negiert beeinflusst (hervorheben auf der einen Seite bedeutet eine Einbuchtung auf der anderen). So behält der Canyon seinen Durchmesser. Hier nun wieder einige Richtwerte, die in den Dimensionen unseres Canyons gute Dienste Leisten:

  • Feature Scale: 1000
  • Lead-In Scale: 1250
  • Smallest Scale: 250
  • Amplitude: 500 (Along normal)
  • Roughness: 0.5
  • Spike Limit: 0.5

Wir haben nun sanfte Verschiebungen in den Wänden:

Als letzten Schritt wollen wir nun noch viel mehr Details. Eine Struktur, die etwas horizontal in Richtung des Canyons verläuft und dabei leichte Züge einer Strata hat, würde sicherlich gut aussehen. Allerdings würde ein entsprechender Redirect mehr Renderzeit benötigen und da ich für das etwas langgezogene Fractal ein Billow-Perlin benutzen will, können wir diesen Hier nicht nutzen. Warum? Ganz einfach: ein Billow-Perlin auf der einen Seite bedeutet ein negiertes Billow, also ein Ridges, auf der Anderen. Und das wirkt einfach unnatürlich.

Also fügen wir einfach noch ein Power Fractal hinzu. Das wichtigste ist nun erstmal wieder die Dimension. Wir wollen recht kleine Strukturen, also müssen auch die Werte entsprechend klein gewählt werden. Zusätzlich wollen wir diese wieder nur an den Wänden und nicht am Boden haben. Hinzu kommt noch, dass wir es gerne nur horizontal und etwas gestreckt in Z-Richtung hätten.

Zumindest das Problem mit dem Boden löst sich gleich von selbst. Aber erstmal überlegen wir uns was für Werte wir hier brauchen. Ausgehend von der Höhe der Wände habe ich in etwa eine Scale von 100 abgeschätzt. Was wir aber noch vor den anderen Werten tun werden ist folgendes: unter dem Tab „Tweak Noise“ stellen wir Perlin Billows als Noise Flavour ein und bei Noise Stretch erhöhen wir den Z-Wert auf 3. Anschließend gehen wir in den Displacement-Tab und stellen dort „Lateral Only“ ein. dies sorgt dafür, dass nur horizontal displaced wird und somit auch unser Boden nur wenig beeinflusst wird. Nun die restlichen Werte. Mein sind:

  • Feature Scale: 100
  • Lead-In Scale: 150
  • Smallest Scale: 1
  • Amplitude: 50 (lateral only!)
  • Roughness: 1
  • Spike Limit: 1

Das wärs auch schon. Das einzige was noch zu tun bleibt ist, ein wenig Farbe hinzu zu fügen. Ich habe bei meinem Beispielbild einfach das letzte Power Fractal ein wenig Braun-Beige eingefärbt. Zur Renderzeit: Auf meinem laptop (AMD Turion 64 X2 mit 2GB Ram) hat das Bild auf 800×600 mit Detail 1 und GI 2:2 73 Minuten gebraucht. Eine wie ich finde für diese Anzahl an verschiedenen Shadern und zwei Redirect darunter sehr angenehme Zeit. Hier nochmal das Ergebnis:

Ich hoffe ihr konntet alles nachvollziehen und erziehlt gute Ergebnisse. Über Kommentare, Kritik und Vorschläge würde ich mich freuen; genauso über Bilder, die ihr mit dieser Methode erstellt habt. 😉

Noch etwas: natürlich ist dies nicht die optimale Methode, einen Canyon zu basteln. Aber sie ist einfach und in meinen Augen ist jeder Schritt gut nach zu vollziehen. Vieles könnte man auch mit einem einzigen Shader machen, aber ich erledige Dinge lieber einfach als kompliziert. Hier noch mein TGD-File. Ich habe die einzelnen Schritte in Groups, die beschreiben was getan wird, zusammengefasst. Das erleichtert ein wenig den Überblick. 😉

Link

PS: Kommentare, Kritik und Vorschläge für Verbesserungen sind sehr erwünscht!

Tags »

Trackback: