Strona główna Fotografia Obliczeniowa Operatory mapowania tonalnego HDR

🖼️ Operatory mapowania tonalnego HDR

Obrazy HDR wymagają mapowania tonalnego, by wyświetlić je na ekranach LDR. Porównaj operatory Reinharda, Filmic ACES, Drago i Duranda. Zobacz gammę, ekspozycję i lokalne odwzorowanie kontrastu.

Fotografia Obliczeniowa2DŁatwy60 FPS
hdr-tonemapping ↗ Otwórz osobno
Interfejs samej symulacji jest w języku angielskim.

Jak to działa

Mapowanie tonalne HDR kompresuje szeroki zakres luminancji sceny do wąskiego zakresu, jaki może pokazać wyświetlacz. Symulator generuje syntetyczne mapy radiancji HDR dla czterech typów scen, a następnie w czasie rzeczywistym stosuje wybrany operator.

Każdy piksel ma liniową wartość luminancji HDR L. Operator odwzorowuje L → L' w przedziale [0,1], która następnie jest kodowana gammą do wyświetlenia. Ekspozycja EV przesuwa wartość wejściową o 2^EV przed odwzorowaniem.

Reinhard: L' = (L · key/Lavg) / (1 + L · key/Lavg) ACES Filmic: L' = (L(2.51L + 0.03)) / (L(2.43L + 0.59) + 0.14) Drago: L' = log(1 + b·L) / log(1 + b·Lmax) Display: out = clamp(L', 0, 1)^(1/gamma)

Najczęściej zadawane pytania

Czym jest mapowanie tonalne HDR?

Mapowanie tonalne HDR przekształca obraz o wysokim zakresie dynamiki (o stosunkach luminancji sięgających 100 000:1) w obraz o niskim zakresie dynamiki, nadający się do standardowych monitorów (zwykle o kontraście 100:1), zachowując przy tym percepcyjne szczegóły w całym zakresie.

Czym jest operator mapowania tonalnego Reinharda?

Operator Reinharda odwzorowuje luminancję L jako L/(1+L) — to prosty globalny operator, który kompresuje prześwietlenia, zachowując przy tym szczegóły w cieniach. Jest matematycznie elegancki, ale w bardzo nasyconych scenach może dawać nieco zdesaturowane rezultaty.

Co wyróżnia mapowanie tonalne ACES Filmic?

ACES (Academy Color Encoding System) Filmic wykorzystuje krzywą typu S, która naśladuje odpowiedź kliszy filmowej. Naturalnie przycina jasne prześwietlenia i lepiej zachowuje nasycenie kolorów niż prosty operator Reinharda, dzięki czemu jest popularny w silnikach gier.

Czym jest operator mapowania tonalnego Drago?

Operator Drago wykorzystuje kompresję logarytmiczną z adaptacyjnym parametrem obciążenia (bias). Jest szczególnie skuteczny w scenach o bardzo dużym zakresie dynamiki i daje naturalnie wyglądające rezultaty przy fotografii plenerowej.

Jak korekcja gamma odnosi się do mapowania tonalnego?

Korekcja gamma (zwykle gamma 2,2) przekształca liniowe wartości światła w percepcyjnie jednolite wartości wyświetlania. Operatory mapowania tonalnego działają w liniowej przestrzeni światła, a gamma jest stosowana jako ostatni krok przed wyświetleniem.

Czym jest ekspozycja w mapowaniu tonalnym?

Ekspozycja w mapowaniu tonalnym to mnożnik stosowany do liniowego obrazu HDR przed krzywą tonalną. Zwiększenie ekspozycji rozjaśnia cały obraz, podobnie jak wydłużenie czasu naświetlania w fotografii, wyrażana w stopniach EV (exposure value).

Czym różni się mapowanie tonalne lokalne od globalnego?

Globalne mapowanie tonalne stosuje tę samą krzywą do każdego piksela niezależnie. Lokalne mapowanie tonalne (jak w operatorze Duranda) analizuje sąsiedztwa przestrzenne, by wzmocnić lokalny kontrast, ujawniając szczegóły jednocześnie w cieniach i w najjaśniejszych partiach obrazu.

Czym jest operator mapowania tonalnego Duranda?

Bilateralny operator mapowania tonalnego Duranda rozkłada obraz na warstwę bazową o dużej skali oraz warstwę detali przy użyciu filtru bilateralnego. Warstwa bazowa jest kompresowana, a warstwa detali zachowana, co wzmacnia lokalny kontrast.

Dlaczego obrazy HDR wyglądają płasko na standardowym monitorze?

Standardowe monitory wyświetlają około 8 bitów na kanał (256 poziomów), podczas gdy sceny HDR mogą obejmować ponad 20 f-stopów światła. Bez mapowania tonalnego samo przycięcie wartości do zakresu 0-255 powoduje utratę wszystkich szczegółów w prześwietleniach i sprawia, że obraz wygląda na wypłukany.

