Terrassenförmige Bergmerkmale

10

Ich möchte einen prozeduralen Terrain-Effekt replizieren, den ich vor einigen Tagen auf einer Portfolio- / Blog-Site gefunden habe.

Terrassenförmiges Gelände

Unter Angabe des Standorts wurde die Terrassierung durch "Multiplizieren [der endgültigen Höhe] mit einem Dämpfungswert innerhalb eines bestimmten Höhenbereichs, um schöne Canyon-Merkmale zu erzeugen" erzeugt.

Ich habe mich gefragt, ob jemand ein technischeres Beispiel oder Verfahren dafür liefern kann. In der letzten Woche habe ich viel über prozedurale Terrain- / Texturmethoden und -praktiken geforscht und gelernt, aber ich habe immer noch nichts gefunden, was im Detail erklärt, was "Klemmen" ist, und ich fange an, frustriert zu werden.

Juddily
quelle
Huh, das ist wirklich ordentlich. Ich kann auch nicht herausfinden, was er meint. Haben Sie versucht, dem Kerl eine E-Mail zu senden (verfügbar unter "Kontakt")?
Draco18s vertraut SE
Zu Ihrer Information: In Ihrem Zitat und Ihrer Quelle lautet der Begriff "Dämpfung", aber später in Ihrer Frage verwenden Sie stattdessen "Klemmung".
Pikalek

Antworten:

11

Ich weiß nicht, was ihr Projekt tut, aber Sie können eine Umformungsfunktion auf die Höhe anwenden. Hier ist ein Beispiel, das hvon 0,0 bis 1,0 reicht und eine neue Höhe von 0,0 bis 1,0 zurückgibt:

function R(h) {
    var W = 0.4; // width of terracing bands
    var k = Math.floor(h / W);
    var f = (h - k*W) / W;
    var s = Math.min(2 * f, 1.0);
    return (k+s) * W;
}

Diese Funktion sieht beim Zeichnen folgendermaßen aus: Die x-Achse ist die ursprüngliche Höhe und die y-Achse ist die neue Höhe:

Höhenumformungsfunktion

Ich habe es auf meinen eigenen Code angewendet und Folgendes erhalten:

Ausgabe der Terrassenfunktion

Sie können jede Art von Umformungsfunktion einsetzen oder sie miteinander verketten, um ordentliche Effekte zu erzielen. Sie erhalten Terrassen, wenn es flache Abschnitte der Ausgabe gibt.

amitp
quelle
Ich schwöre, es gibt einen glatten Weg in der Frage des Fragestellers, der eine Terrasse hinaufführt, aber wenn ich ihn noch einmal betrachte, bin ich mir ziemlich sicher, dass es eine Illusion ist. Aber meine Augen bestehen immer noch darauf, dass es dort keine Höhenänderung gibt (Bildmitte zur oberen Ecke / oberen linken Kante). Wenn es keinen Anstieg gibt, ist diese Antwort richtig.
Draco18s vertraut SE
1

Dämpfung ist ein physikalischer Begriff für einen Einfluss innerhalb oder auf ein Schwingungssystem, der seine Schwingungen verringert, einschränkt oder verhindert.

Ich vermute, Ihr Quellartikel hat möglicherweise einen Tippfehler und bedeutet Klemmen , was im Allgemeinen bedeutet , dass ein Wert auf einen bestimmten Bereich beschränkt wird.

Um den visuellen Effekt zu erzielen, können Sie möglicherweise etwas Ähnliches erzielen, indem Sie während des Aufbaus des Geländes Geräuschbänder klemmen. Die von @amitp angegebene Lösung entspricht jedoch eher der ursprünglichen Beschreibung und ist wahrscheinlich einfacher zu implementieren und abzustimmen.

Eine dritte Option könnte die Verwendung von Erosionstechniken sein. Hier ist eine, um eine Kombination aus Klippen und Strand zu erstellen, indem Sie einen Teil des geneigten Landes fallen lassen. Hier ist eine andere, die Spitzen in Plateaus erodieren kann .

Pikalek
quelle
0

Nach einer sehr langen Pause verstehe ich jetzt, wie der Effekt erzielt wurde, und es ist unglaublich einfach. Es gibt 4 Teile zu diesem Effekt:

  • Die anfängliche Höhenkarte des Geländes
  • Definieren eines Terrassenbereichs, wobei die niedrigste Höhe der Terrasse h1 und die höchste Höhe der Terrasse h2 ist
  • Ein Dämpfungswert, der den Boden im Bereich der Terrassenhöhe abflacht
  • Eine zweite Höhenkarte mit größerer Reichweite zum Ändern der h1- und h2-Werte. Auf diese Weise werden die durchgehenden Rampen zwischen den Terrassen gebildet (eine dritte Höhenkarte kann verwendet werden, um h1 und h2 unabhängig voneinander zu erhöhen oder zu verringern und größere oder kleinere Terrassen zu erstellen).

Hier ist die Vorgehensweise zum Erstellen des Effekts:

h1 = 1
h2 = 2
damp = .01

h = gen_noise(position)
hm = heightmod_noise(position)
if h1+hm <= initial_terrain_height =< h2+hm
  th = h * damp
elseif h2+hm < h
  th = h - (h2-h1) * damp
else
  th = h

(Dies ist natürlich die Höhe des Geländes, nachdem der Terrasseneffekt angewendet wurde.)

Juddily
quelle