Jedna warstwa szumu z części 2 wygląda gładko, ale nienaturalnie jednorodnie. Prawdziwe tekstury — obłoki, marmur, teren — mają detal w wielu skalach naraz. fBm dokłada go, warstwa po warstwie.
TL;DR
fBm sumuje wiele „oktaw” tej samej funkcji szumu, każdą z dwa razy większą częstotliwością i o połowę mniejszą amplitudą.
To dosłownie parametr numOctaves z feTurbulence w Rozdziale 9 — teraz wiesz, co on faktycznie robi pod maską.
Persistence (spadek amplitudy) i lacunarity (wzrost częstotliwości) kontrolują charakter wyniku: gładki i „miękki” kontra szczegółowy i „poszarpany”.
Pass: Wzór
Suma warstw, nie jedna funkcja
fBm(x) = Σᵢ persistenceⁱ · noise(lacunarityⁱ · x), dla i = 0, 1, 2, …persistence — jak szybko amplituda spada z każdą oktawą (typowo 0,5); lacunarity — jak szybko rośnie częstotliwość (typowo 2)
Przykład — suma trzech oktaw dla naszego punktu P
Oktawa 1 (częstotliwość ×1, amplituda 1,0): n₁ = 0,586 — to nasz w pełni policzony wynik z części 2.
Oktawa 2 (częstotliwość ×2, amplituda 0,5): przyjmijmy dla przykładu n₂ = 0,21 (policzone tą samą metodą, na nowej, gęściej podzielonej siatce).
Każda kolejna oktawa dodaje coraz mniejszy „szczegół” — n₃ ma zaledwie ¼ wpływu n₁, mimo że jej częstotliwość jest 4× wyższa.
Octave.stackingreal feTurbulence layers
Trzy prawdziwe, osobne warstwy szumu po lewej — i genuinalna suma wielu oktaw (feTurbulence numOctaves=4) po prawej.
Pass: Parametry
Persistence i lacunarity: charakter wzoru
Wysoki persistence (bliski 1,0) sprawia, że wysokoczęstotliwościowe oktawy wnoszą prawie tyle, co pierwsza — wynik jest szczegółowy, „poszarpany”, dobry na skały czy korę. Niski persistence (bliski 0,3) sprawia, że pierwsza oktawa dominuje — wynik jest gładki, miękki, dobry na obłoki czy delikatne przejścia koloru. Lacunarity większe niż standardowe 2 upakowuje detal gęściej przy każdej kolejnej oktawie.
Z praktyki
Node „Noise Texture” w Blenderze ma bezpośrednio pola „Detail” (liczba oktaw) i „Roughness” (persistence). VEX w Houdinim ma funkcję fbm() z tymi samymi parametrami pod tymi nazwami. To dokładnie ten wzór — żadna z tych implementacji nie robi nic innego niż suma z tego rozdziału.
Słowniczek
Oktawa
Jedna warstwa szumu o określonej częstotliwości i amplitudzie w sumie fBm.
fBm (fractal Brownian motion)
Suma wielu oktaw szumu, dająca detal w wielu skalach.
Persistence
Współczynnik spadku amplitudy między kolejnymi oktawami.
Lacunarity
Współczynnik wzrostu częstotliwości między kolejnymi oktawami.
Co dalej
Część 4, ostatnia: dlaczego Perlin sam ulepszył swój wynalazek w 2001 roku — simplex noise, i gdzie ten cały temat trafia w praktyce (displacement, wolumetria, atmosfera).