Rozdział 16 pokazał dwie odpowiedzi na pytanie „co, gdy losowa ścieżka prawie nigdy nie trafia w światło”: budowanie z dwóch stron i rozsiewanie fotonów. Są jeszcze trzy, zupełnie inne — i każda z nich opiera się na tym samym pomyśle: nie wyrzucaj pracy, którą już wykonałeś.
Wróćmy do kaustyki z Rozdziału 16: wąskie okno kierunków, przez które światło przechodzi do kamery, i miliony losowań, które w nie nie trafiają. Path tracer traktuje każdą próbkę niezależnie, więc po znalezieniu jednej udanej ścieżki wyrzuca ją i zaczyna od zera. To jest dokładnie ta praca, którą MLT postanawia zachować.
Metropolis Light Transport działa tak: znajdź jakąkolwiek ścieżkę, która niesie energię. Potem zaburz ją nieznacznie — przesuń jeden wierzchołek, zmień jeden kąt — i sprawdź, ile niesie nowa wersja. Jeśli niesie porównywalnie dużo, przyjmij ją i mutuj dalej. Jeśli znacznie mniej, odrzuć ją z odpowiednim prawdopodobieństwem i wróć do poprzedniej.
Reguła akceptacji nie jest dowolna — pochodzi z algorytmu Metropolisa-Hastingsa i gwarantuje, że po dostatecznie wielu krokach ścieżki są odwiedzane z częstością proporcjonalną do niesionej energii. Estymator pozostaje więc nieobciążony, mimo że kolejne próbki są ze sobą jawnie skorelowane.
Ta korelacja jest zarazem ceną. Szum przestaje wyglądać jak ziarno z Rozdziału 15, a zaczyna jak nierówne plamy: jeden fragment obrazu jest wygładzony, bo łańcuch spędził tam dużo kroków, sąsiedni zaszumiony, bo nie zdążył go odwiedzić. W animacji plamy migoczą między klatkami. Dlatego MLT, mimo teoretycznej siły, pozostaje narzędziem do konkretnych trudnych ujęć, a nie domyślnym trybem produkcyjnym.
Drugi pomysł wychodzi od obserwacji o samym obrazie, nie o ścieżkach: sąsiedni piksel prawie zawsze patrzy na tę samą powierzchnię, w podobnym oświetleniu. Jeśli on znalazł dobre światło do próbkowania, to jest spora szansa, że dla mnie też będzie dobre.
ReSTIR zamienia tę intuicję w algorytm. Każdy piksel trzyma rezerwuar — jedną wybraną próbkę wraz z wagą podsumowującą wszystkich kandydatów, którzy się o to miejsce ubiegali. Rezerwuary można łączyć: biorąc rezerwuar sąsiada, dostajesz jego kandydatów bez ponownego liczenia czegokolwiek, a wagi pilnują, żeby wynik pozostał statystycznie poprawny.
Dalej robi się to w dwóch osiach naraz. Przestrzennie — łącząc z kilkoma sąsiadami w obrazie. Czasowo — łącząc z rezerwuarem tego samego punktu w poprzedniej klatce, znalezionym przez reprojekcję opisaną w Rozdziale 19. Po kilku klatkach jeden piksel dysponuje efektywnie setkami kandydatów, choć w każdej klatce policzył kilku.
To dlatego ReSTIR był przełomem dla czasu rzeczywistego: pozwolił na sensowne oświetlenie od tysięcy źródeł przy budżecie kilku próbek na piksel. Ograniczenia są lustrzanym odbiciem zalet — reprojekcja zawodzi tam, gdzie historia jest nieprawdziwa, czyli przy cięciu montażowym, szybkim ruchu i odsłanianiu wcześniej zasłoniętej geometrii. Wtedy trzeba historię odrzucić i zacząć zbierać od nowa, co widać jako chwilowy skok szumu.
Rozdział 19 opisał denoiser neuronowy jako filtr na końcu procesu: szumiący obraz plus czyste bufory na wejściu, wygładzony obraz na wyjściu. To najbardziej oswojone zastosowanie sieci w rendererze, ale nie jedyne.
Rekonstrukcja klatek przenosi ten sam pomysł na czas i rozdzielczość: sieć dostaje serię klatek w niższej rozdzielczości wraz z wektorami ruchu i produkuje klatki w wyższej, a czasem także klatki pośrednie, których nikt nie renderował. Renderer liczy wtedy ułamek pikseli, a resztę dopowiada model.
Neuronowy cache radiancji idzie głębiej — do samego wnętrza pętli z Rozdziału 15. Zamiast kontynuować odbicia aż do końca ścieżki, po kilku odbiciach renderer pyta małą sieć: „ile światła przychodzi mniej więcej do tego punktu z tego kierunku?”. Sieć uczy się tego w trakcie renderowania, na bieżąco. Ścieżki robią się krótsze, a ich ogony — najdroższe i wnoszące najmniej — zastępuje jedno zapytanie.
Warto nazwać wspólną cechę wszystkich tych metod uczciwie: przestają być nieobciążone. Path tracer z Rozdziału 15 gwarantował, że przy dostatecznej liczbie próbek zbiegnie do prawidłowego wyniku. Sieć nie daje takiej gwarancji — daje wynik wiarygodny, dopasowany do tego, na czym ją wytrenowano. Dla filmu i gry to zwykle wystarcza aż nadto; dla symulacji, w której obraz jest pomiarem, nie wystarcza wcale. To rozróżnienie decyduje o tym, gdzie tych metod wolno używać.
Z tej trójki w produkcji filmowej spotkasz przede wszystkim rekonstrukcję neuronową w postaci denoisera (Rozdział 19). MLT bywa dostępny w silnikach jako osobny tryb integratora i włącza się go świadomie, do ujęcia z trudnym transportem — nie jako ustawienie domyślne. ReSTIR żyje głównie po stronie czasu rzeczywistego, w silnikach gier i podglądach interaktywnych.
Wspólny objaw diagnostyczny, po którym poznaje się wszystkie trzy: gdy szum przestaje być drobnoziarnisty i zaczyna mieć strukturę — plamy, smugi za ruchem, migotanie między klatkami — to znak, że któraś z tych technik ponownie użyła informacji, która przestała być prawdziwa. Zwiększanie liczby próbek pomaga wtedy dużo wolniej, niż podpowiada intuicja z Rozdziału 8.
To domyka Część VIII i całą książkę. Wszystkie osiem dodatków tej części łączy jedno: opisują to, co dzieje się wokół mechanizmu z rozdziałów głównych — a mechanizm zostaje ten sam, niezależnie od tego, ile warstw narośnie nad nim w kolejnej dekadzie.