TYP · infinite area lightMAPA · equirectangularSAMPLING · ważony jasnościąEXT OF · R.15,16,21 · Dodatek B,V
Dodatek Y / Światła

Environment lighting: HDRI jako źródło światła

Rozdział 21 nauczył Cię liczyć niebo proceduralnie, wzorem. Ale najczęstsze źródło światła w prawdziwej produkcji to nie wzór — to zdjęcie panoramiczne. Ten dodatek pokazuje, jak jeden obraz staje się źródłem światła dla całej scenie.

TL;DR
Pass: Idea

Obraz jako światło z każdego kierunku naraz

W Rozdziale 15, gdy promień nie trafiał w żaden obiekt, po prostu kończył ścieżkę bez wkładu światła. Environment light zmienia to: kierunek promienia, który uciekł ze scenę, odpytuje panoramiczny obraz (HDRI — High Dynamic Range Image, żeby poprawnie reprezentować bardzo jasne słońce i bardzo ciemne cienie w jednym pliku) i zwraca jego wartość jako Le — tak, jakby całe niebo (albo cała otaczająca scena, nagrana w realnym studiu czy plenerze) było jednym, nieskończenie odległym światłem.

To odpytywanie panoramy na nowo przy każdym odbiciu ścieżki ma sens w path tracerze, który i tak liczy się minutami — ale nie w silniku renderującym 60 klatek na sekundę.

↓ Dodatek AF — jak silniki real-time robią to samo bez odpytywania panoramy co klatkę
Equirectangular.mappingsphere ↔ panorama
sfera kierunków (θ,φ) u = φ/2π, v = θ/π
Ta sama siatka, rozwinięta — tak samo, jak mapa świata rozwija globus.
u = φ / 2π, v = θ / π(θ, φ) — standardowe współrzędne sferyczne kierunku promienia; (u,v) — współrzędne piksela w obrazie panoramicznym, dokładnie ta sama logika co „spherical camera” z Rozdziału 3, tylko w drugą stronę
Pass: Sampling

Czemu nie próbkujesz jednorodnie

Jednorodne próbkowanie kierunku (jak w podstawowym Rozdziale 15) działa źle, jeśli w HDRI jest mały, bardzo jasny obszar — widoczne słońce, okno, żarówka w kadrze zdjęcia panoramicznego. To dokładnie problem „igły w stogu siana” z Rozdziału 16, tylko teraz igła jest zaszyta w pikselach obrazu, nie w geometrii szkła.

Rozwiązanie: zbuduj rozkład prawdopodobieństwa proporcjonalny do jasności (luminancji) każdego piksela, i próbkuj dokładnie metodą odwrotnej CDF z Dodatku V — najpierw wybierz wiersz (skumulowana jasność wierszy), potem kolumnę w tym wierszu (skumulowana jasność pikseli w wierszu). To dwuwymiarowe rozszerzenie tej samej, jednej techniki.

Luminance.importance.samplingbright spot in HDRI
jasny obszar (np. słońce w HDRI) próbki skupione tam, gdzie jasność jest największa
Ta sama liczba próbek — skupiona tam, gdzie każda z nich wnosi najwięcej do obrazu.
Z praktyki

„World Background” w Blenderze, „Skydome/HDRI light” w Arnoldzie i V-Rayu, „Env Light” w Unrealu — wszystkie robią dokładnie to. Format .hdr/.exr przechowuje pełny zakres jasności (stąd „HDR” — słońce może mieć wartość tysięcy, cień 0,01, bez utraty informacji, dokładnie jak scene-referred z Dodatku E). Jeśli render z HDRI jest wyjątkowo szumiący przy niskiej liczbie próbek, prawdopodobnie silnik nie ma włączonego (albo nie ma wcale) importance sampling po jasności obrazu — to pierwsze ustawienie do sprawdzenia.

Słowniczek
Environment light / infinite area light
Źródło światła zdefiniowane obrazem panoramicznym, nieskończenie odległe.
HDRI
Obraz o wysokim zakresie dynamiki, przechowujący realne wartości radiancji.
Mapowanie equirectangular
Liniowe odwzorowanie kierunku sferycznego na piksel obrazu panoramicznego.
Importance sampling po luminancji
Próbkowanie obrazu proporcjonalnie do jasności jego pikseli.
Idź głębiej
Dodatek AF — Prefiltered IBL: irradiance i split-sum