Cała ta książka liczyła światło trzema liczbami. To założenie było tak wygodne, że nikt go dotąd nie zakwestionował — a jest przybliżeniem, i to takim, które w konkretnych, rozpoznawalnych sytuacjach się rozpada. Ten dodatek pokazuje, gdzie dokładnie i co się wtedy robi.
Kiedy Rozdział 10 mnożył albedo przez światło kanał po kanale, milcząco zakładał, że trzy liczby wystarczą, żeby opisać, co się dzieje. Fizycznie światło jest rozkładem energii po długościach fali — funkcją ciągłą, nie trójką. Oko sprowadza tę funkcję do trzech wartości, bo ma trzy typy czopków, i właśnie dlatego RGB w ogóle działa: na końcu i tak wszystko trafia do trzech receptorów.
Problem polega na tym, że sprowadzenie do trójki następuje w rendererze na początku, a nie na końcu. Każde mnożenie po drodze — odbicie, załamanie, przejście przez ośrodek — wykonuje się wtedy na trzech liczbach zamiast na widmie. Dopóki żaden z tych kroków nie zależy mocno od długości fali, wynik jest praktycznie taki sam. Gdy zależy, wyniki się rozjeżdżają.
Skutek nazywa się metameryzmem: dwa różne widma mogą dawać identyczne RGB w jednym oświetleniu i wyraźnie różne w innym. Tkanina dopasowana kolorystycznie w świetle dziennym rozjeżdża się pod świetlówką — w realnym świecie to codzienność, w rendererze RGB nie ma prawa się wydarzyć, bo informacja o widmie została wyrzucona na wejściu.
Naiwne podejście do renderingu spektralnego — policz obraz osobno dla trzydziestu długości fali i złóż wyniki — jest trzydzieści razy droższe i nikt tak nie robi. Rozwiązanie jest dokładnie tym samym chwytem, którym Rozdział 15 poradził sobie z całką po hemisferze: losowaniem.
Skoro długość fali to kolejny wymiar całki, to można ją próbkować tak samo jak kierunek. Każda ścieżka dostaje wylosowaną długość fali — hero wavelength — i jest liczona wyłącznie dla niej, z wagą uwzględniającą prawdopodobieństwo tego wyboru. Uśrednienie wielu ścieżek zbiega się do prawidłowej całki po widmie, dokładnie tak jak uśrednianie kierunków zbiegało do całki po hemisferze.
Koszt pojedynczej ścieżki jest więc porównywalny z RGB. Płaci się szumem: pojawia się dodatkowy wymiar do pokrycia próbkami, więc przy tej samej liczbie próbek obraz jest bardziej zaszumiony, zwłaszcza w miejscach silnie zależnych od długości fali. W praktyce próbkuje się kilka długości naraz wokół tej wylosowanej, żeby ten szum ograniczyć.
To jest powód, dla którego rendering spektralny nie wymaga „innego renderera”. To ten sam path tracer z Rozdziału 15 z jedną dodatkową współrzędną w losowaniu.
Światło ma jeszcze jedną właściwość, której ta książka nigdzie nie modelowała: kierunek drgań. Fala świetlna drga prostopadle do kierunku lotu, a to, czy drgania są uporządkowane, czy przypadkowe, zmienia sposób, w jaki światło oddziałuje z powierzchniami.
Zjawisko jest pospolite. Odbicie od gładkiej powierzchni dielektrycznej — wody, szkła, lakieru — polaryzuje światło częściowo, a przy pewnym kącie niemal całkowicie. Na tym opiera się filtr polaryzacyjny fotografa: obraca się go tak, żeby wyciął uporządkowane drgania odbicia, zostawiając światło od obiektu. Efekt „zniknęły odblaski z wody” jest realny i wyraźny, a w renderze RGB nieosiągalny.
Widać stąd, dlaczego polaryzacji nie ma w standardowych rendererach: nie da się jej „dołożyć” jako opcji. Zmienia typ wielkości niesionej przez promień z jednej liczby na czwórkę i typ operacji z mnożenia na mnożenie macierzowe — czyli przebudowuje rdzeń całego silnika. Płaci się za to czterokrotnie większym kosztem transportu, a widać ją w niewielkim ułamku ujęć. Dlatego renderują ją zwykle silniki badawcze i te używane w symulacjach optycznych, a nie w produkcji filmowej.
Rendering spektralny jest dostępny w kilku silnikach produkcyjnych i badawczych — bywa domyślny tam, gdzie priorytetem jest wierność barwy, a opcjonalny tam, gdzie liczy się czas. Warto wiedzieć, że włączenie go zmienia znaczenie wejść materiału: kolor RGB trzeba wtedy podnieść do widma (upsampling), a ten krok nie jest jednoznaczny — kilka różnych widm daje ten sam RGB, więc renderer wybiera jedno według przyjętej reguły. Stąd drobne różnice barwy między trybem RGB a spektralnym przy identycznych wartościach.
Praktyczna wskazówka: jeśli tęcza w szkle wygląda jak trzy oddzielne paski zamiast płynnego przejścia, to nie jest kwestia liczby próbek, tylko właśnie granicy modelu RGB. Żadna wartość w ustawieniach jakości tego nie naprawi.
Ten dodatek rozszerzył to, co promień niesie. Ostatni dodatek tej części wraca do pytania, jak te promienie znajdować — do metod transportu, których Rozdziały 15 i 16 nie objęły.