Przesunięcie w punkcie środkowym: szorstkość z jednego losowego liczby
Najprostszy algorytm terenu fraktalnego, przesunięcie punktu środkowego, zaczyna się od tylko czterech narożników kwadratu ustawionych na pewnym nachyleniu i powtarza się podział na pół: znajdź środek każdej krawędzi, uśrednij dwa końce, a następnie dodaj losowe przesunięcie. Zrób to rekurencyjnie i powstaje szorstki, samopodobny profil z prawie niczego – ta sama idea wykorzystywana do generowania fal brzegowych i krajobrazów górskich w jednym wymiarze przed jej rozszerzeniem na pełną wysokość 2D.
Algorytm diament-kwadrat
Algorytm diament-kwadrat, opracowany w latach 80. jako rozwiązanie dla artefaktów kierunkowych w prostych metodach przesunięcia środka na płaszczyźnie 2D, polega na alternatywnym wykonywaniu dwóch kroków na siatce o wymiarach 2ⁿ+1 po każdej stronie. Krok diamentowy przyjmuje każdy kwadrat z czteryma narożnikami i ustawia jego środek na średnią z tych czterech narożników plus losowe przesunięcie; krok kwadratowy przyjmuje każdy diament z już ustalonych punktów i ustawia jego środek (środek krawędzi siatki) na ich średnią plus losowe przesunięcie, z powrotami lub obcięciem na granicy siatki.
diamond step: center = avg(4 corners of a square) + random(±r) square step: center = avg(4 corners of a diamond) + random(±r) after each pass: step size /= 2, r *= 2^(-H)
Współczynnik Hurst: zamiana szumu w wiarygodne krajobrazy
Jednoparamieterowy współczynnik Hurst decyduje, czy wygenerowany krajobraz będzie przypominał łagodne wzgórza, czy też ostre szczyty górskie. Określa on szybkość zanikania losowego przesunięcia w miarę pogłębiania siatki: mnożenie zakresu przesunięć przez 2⁻ᴴ na każdym podwojeniu kroku. Niski współczynnik Hurst (blisko 0) utrzymuje duże losowe przesunięcia nawet przy wysokiej rozdzielczości, produkując szorstkie, ostre tereny o dużej częstotliwości; wysoki współczynnik Hurst (blisko 1) szybko redukuje losowość na małą skalę, tworząc gładkie, faliste tereny dominowane przez strukturę na dużą skalę wykształconą w pierwszych kilku iteracjach. Współczynnik Hurst jest bezpośrednio związany z wymiarami fraktalnymi krajobrazu, D = 3 − H dla powierzchni dwuwymiarowej, co stanowi formalne uzasadnienie nazywania wyniku krajobrazem fraktalnym – posiada dobrze zdefiniowaną, niecałkowitą wymiarowość, a statystyczna szorstkość wygląda podobnie niezależnie od tego, czy powiększymy góry, czy pojedynczy zbocze.
Dlaczego rzeczywiste tereny rzeczywiście wyglądają na fraktalne
To nie jest jedynie wygodne przypadek graficzny w komputerze — rzeczywiste tereny naprawdę wykazują samopowtarzalność skalną w szerokim zakresie skal, właściwość ta została po raz pierwszy ilościowo określona przez badania Benoita Mandelbrota dotyczące wybrzeży i gór w latach 70. Wzmaganie, osadzanie się i ruchy tektoniczne działają jednocześnie na wielu skalach przestrzennych z przybliżonymi statystykami samopowtarzalnymi, więc spektrum wysokości oparte na prawie potęg z wykładnikami Hurst zazwyczaj między 0,4 a 0,9 dla prawdziwych krajobrazów okazuje się być godnym uwagi statystycznym modelem, a nie tylko wizualnie przekonującym oszustwem.
Klasyczny artefakt szwu i dlaczego się pojawia
Prawidłowa implementacja przetwarza każdy kwadrat niezależnie, co oznacza, że współdzielony punkt środka krawędzi jest obliczany i losowo przesuwany dwukrotnie – raz przez dwa kwadraty, które go dzielą, a raz przez drugi – generując dwie różne wartości dla tego, co powinno być jedną współdzieloną wysokością i widoczny rozleg (szw) biegnący wzdłuż linii siatki, które zbiegają się z pierwotnym podziałem na potęgi dwójki. Rozwiązaniem jest przetwarzanie każdego kwadratu krok po kroku dla całej siatki, a następnie każdego kroku diamentowego dla całej siatki przy danym skali, zawsze dzieląc się już obliczonymi wartościami krawędzi, zamiast ponownie je obliczać na każdy kwadrat; utrzymywanie synchronizacji między przejściami diamentowymi i kwadratowymi w całej siatce to właśnie to odróżnia schemat diament-kwadrat od starszego, podatnego na szwy schematu przesunięcia środka 2D, który zastąpił.
Poza diament-kwadratem: alternatywy oparte na szumie
Diament-kwadrat jest szybki i prosty, ale jego losowość jest związana z rekurencyjną strukturą siatki, co może powodować subtelne artefakty związane z siatką, nawet gdy jest prawidłowo zaimplementowany. Nowoczesne generatory krajobrazów częściej warstwują kilka oktaw szumu Perlin lub simplex o rosnącej częstotliwości i malejącej amplitudzie — koncepcyjnie to samo podejście polegające na sumowaniu detali w wielu skalach, ważonych parametrem szorstkości, ale zbudowane z gładkiej funkcji szumu odłączonej od siatki zamiast rekurencyjnego uśredniania punktów. Oba te podejścia są, w istocie, sposobami przybliżenia tego samego celu: rozkład potęgowy zmienności wysokości w skali, który jest matematycznym modelem prawdziwego krajobrazu fraktalnego.
Często zadawane pytania
Dlaczego algorytm diamond-square potrzebuje rozmiaru siatki 2^n + 1?
Ponieważ algorytm wielokrotnie dzieli krok na pół, a każde dzielenie musi dokładnie opadać na punkt siatki, aby etapy diamentu i kwadratu dopasowały się czysto. Rozmiar 2^n + 1 (np. 129, 257, 513) gwarantuje, że każde dzielenie generuje liczbę komórek bez reszty, aż do poziomu pojedynczej komórki.
Co kontroluje wykładnik Hurst?
Określa, jak szybko zanika losowy przesunięcie w miarę upraszczania terenu na coraz drobniejsze detale. Niski wykładnik Hurst utrzymuje dużą losowość na dużych skalach, tworząc szczytowe, górskie tereny; wysoki wykładnik Hurst szybko redukuje szczegóły, generując gładkie, pagórkowate tereny zdominowane przez kształt szerokiego obszaru ustalony na początku algorytmu.
Dlaczego naiwne implementacje powodują widoczne szwy?
Wspólny punkt siatki między sąsiednimi kwadratami jest obliczany i losowo przesuwany niezależnie przez każdy kwadrat, jeśli przejścia nie są odpowiednio zsynchronizowane, co prowadzi do uzyskania dwóch różnych wysokości dla jednego wspólnego punktu. Poprawne procesy diamond-square przetwarzają każdy punkt danego przejścia razem na całej siatce przed przejściem do następnej, drobniejszej fazy, unikając podwójnego przesunięcia.
Wypróbuj na żywo
Wszystko powyżej działa bezpośrednio w Twojej przeglądarce — otwórz Fractal Landscape i zmieniaj parametry podczas działania. Nic nie jest instalowane ani przesyłane na serwer, cały model działa w jednej karcie.
▶ Otwórz symulację Fractal Landscape