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.
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.
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.
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.
Część 2 rozpisuje cały algorytm krok po kroku, na w pełni zweryfikowanym przykładzie liczbowym — od czterech gradientów do jednej, konkretnej wartości szumu.