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: Trackback-URL | Feed zum Beitrag: RSS 2.0
Thema: Anfänger, How to..

Du kannst diesen Beitrag kommentieren.
Pingen ist momentan nicht möglich.

15 Kommentare

  1. 1
    Kranky 

    Danke für das Tutorial… aber ich verstehe es nicht. Wo gebe ich die 70.000m ein? Auch sonst ist das sehr Wischiwaschi und ich komme nicht ganz mit. Screenshots der Einstellungen wären sehr hilfreich für Leute, die noch nicht so viel mit TG2 drauf haben.

    MfG Jens

  2. 2
    Goms 

    Die größe des Heightfields kannst du unter Heightfield Generate einstellen. Die Size in Meters ist dabei das entscheidende.
    Ich habe hierbei auf zu genaue Beschreibungen und viele Bilder verzichtet, weil es nur als Wegleitung gedacht ist.
    Die genauen Werte sind nicht entscheidend, es kommt nur auf die generellen Dimensionen an; zumal die Werte auf Screens nicht anders zu sehen sind, als im Text.
    Aber ich werd mal zu einigen Sachen schreiben, wo man sie findet.

  3. 3
    Brigitte 

    Mir geht es gleich wie Kranky, ich komme auch nicht weiter als bis zu den 70.000 m. Ich habe jetzt selber im Photoshop einen Canyon gezeichnet, das BMP in World Machine optimiert und in TG 0.9 die Höhe eingestellt, so dass ich für TG2 ein fixfertiges Terrain hatte…… nur ist es eben nicht das Gleiche, auf Deutsch gesagt es sieht Scheisse aus.

    Grüessli

    Brigitte

  4. 4
    Goms 

    Ok, bin überzeugt ;)
    Ich werd mich Heute mal daran machen, das gesammte How-To auf “Anfängerbasis” zu bringen. Kann aber ein paar Stunden dauern.

  5. 5
    Nikita 

    Ich helf mit, wir können uns ja wieder im Chat treffen.
    Danke euch beiden für die Kommentare :)

  6. 6
    Nikita 

    Goms hat den Artikel noch etwas ergänzt und ich bin ihn noch einmal durchgegangen. Nun dürfte alles nachvollziehbar erklärt sein.
    Vielleicht muss man hier und da mal ganz kurz suchen, aber das ist dann gewollt. Sollte dennoch irgendetwas völlig unklar sein, sind weitere Kommentare natürlich immernoch willkommen. :)

  7. 7
    Brigitte 

    So…… endlich habe ich beide Canyon Tutorials durchgemacht und es funktioniert, sogar mit Wasser.

    Vielen Dank.

  8. 8
    Nikita 

    Schön, dass es funktioniert. :)

    Ich habe die beiden Posts inzwischen zu einem einzelnen Artikel zusammengefasst. Nun hat man das ganze Tutorial auf einer einzigen Seite.

  9. 9
    daydream 

    Hallo Coms, ich bin zufällig auf Deine Seite gestoßen und würde auch gerne Deinen Canyon „nachbauen“ nur, wie komme ich an das ergänzende Tutorial von Dir und Nikita ???

  10. 10
    Nikita 

    Hallo daydream,
    im Grunde sollte dieses How-To schon für sich selbst sprechen. Welches “ergänzende Tutorial” meinst du?

  11. 11
    daydream 

    Hallo Nikita, bei meinem 1. Versuch habe ich den Canyon nicht hinbekommen, im Nachhinein muß ich feststellen, dass ich mich vertippt hatte. Jetzt hat´s geklappt. Danke für die Nachfrage.

  12. 12
    Nikita 

    Keine Ursache :)

  13. Wow. Finde es sehr lobenswert, dass Du Dein Wissen mit uns teilst. Von selber auf sowas zu kommen, ohne sich täglich 3 Stunden mit TG2 zu beschäftigen, halte ich für ziemlich unwahrscheinlich.
    Tolle, relativ einfache Lösung mit bemerkenswertem Ergebnis, hoffe das inspiriert mich, mal wieder etwas mehr zu rendern.
    Nochmals danke!

  14. 14
    Goms 

    Freut mich, dass es immernoch gern gelesen wird. :)

  15. 15
    child@play 

    Super Tutorial, danke dafür.

Kommentar abgeben