Czym jest parametr key w mapowaniu tonalnym Reinharda?

Parametr key (często oznaczany jako „a”, zwykle 0,18) określa docelową ogólną jasność obrazu. Reinhard najpierw odwzorowuje logarytmiczną średnią luminancję na tę wartość key, a następnie stosuje krzywą kompresji L/(1+L) w całym obrazie.

O tej symulacji

Ten symulator generuje syntetyczną mapę radiancji HDR — niebo o zachodzie słońca, oświetlone wnętrze, koronę drzew w lesie lub nocne miasto — z wartościami luminancji rozciągającymi się na kilka rzędów wielkości, a następnie w czasie rzeczywistym stosuje operator Reinharda, ACES Filmic, Drago lub liniowe przejście bez kompresji, dzięki czemu widać dokładnie, jak każdy operator kompresuje ten zakres do 8-bitowego wyświetlacza. Przełącz Podział widoku, aby zobaczyć surowy, przycięty obraz obok wyniku po mapowaniu tonalnym.

🔬 Co przedstawia

Proceduralnie generowana scena HDR renderowana przez wybraną krzywą mapowania tonalnego, wraz z bieżącymi statystykami minimalnej/maksymalnej luminancji, logarytmicznej średniej luminancji i zakresu dynamiki, dzięki czemu widać dokładnie, jak ekstremalny jest w rzeczywistości sygnał wejściowy.

🎮 Jak korzystać

Wybierz operator (Reinhard, ACES Filmic, Drago Log, Durand Local lub Linear), dostosuj ekspozycję EV i gammę, ustaw parametr Key operatora Reinharda i przełączaj typ sceny między zachodem słońca, wnętrzem, lasem i miastem. Naciśnij ⧉ Podział widoku, by porównać obraz przed i po.

💡 Czy wiesz, że?

Wybranie trybu Linear (bez mapowania) w scenie zachodu słońca ujawnia, po co w ogóle istnieje mapowanie tonalne: przy wartościach luminancji w tarczy słońca sięgających około 1000-krotności luminancji nieba, samo przycięcie do zakresu [0,1] rozjaśnia każdy jasny piksel do pełnej bieli i zapada cienie do czerni.

Najczęściej zadawane pytania

Dlaczego scena zachodu słońca wymaga mocniejszego operatora niż scena leśna?

Funkcja buildHDR() nadaje tarczy słońca w scenie zachodu skok luminancji do około 1000 (przez Math.exp(-dist²·80)·1000) na tle nieba o wartości około 8 — to zakres dynamiki znacznie szerszy niż miękkie prześwietlenia w koronach drzew lasu; panel Statystyki i jego odczyt Zakres dynamiki pokażą to bezpośrednio po przełączeniu typu sceny.

Dlaczego zwiększenie ekspozycji EV rozjaśnia cały obraz jeszcze przed uruchomieniem krzywej tonalnej?

EV przesuwa liniową luminancję HDR o czynnik 2^EV zanim zastosowany zostanie jakikolwiek operator, dokładnie naśladując działanie ekspozycji w aparacie — oznacza to, że zwiększenie EV może przesunąć piksele wcześniej znajdujące się w środkowym zakresie do obszaru kompresji prześwietleń danego operatora, zmieniając, które szczegóły zostaną zachowane.

Co dokładnie kontroluje suwak Key w operatorze Reinharda?

Key ustala docelową jasność szarości środkowej, na którą odwzorowywana jest logarytmiczna średnia luminancja sceny, zanim zadziała krzywa kompresji L/(1+L) — zwiększenie Key sprawia, że cały renderowany obraz wygląda ogólnie jaśniej, niezależnie od kształtu krzywej kompresji prześwietleń.

Dlaczego ACES Filmic zachowuje bardziej wyraziste kolory niż Reinhard na tej samej scenie?

Wzór ACES L(2,51L+0,03)/(L(2,43L+0,59)+0,14) to krzywa w kształcie litery S, która kompresuje prześwietlenia łagodniej w okolicach przejść (toe i shoulder) niż Reinhardowskie L/(1+L), dlatego operatory w stylu filmowym zachowują więcej postrzeganego nasycenia w jasnych obszarach.

Dlaczego przełączenie na Drago zmienia cienie inaczej niż prześwietlenia?

Wzór Drago log(1+bL)/log(1+bLmax) kompresuje obraz za pomocą logarytmu zakotwiczonego na rzeczywistej maksymalnej luminancji sceny Lmax, więc sceny z bardzo jasnym elementem odstającym (jak tarcza słońca w zachodzie) mają mocniej ściśnięty ogólny zakres prześwietleń, podczas gdy półcienie i cienie są stosunkowo mniej dotknięte.

Podobne symulacje