Funkcje górskich tarasów

10

Chcę odtworzyć efekt terenu proceduralnego, który znalazłem na stronie portfolio / blogu kilka dni temu.

Tarasowy teren

Cytując miejsce, taras został wygenerowany poprzez „pomnożenie [ostatecznej wysokości] przez pewną wartość tłumienia w pewnym zakresie wysokości, aby stworzyć piękne cechy kanionu”.

Zastanawiałem się, czy ktokolwiek byłby w stanie podać bardziej techniczny przykład lub procedurę, aby to zrobić? W ciągu ostatniego tygodnia dużo badałem i uczyłem się o proceduralnych metodach i teksturach terenu, ale wciąż nie spotkałem się z niczym, co wyjaśnia szczegółowo, czym jest „zaciskanie” i zaczynam się denerwować.

Judy
źródło
To jest naprawdę miłe. Nie mogę też zrozumieć, co on ma na myśli. Próbowałeś wysłać facetowi wiadomość e-mail (jest dostępna pod „kontakt”)?
Draco18s nie ufa już SE
FYI: W swoim cytacie i źródle terminem jest „tłumienie”, ale później w pytaniu używasz „zaciskania”.
Pikalek

Odpowiedzi:

11

Nie wiem, co robi ich projekt, ale możesz zastosować funkcję zmiany kształtu do wysokości. Oto przykład, który przyjmuje hod 0,0 do 1,0 i zwraca nową wysokość od 0,0 do 1,0:

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;
}

Jest to funkcja, która wygląda tak po wydrukowaniu - oś x to pierwotna wysokość, a oś y to nowa wysokość:

Funkcja zmiany kształtu

Zastosowałem go do własnego kodu i otrzymałem:

Wyjście funkcji tarasowej

Możesz zastosować dowolną funkcję przekształcania lub połączyć je razem, aby uzyskać zgrabne efekty. Dostajesz tarasy, gdy są płaskie sekcje wyjścia.

amitp
źródło
Przysięgam, że w pytającym pytaniu jest gładka ścieżka, która wychodzi na taras, ale patrząc na to ponownie, jestem prawie pewien, że to złudzenie. Ale moje oczy wciąż nalegają, aby nie, nastąpiła tam zmiana wysokości (środek obrazu do górnego rogu / lewej górnej krawędzi). Jeśli nie ma podwyżki, to odpowiedź jest poprawna.
Draco18s nie ufa już
1

Tłumienie to fizyczny termin określający wpływ w obrębie lub na układ oscylacyjny, który powoduje zmniejszenie, ograniczenie lub zapobieganie jego oscylacjom.

Podejrzewam, że twój artykuł źródłowy mógł mieć literówkę i oznaczał zaciskanie , co ogólnie odnosi się do ograniczenia wartości do określonego zakresu.

Jeśli chodzi o osiągnięcie efektu wizualnego, możesz uzyskać coś podobnego, zaciskając pasma hałasu podczas budowania terenu, ale rozwiązanie podane przez @amitp bardziej odpowiada oryginalnemu opisowi i prawdopodobnie jest łatwiejsze do wdrożenia i dostrojenia.

Trzecią opcją może być użycie technik erozyjnych. Oto jeden ze sposobów tworzenia kombinacji klif i plaża , upuszczając fragment pochyłej ziemi. Oto kolejna, która może zerwać szczyty na płaskowyże .

Pikalek
źródło
0

Po bardzo długiej przerwie rozumiem, w jaki sposób efekt został osiągnięty, i jest to niesamowicie proste. Ten efekt składa się z 4 części:

  • Początkowa mapa wysokości terenu
  • Definiowanie „zasięgu” tarasu, przy czym najniższa wysokość tarasu wynosi h1, a najwyższa wysokość tarasu wynosi h2
  • Wartość tłumienia, która spłaszcza ziemię w zakresie wysokości tarasu
  • Druga mapa wysokości o większym zasięgu do modyfikowania wartości h1 i h2, czyli w jaki sposób tworzone są ciągłe rampy między tarasami (trzecia mapa wysokości może być używana do zwiększania lub zmniejszania h1 i h2 niezależnie od siebie, tworząc większe lub mniejsze tarasy)

Oto procedura tworzenia efektu:

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

(th, oczywiście, jest wysokość terenu po zastosowaniu efektu tarasowania)

Judy
źródło