AUTOR · Ken Perlin, 1985NAGRODA · Oscar techniczny, 1997IDEA · gradienty, nie wartościEXT OF · R.9
Wykład: Perlin Noise — część 1 z 4

Idea szumu gradientowego

Rozdział 9 pokazał szum Perlina jako feTurbulence — czarną skrzynkę, która dawała ładny, organiczny wzór. Ten wykład otwiera tę skrzynkę: skąd bierze się gładkość, dlaczego akurat gradienty, i jak policzyć to na kartce.

TL;DR
Pass: Motywacja

Czemu nie wystarczy zwykły szum losowy

Weź czystą, przypadkową wartość w każdym punkcie siatki (value noise) i interpoluj między nimi liniowo. Wynik jest ciągły, ale wygląda źle — widać krawędzie komórek siatki jako subtelne „załamania”, bo liniowa interpolacja między przypadkowymi wartościami nie ma gładkiego przejścia w pochodnej. Perlin zauważył, że problem nie jest w interpolacji — jest w tym, co interpolujesz.

Value.noise.vs.gradient.noiseschematically
VALUE NOISE (interpolacja wartości) widoczna „siatkowość” GRADIENT NOISE (Perlin) gładkie, organiczne przejścia
Oba obrazy to prawdziwy feTurbulence — różnica w charakterze wynika z tego, co faktycznie leży w węzłach siatki.
Pass: Idea

Gradienty w węzłach, nie wartości

Perlin noise przypisuje każdemu węzłowi siatki nie liczbę, a wektor gradientu — losowy kierunek, jednostkowej długości. Dla punktu zapytania P wewnątrz komórki, dla każdego z sąsiadujących węzłów liczysz wektor odległości od tego węzła do P, a potem iloczyn skalarny (Rozdział 2!) tego wektora z gradientem węzła. To „ile P zgadza się z kierunkiem, który ten węzeł preferuje” — a to naturalnie daje zero w samym węźle (bo wektor odległości do siebie samego ma długość zero) i gładko rośnie/opada, gdy odchodzisz od węzła w stronę, z którą gradient się zgadza albo nie.

Grid.gradients.setupquery point inside a cell
P amber = losowe gradienty w węzłach cyan = wektory odległości do P
Cztery gradienty, cztery wektory odległości, cztery iloczyny skalarne — to jest cały surowy materiał na jedną próbkę szumu.
Z praktyki

To dokładnie ta różnica, którą czasem widzisz jako opcję „Noise Type: Value / Perlin / Simplex” w node’ie szumu w Blenderze, Substance czy Houdinim. Value noise jest szybszy, ale przy dużym zbliżeniu widać „kafelkowanie”. Perlin/Simplex kosztują trochę więcej, ale nie mają tej wady — to właśnie dlatego są domyślnym wyborem do organicznych wzorów: chmur, marmuru, terenu.

Słowniczek
Value noise
Losowa wartość w węźle siatki, interpolowana — podatna na widoczną siatkowość.
Gradient noise (Perlin)
Losowy wektor kierunku w węźle, użyty przez iloczyn skalarny.
Wektor odległości
Wektor od węzła siatki do punktu zapytania P.