OKO · adaptacja do ~20 minZAKRES CHWILOWY · ~10⁴:1EKRAN SDR · ~10²:1LUKA · niedomknięta
Rozdział 2 / Fundamenty lookdevu

Jak widzi oko, jak widzi ekran

Zanim zaczniesz poprawiać kontrast na ekranie, warto wiedzieć, że Twoje oko już to robi sto razy szybciej — i dlaczego cała reszta książki bierze się z tej jednej różnicy.

TL;DR

Wyjdź w słoneczny dzień z ciemnego pomieszczenia i przez chwilę nic nie widzisz — za jasno. Wejdź do kina w środku seansu i przez chwilę nie widzisz wolnych miejsc — za ciemno. W obu przypadkach po kilkudziesięciu sekundach do kilkunastu minut widzisz normalnie. To nie jest metafora ani ciekawostka biologiczna — to dokładnie ten sam mechanizm, który sprawia, że plik tekstury zapisany „na oko” w Photoshopie wygląda inaczej niż powinien w linear light workflow renderera (Rozdział 3), i że ten sam materiał wygląda inaczej pod HDRI ze studia niż pod ostrym słońcem (Rozdział 21). Zanim zajmiemy się matematyką, która z tego wynika, warto zobaczyć problem u źródła.

Etap: Adaptacja

Oko nie ma jednego zakresu — ma kilka, nakładających się

Siatkówka ma dwa typy fotoreceptorów, czułe na zupełnie różne zakresy jasności. Pręciki (rods) działają w warunkach bardzo słabego światła (widzenie skotopowe, poniżej mniej więcej 0,01 cd/m² — światło gwiazd, ciemna noc) i nie rozróżniają kolorów. Czopki (cones) przejmują w warunkach dziennych (widzenie fotopowe, powyżej ok. 3–10 cd/m² — pokój, ulica, słońce) i to one dają kolor. Między nimi jest szeroka strefa mezopowa, w której działają oba typy naraz. Żaden pojedynczy typ receptora nie obejmuje całego zakresu, w jakim funkcjonujesz w ciągu dnia — obejmuje go dopiero przełączanie między nimi.

To przełączanie to adaptacja, i zachodzi na dwóch prędkościach. Źrenica reaguje w ułamku sekundy, zmieniając ilość światła wpadającego do oka nawet szesnastokrotnie — to najszybszy, ale też najsłabszy mechanizm. Prawdziwa siła adaptacji leży w samych fotoreceptorach: pigmenty światłoczułe (rodopsyna w pręcikach) zużywają się pod wpływem światła i muszą się photochemicznie zregenerować w ciemności — proces, który dla pełnej adaptacji do ciemności zajmuje nawet 20–30 minut, podczas gdy adaptacja do jasności po wyjściu z ciemnego pomieszczenia zachodzi w kilkanaście sekund. Efekt: w każdej pojedynczej chwili masz dostęp tylko do wycinka pełnego zakresu, jaki oko potrafi w ogóle obsłużyć — reszta wymaga czasu.

Etap: Weber-Fechner

Dlaczego cienie „ważą więcej” niż światła

To, że oko adaptuje się do różnych poziomów jasności, to dopiero połowa historii. Druga połowa dotyczy tego, jak oko rozróżnia jasności w obrębie jednego zakresu, do którego jest akurat zaadaptowane — i tu wchodzi obserwacja znana jako prawo Webera-Fechnera: najmniejsza zauważalna różnica jasności (just-noticeable difference, JND) nie jest stałą liczbą, tylko stałym stosunkiem do jasności bazowej.

ΔI / I = kΔI — najmniejsza różnica jasności, jaką oko jeszcze zauważa; I — jasność bazowa, na tle której ta różnica występuje; k — stała (dla jasności ok. 1–2%, zależnie od warunków) — ten sam ułamek jasności bazowej, niezależnie od tego, czy I jest duże czy małe

