diff --git a/13/README-pl.md b/13/README-pl.md index ff49330..0c1a784 100644 --- a/13/README-pl.md +++ b/13/README-pl.md @@ -1,8 +1,8 @@ ![Due East over Shadequarter Mountain - Matthew Rangel (2005) ](rangel.jpg) -## Fractal Brownian Motion +## Fractal Brownian Motion (pol. "fraktalne ruchy Browna") -Hałas zwykle oznacza różne rzeczy dla różnych ludzi. Muzycy będą myśleć o nim w kategoriach przeszkadzających dźwięków, komunikatorzy jako o zakłóceniach, a astrofizycy jako o kosmicznym mikrofalowym promieniowaniu tła. Te koncepcje sprowadzają nas z powrotem do fizycznych przyczyn losowości w otaczającym nas świecie. Zacznijmy jednak od czegoś bardziej podstawowego i prostszego: od fal i ich właściwości. Fala jest fluktuacją w czasie jakiejś właściwości. Fale dźwiękowe to fluktuacje ciśnienia powietrza, fale elektromagnetyczne to fluktuacje pola elektrycznego i magnetycznego. Dwie ważne cechy fali to jej amplituda i częstotliwość. Równanie dla prostej liniowej (jednowymiarowej) fali wygląda tak: +Szum zwykle oznacza różne rzeczy dla różnych ludzi. Muzycy będą myśleć o nim w kategoriach przeszkadzających dźwięków, komunikatorzy jako o zakłóceniach, a astrofizycy jako o kosmicznym mikrofalowym promieniowaniu tła. Te koncepcje sprowadzają nas z powrotem do fizycznych przyczyn losowości w otaczającym nas świecie. Zacznijmy jednak od czegoś bardziej podstawowego i prostszego: od fal i ich właściwości. Fala jest fluktuacją w czasie jakiejś właściwości. Fale dźwiękowe to fluktuacje ciśnienia powietrza, fale elektromagnetyczne to fluktuacje pola elektrycznego i magnetycznego. Dwie ważne cechy fali to jej amplituda i częstotliwość. Równanie dla prostej liniowej (jednowymiarowej) fali wygląda tak: @@ -13,16 +13,16 @@ y = amplitude * sin(x * frequency); "> * Spróbuj zmienić wartości częstotliwości i amplitudy, aby zrozumieć, jak się zachowują. -* Używając funkcji kształtujących, spróbuj zmienić amplitudę w czasie. -* Używając funkcji kształtujących, spróbuj zmienić częstotliwość w czasie. +* Używając shaping functions, spróbuj zmienić amplitudę w czasie. +* Używając shaping functions, spróbuj zmienić częstotliwość w czasie. -Wykonując dwa ostatnie ćwiczenia udało Ci się "zmodulować" sinusoidę i właśnie stworzyłeś fale AM (modulowaną amplitudą) i FM (modulowaną częstotliwością). Gratulacje!!! +Wykonując dwa ostatnie ćwiczenia udało Ci się "zmodulować" sinusoidę i właśnie stworzyłeś fale AM (modulowane amplitudą, ang. "amplitude modulated") i FM (modulowane częstotliwością, ang. "frequency modulated"). Gratulacje!!! -Inną ciekawą właściwością fal jest ich zdolność do sumowania się, co formalnie nazywa się superpozycją. Skomentuj/nieskomentuj i podrasuj kolejne linie. Zwróć uwagę, jak zmienia się ogólny wygląd, gdy dodajemy do siebie fale o różnych amplitudach i częstotliwościach. +Inną ciekawą właściwością fal jest ich zdolność do sumowania się, co formalnie nazywa się superpozycją. Skomentuj/odkomentuj i zmodyfikuj poniższe linijki. Zwróć uwagę, jak zmienia się ogólny wygląd wykresu, gdy dodajemy do siebie fale o różnych amplitudach i częstotliwościach. -Teraz użyjmy szumu Perlina zamiast sinusoidy! Szum Perlina w swojej podstawowej formie ma taki sam ogólny wygląd i odczucia jak sinusoida. Jego amplituda i częstotliwość różnią się nieco, ale amplituda pozostaje w miarę stała, a częstotliwość jest ograniczona do dość wąskiego zakresu wokół częstotliwości środkowej. Nie jest to jednak tak regularne jak sinusoida i łatwiej jest stworzyć pozory losowości poprzez zsumowanie kilku przeskalowanych wersji szumu. Można sprawić, że suma fal sinusoidalnych również będzie wyglądać na przypadkową, ale potrzeba wielu różnych fal, aby ukryć ich okresową, regularną naturę. +Teraz użyjmy szumu Perlina zamiast sinusoidy! Szum Perlina w swojej podstawowej formie wygląda podobnie do sinusoidy. Jego amplituda i częstotliwość różnią się nieco, ale amplituda pozostaje w miarę stała, a częstotliwość jest ograniczona do dość wąskiego zakresu wokół częstotliwości środkowej. Szum nie jest jednak tak regularny jak sinusoida, tym bardziej, gdy zsumujemy jego kilka przeskalowanych wersji. Można sprawić, że suma fal sinusoidalnych również będzie wyglądać na przypadkową, ale potrzeba wielu różnych fal, aby ukryć ich okresową, regularną naturę. -Poprzez dodanie różnych iteracji szumu (*oktaw*), gdzie kolejno zwiększamy częstotliwości w regularnych krokach (*lacunarity*) i zmniejszamy amplitudę (*gain*) **szumu** możemy uzyskać drobniejszą ziarnistość szumu i uzyskać więcej szczegółów. Technika ta nazywana jest "fraktalnym ruchem Browna" (*fBM*), lub po prostu "fraktalnym szumem", i w najprostszej formie może być stworzona przez następujący kod: +Poprzez dodanie różnych iteracji szumu (*octaves*, pol. "oktawy"), gdzie kolejno zwiększamy częstotliwości w regularnych krokach (*lacunarity*, pol. "lakunarność") i zmniejszamy amplitudę (*gain*, pol. "wzmocnienie") make a sum of sine waves appear random as well, but it takes many different waves to hide their periodic, regular nature. - + -->
-* Stopniowo zmieniaj liczbę oktaw do iteracji z 1 do 2, 4, 8 i 10. Zobacz, co się stanie. -* Gdy masz więcej niż 4 oktawy, spróbuj zmienić wartość lacunarity. -* Również przy >4 oktawach zmień wartość wzmocnienia i zobacz, co się stanie. +* Stopniowo zmieniaj liczbę oktaw z 1 do 2, 4, 8 i 10. Zobacz, co się stanie. +* Gdy masz więcej niż 4 oktawy, spróbuj zmienić wartość `lacunarity`. +* Również przy >4 oktawach zmień wartość `gain` i zobacz, co się stanie. -Zauważ, że z każdą dodatkową oktawą krzywa wydaje się być bardziej szczegółowa. Zauważ też, że w miarę dodawania kolejnych oktaw następuje samopodobieństwo. Jeśli powiększysz krzywą, mniejsza część wygląda mniej więcej tak samo jak całość, a każda sekcja wygląda mniej więcej tak samo jak każda inna. Jest to ważna właściwość fraktali matematycznych, a my symulujemy tę właściwość w naszej pętli. Nie tworzymy *prawdziwego* fraktala, ponieważ zatrzymujemy sumowanie po kilku iteracjach, ale teoretycznie rzecz biorąc, uzyskalibyśmy prawdziwy fraktal matematyczny, gdybyśmy pozwolili pętli trwać w nieskończoność i dodawali nieskończoną liczbę składowych szumu. W grafice komputerowej zawsze mamy limit najmniejszych szczegółów, które możemy rozwiązać, na przykład gdy obiekty stają się mniejsze niż piksel, więc nie ma potrzeby wykonywania nieskończonych sum, aby stworzyć wygląd fraktala. Czasami może być potrzebna duża ilość określeń, ale nigdy nieskończona liczba. +Zauważ, że z każdą dodatkową oktawą krzywa wydaje się być bardziej szczegółowa. Zauważ też, że w miarę dodawania kolejnych oktaw występuje efekt samopodobieństwa - jeśli powiększysz krzywą, przybliżona część wygląda mniej więcej tak samo jak całość, a każda część wygląda mniej więcej tak samo jak każda inna. Jest to ważna właściwość fraktali matematycznych, a my symulujemy tę właściwość w naszej pętli. Nie tworzymy *prawdziwego* fraktala, ponieważ zatrzymujemy sumowanie po kilku iteracjach, ale teoretycznie rzecz biorąc, uzyskalibyśmy prawdziwy fraktal matematyczny, gdybyśmy pozwolili pętli trwać w nieskończoność i dodawali nieskończoną liczbę składowych szumu. W grafice komputerowej zawsze mamy limit najmniejszych szczegółów, które możemy wyrenderować, gdyż obiekty stają się mniejsze niż piksel, więc nie ma potrzeby wykonywania nieskończonych sum, aby stworzyć wygląd fraktala. Czasami może być potrzebna duża ilość iteracji, ale nigdy nieskończona liczba. @@ -94,21 +92,21 @@ Poniższy kod jest przykładem tego, jak fBm może być zaimplementowany w dwóc
-* Zmniejsz liczbę oktaw poprzez zmianę wartości na linii 37 -* Zmodyfikuj lakoniczność fBm na linii 47 -* Eksploruj poprzez zmianę wzmocnienia na linii 48 +* Zmniejsz liczbę oktaw poprzez zmianę wartości w linii 37 +* Zmodyfikuj `lacunarity` fBm w linii 47 +* Eksploruj zmianę `gain` na linii 48 -Ta technika jest powszechnie używana do konstruowania proceduralnych krajobrazów. Samopodobieństwo fBm jest idealne dla gór, ponieważ procesy erozji, które tworzą góry, działają w sposób, który daje ten rodzaj samopodobieństwa w dużym zakresie skali. Jeśli jesteś zainteresowany tym zastosowaniem, powinieneś koniecznie przeczytać [ten świetny artykuł Inigo Quilesa o zaawansowanym szumie](http://www.iquilezles.org/www/articles/morenoise/morenoise.htm). +Ta technika jest powszechnie używana do konstruowania proceduralnych krajobrazów. Samopodobieństwo fBm jest idealne dla gór, ponieważ procesy erozji, które tworzą góry, działają w sposób, który daje ten rodzaj samopodobieństwa w dużym zakresie skal. Jeśli jesteś zainteresowany tym zastosowaniem, powinieneś koniecznie przeczytać [ten świetny artykuł Inigo Quilesa o zaawansowanym szumie](http://www.iquilezles.org/www/articles/morenoise/morenoise.htm). ![Blackout - Dan Holdsworth (2010)](holdsworth.jpg) -Używając mniej więcej tej samej techniki, możliwe jest również uzyskanie innych efektów, takich jak to, co jest znane jako **turbulencja**. Jest to w zasadzie fBm, ale skonstruowane z wartości bezwzględnej podpisanego szumu, aby stworzyć ostre doliny w funkcji. +Używając mniej więcej tej samej techniki, możliwe jest również uzyskanie innych efektów, takich jak **turbulencja**. Jest to w zasadzie fBm, ale skonstruowane z wartości bezwzględnej szumu (wariantu zwracającego również ujemne wartości), aby stworzyć ostre doliny w funkcji. @@ -122,36 +120,36 @@ for (int i = 0; i < OCTAVES; i++) { -Innym członkiem tej rodziny algorytmów jest **ridge**, w którym ostre doliny są odwrócone do góry nogami, tworząc zamiast nich ostre grzbiety: +Innym członkiem tej rodziny algorytmów jest **ridge** (pol. "grzbiet"), w którym ostre doliny są odwrócone do góry nogami, tworząc zamiast nich ostre grzbiety: ```glsl - n = abs(n); // create creases - n = offset - n; // invert so creases are at top - n = n * n; // sharpen creases + n = abs(n); // Stwórz doliny + n = offset - n; // Odwróć doliny, aby powstały grzbiety + n = n * n; // Zaostrz grzbiety ``` -Innym wariantem, który może tworzyć użyteczne wariacje, jest mnożenie składowych szumu razem zamiast ich dodawania. Interesujące jest również skalowanie kolejnych funkcji szumu za pomocą czegoś, co zależy od poprzednich terminów w pętli. Kiedy robimy takie rzeczy, odchodzimy od ścisłej definicji fraktala i wchodzimy w stosunkowo nieznaną dziedzinę "multifraktali". Multifraktale nie są tak ściśle zdefiniowane matematycznie, ale to nie czyni ich mniej użytecznymi dla grafiki. W rzeczywistości symulacje multifraktalne są bardzo powszechne we współczesnym komercyjnym oprogramowaniu do generowania terenu. Aby przeczytać więcej, możesz przeczytać rozdział 16 książki "Texturing and Modeling: a Procedural Approach" (3rd edition), autorstwa Kentona Musgrave. Niestety, książka ta jest już od kilku lat niedostępna w druku, ale wciąż można ją znaleźć w bibliotekach i na rynku wtórnym. (Istnieje wersja PDF pierwszego wydania dostępna do kupienia online, ale nie kupuj tego - to strata pieniędzy. Jest z 1994 roku i nie zawiera żadnych rzeczy związanych z modelowaniem terenu z 3 edycji). +Innym użytecznym wariantem jest mnożenie składowych szumu zamiast ich dodawania. Interesujące jest również skalowanie kolejnych funkcji szumu za pomocą czegoś, co zależy od poprzednich terminów w pętli. Kiedy robimy takie rzeczy, odchodzimy od ścisłej definicji fraktala i wchodzimy w stosunkowo nieznaną dziedzinę "multifraktali". Multifraktale nie są tak ściśle zdefiniowane matematycznie, ale to nie czyni ich mniej użytecznymi dla grafiki. W rzeczywistości symulacje multifraktalne są bardzo powszechne we współczesnym komercyjnym oprogramowaniu do generowania terenu. Aby przeczytać więcej, możesz przeczytać rozdział 16 książki "Texturing and Modeling: a Procedural Approach" (3. edycja), autorstwa Kentona Musgrave. Niestety, książka ta jest już od kilku lat niedostępna w druku, ale wciąż można ją znaleźć w bibliotekach i na rynku wtórnym. (Istnieje wersja PDF pierwszego wydania dostępna do kupienia online, ale nie kupuj tego - to strata pieniędzy. Jest z 1994 roku i nie zawiera żadnych rzeczy związanych z modelowaniem terenu z 3. edycji). -### Domain Warping +### Warping (pol. "zakrzywianie") -[Inigo Quiles napisał ten inny fascynujący artykuł](http://www.iquilezles.org/www/articles/warp/warp.htm) o tym jak można użyć fBm do wypaczenia przestrzeni fBm. Zdumiewające, prawda? To jak sen wewnątrz snu o Incepcji. +[Inigo Quiles napisał też inny fascynujący artykuł](http://www.iquilezles.org/www/articles/warp/warp.htm) o tym jak można użyć fBm do zakrzywienia przestrzeni fBm. Zdumiewające, prawda? To jak sen wewnątrz snu o Incepcji. ![ f(p) = fbm( p + fbm( p + fbm( p ) ) ) - Inigo Quiles (2002)](quiles.jpg) -Mniej ekstremalnym przykładem tej techniki jest następujący kod, w którym owijka jest używana do wytworzenia tej tekstury przypominającej chmury. Zauważ, jak właściwość samopodobieństwa jest nadal obecna w wyniku. +Mniej ekstremalnym przykładem tej techniki jest następujący kod, w którym zakrzywienie jest używane do wytworzenia tekstury przypominającej chmury. Zauważ, że właściwość samopodobieństwa jest nadal obecna.
-Wypaczanie współrzędnych tekstury za pomocą szumu w ten sposób może być bardzo użyteczne, daje dużo zabawy i jest diabelnie trudne do opanowania. Jest to potężne narzędzie, ale potrzeba sporo doświadczenia, aby dobrze je wykorzystać. Przydatnym narzędziem do tego jest przemieszczanie współrzędnych za pomocą pochodnej (gradientu) szumu. [Na tym pomyśle opiera się słynny artykuł Kena Perlina i Fabrice'a Neyreta o nazwie "szum przepływu"](http://evasion.imag.fr/Publications/2001/PN01/). Niektóre nowoczesne implementacje szumu Perlina zawierają wariant, który oblicza zarówno funkcję, jak i jej analityczny gradient. Jeśli "prawdziwy" gradient nie jest dostępny dla funkcji proceduralnej, zawsze możesz obliczyć różnice skończone, aby ją przybliżyć, chociaż jest to mniej dokładne i wymaga więcej pracy. +Zakrzywienie współrzędnych tekstury za pomocą szumu może być bardzo użyteczne, daje dużo frajdy, ale jest diabelnie trudne do opanowania. Jest to potężne narzędzie, ale potrzeba sporo doświadczenia, aby dobrze je wykorzystać. Przydatnym narzędziem do tego jest przemieszczanie współrzędnych za pomocą pochodnej (gradientu) szumu. [Na tym pomyśle opiera się słynny artykuł Kena Perlina i Fabrice'a Neyreta o nazwie "flow noise"](http://evasion.imag.fr/Publications/2001/PN01/). Niektóre nowoczesne implementacje szumu Perlina zawierają wariant, który oblicza zarówno funkcję, jak i jej analityczny gradient. Jeśli "prawdziwy" gradient nie jest dostępny dla proceduralnej funkcji, zawsze możesz obliczyć skończone różnice, aby ją przybliżyć, chociaż jest to mniej dokładne i wymaga więcej pracy.