Konsekwencja jest bezpośrednia: przy jasności bazowej I = 10 (jednostki umowne) oko zauważy różnicę rzędu 0,1–0,2. Przy jasności bazowej I = 1000 ta sama bezwzględna różnica 0,1–0,2 jest kompletnie niewidoczna — dopiero różnica rzędu 10–20 (ten sam stosunek 1–2%) stanie się zauważalna. Innymi słowy: w ciemnych partiach obrazu oko wyłapuje bardzo drobne różnice jasności; w jasnych partiach ta sama drobna różnica jest niewidoczna, bo ginie w tle znacznie większego sygnału.

Scałkowanie tej zależności (Fechner, 1860) daje percepcję jasności w przybliżeniu proporcjonalną do logarytmu jasności fizycznej, nie do niej samej:

S ≈ k · ln(I / I₀)S — jasność odczuwana (subiektywna); I — jasność fizyczna; I₀ — próg widzialności; ln — logarytm naturalny. To dokładnie ten sam kształt krzywej co gamma i log encoding z Rozdziału 5 — nie przypadkiem, tylko dlatego, że oba starają się przybliżyć tę samą krzywą percepcji

To jest właściwy powód, dla którego żaden format obrazu nie zapisuje jasności liniowo względem światła fizycznego. Gdyby 256 poziomów 8-bitowego pliku rozłożyć liniowo w fizycznej jasności od czerni do bieli, większość z nich trafiłaby w jasne partie, gdzie oko i tak nie odróżnia sąsiednich poziomów — a cienie, gdzie oko jest najczulsze, dostałyby ich zaledwie kilka, za mało, żeby uniknąć widocznych pasów (banding, Rozdział 12). Gamma i log (Rozdział 5) rozkładają te same 256 czy 1024 poziomy tak, żeby z grubsza odpowiadały krokom, które oko faktycznie rozróżnia — czyli w przybliżeniu równomiernie w skali logarytmicznej, nie liniowej.

Etap: Dynamic range

Cztery różne zakresy, jedna wspólna jednostka

Zanim mówić o zakresach liczbowo, potrzebna jest jednostka. W kolorystyce i fotografii tą jednostką jest stop — jeden stop to podwojenie (albo połowa) ilości światła. Stopy nie dodają się jak procenty, tylko jak potęgi dwójki: różnica dwóch stopów to nie „dwa razy większa różnica” niż jeden stop, tylko czterokrotna różnica jasności. Do tej jednostki wrócimy szczegółowo w Rozdziale 9 — tu wystarczy, żeby porównać cztery zakresy na wspólnej skali:

Dynamic.range.compareskala logarytmiczna, stopy
0 stopów (punkt odniesienia) Scena (plener) ~17 stopów Oko, chwilowo ~13-14 stopów Oko, z adaptacją sekwencyjnie, nie naraz — ~20 stopów Ekran SDR ~7-10 stopów
Nawet chwilowy zakres oka przewyższa ekran SDR o kilka stopów — a scena potrafi przewyższać oko. Kompresję tej różnicy omawia tone mapping (raytracing-book, Dodatek E).
Etap: Konsekwencje dla lookdevu

Co z tego wynika, zanim dotkniesz shadera

Ten rozdział nie pokazał jeszcze ani jednego node'a, ale ustawił trzy założenia, do których będzie wracać każdy kolejny rozdział:

Słowniczek
Adaptacja (jasnościowa)
Zmiana czułości oka w odpowiedzi na poziom otaczającego światła — szybka (źrenica) i wolna (regeneracja pigmentów fotoreceptorów).
Widzenie fotopowe / skotopowe
Widzenie w warunkach dziennych (czopki, z kolorem) / widzenie w warunkach bardzo słabego światła (pręciki, bez koloru).
Prawo Webera-Fechnera
Najmniejsza zauważalna różnica bodźca jest proporcjonalna do wielkości bodźca bazowego, nie stała w liczbach bezwzględnych.
JND (just-noticeable difference)
Najmniejsza różnica jasności (lub innej wielkości), jaką przeciętny obserwator jest w stanie zauważyć.
Stop
Jednostka podwojenia/połowy ilości światła — pełne wprowadzenie w Rozdziale 9.
Dynamic range
Stosunek między najjaśniejszym a najciemniejszym poziomem, jaki dany system (oko, kamera, ekran) potrafi obsłużyć jednocześnie.