Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
OpublikowałKornelia Oleksak Został zmieniony 10 lat temu
1
Gamma / Linear Light Pipeline Michał Drobot Technical Art Director Reality Pump
2
Problem gammy oraz wyświetlaniaProblem gammy oraz wyświetlania RozwiązanieRozwiązanie ZastosowanieZastosowanie Plan wykładu
3
Problem zapisywania obrazów i ich wyświetlaniaProblem zapisywania obrazów i ich wyświetlania Czy urządzenie do zapisu obrazu, zapisuje poprawnie wartości oświetlenia?Czy urządzenie do zapisu obrazu, zapisuje poprawnie wartości oświetlenia? Czy dwa razy więcej fotonów padających na matryce powoduje zapisanie dwa razy większej wartościCzy dwa razy więcej fotonów padających na matryce powoduje zapisanie dwa razy większej wartości Czy renderer tworzy poprawne pod względem oświetlenia dane?Czy renderer tworzy poprawne pod względem oświetlenia dane? Czy wyświetlacz przedstawia poprawnie dane?Czy wyświetlacz przedstawia poprawnie dane? Czy dwa razy jaśniejszy pixel jest przedstawiony jako rzeczywiście dwa razy jaśniejszy?Czy dwa razy jaśniejszy pixel jest przedstawiony jako rzeczywiście dwa razy jaśniejszy? Gamma
4
OdpowiedźOdpowiedź NIENIE Większość urządzeń zapisy i wyświetlania nie używa skali liniowejWiększość urządzeń zapisy i wyświetlania nie używa skali liniowej Renderer zależy od nasRenderer zależy od nas Gamma
5
Funkcja liniowaFunkcja liniowa F(x + y) = F(x) + F(y)F(x + y) = F(x) + F(y) F(kx) = k * F(x)F(kx) = k * F(x) Liniowość
6
Monitory, aparaty i skanery nie działają liniowoMonitory, aparaty i skanery nie działają liniowo Krzywa gammaKrzywa gamma Przeciętne wartości 2.0 – 2.4Przeciętne wartości 2.0 – 2.4 Każdy monitor ma własną krzywa gammaKażdy monitor ma własną krzywa gamma F(x) = x^2.2F(x) = x^2.2 Przyjęte przez format JPGPrzyjęte przez format JPG Gamma
7
Gamma
8
Pixel o połowie intensywności będzie wyświetlany z ¼ intensywnościPixel o połowie intensywności będzie wyświetlany z ¼ intensywności Sqrt(0.5) = 0.25Sqrt(0.5) = 0.25 Obliczenia światła powinny być proporcjonalnie powiązane z wartościami fizycznymiObliczenia światła powinny być proporcjonalnie powiązane z wartościami fizycznymi 2x więcej fotonów = 2x jaśniejszy pixel2x więcej fotonów = 2x jaśniejszy pixel Gamma
9
KonsekwencjeKonsekwencje Jak to działa
10
KonsekwencjeKonsekwencje Jak to działa
11
KonsekwencjeKonsekwencje Jak to działa 128
12
KonsekwencjeKonsekwencje Jak to działa 128 187
13
Textury wejścioweTextury wejściowe Przyjęto, że przeciętny użytkownik ma monitor o gammie 2.2Przyjęto, że przeciętny użytkownik ma monitor o gammie 2.2 Pliki graficzne w formatach kompresji są zapisywane z korektą gamma pow(1.0/2.2)Pliki graficzne w formatach kompresji są zapisywane z korektą gamma pow(1.0/2.2) Dowolny renderer przyjmujący dane wejściowe jako liniowe nie może normalnie traktować texturDowolny renderer przyjmujący dane wejściowe jako liniowe nie może normalnie traktować textur Konsekwencje
14
Dlaczego pracujemy w gammie?Dlaczego pracujemy w gammie? Konsekwencje
15
GammaGamma Daje więcej odcieni szarości niż przestrzeń liniowa dla tej samej ilości bitów (8 BIT)Daje więcej odcieni szarości niż przestrzeń liniowa dla tej samej ilości bitów (8 BIT) Ludzkie oko jest dużo bardziej wrażliwe na skale szarości niż na jasne tonyLudzkie oko jest dużo bardziej wrażliwe na skale szarości niż na jasne tony Oszczędność pamięciOszczędność pamięci Konsekwencje
16
GammaGamma Liniowa dla 8-bit = BANDINGLiniowa dla 8-bit = BANDING Konsekwencje
17
Liniowy zapisLiniowy zapis Brak bandingu w jasnych tonach, kosztem olbrzymiego w ciemnychBrak bandingu w jasnych tonach, kosztem olbrzymiego w ciemnych NieopłacalneNieopłacalne Konsekwencje
18
Liniowy zapis (0-255) vs GammaLiniowy zapis (0-255) vs Gamma 0 = 00 = 0 1 = 201 = 20 2 = 282 = 28 3 = 333 = 33 Konsekwencje
19
KonsekwencjeKonsekwencje Generowanie mipmapGenerowanie mipmap Podstawowa metodaPodstawowa metoda Weź 4 pixele z poziomu N+1Weź 4 pixele z poziomu N+1 Pixel N = avg(pix1,pix2,pix3,pix4)Pixel N = avg(pix1,pix2,pix3,pix4) Jeśli pixele to (1,1,0,0)Jeśli pixele to (1,1,0,0) Oczekujemy pixela o intensywności 0.5Oczekujemy pixela o intensywności 0.5 Zapisanie avg(1,1,0,0) = 0.5Zapisanie avg(1,1,0,0) = 0.5 0.5 da nam pixel ¼ jasności zamiast 0.50.5 da nam pixel ¼ jasności zamiast 0.5 Migotanie jasności detali wraz ze zmianą odległościMigotanie jasności detali wraz ze zmianą odległości Konsekwencje
20
KonsekwencjeKonsekwencje Filtrowanie mipmap / texturFiltrowanie mipmap / textur Operacja sprzętowaOperacja sprzętowa Działa liniowoDziała liniowo Przy źle wygenerowanych mipmapach prowadzi do jeszcze większych błedówPrzy źle wygenerowanych mipmapach prowadzi do jeszcze większych błedów Niestabilność obrazu przy filtrowaniuNiestabilność obrazu przy filtrowaniu Konsekwencje
21
KonsekwencjeKonsekwencje OświetlenieOświetlenie Model lamberta dot(N,L)Model lamberta dot(N,L) Działa liniowoDziała liniowo Wymaga korekcji przed wyświetleniemWymaga korekcji przed wyświetleniem Konsekwencje
22
F(x) = x^(1.0/2.2)F(x) = x^(1.0/2.2) Pipeline
23
F(x) = x^2.2F(x) = x^2.2 Pipeline
24
Pipeline Kamera konsumencka Prawdziwe światło 1/2.2 2.2
25
RozwiązanieRozwiązanie (x^1/2.2)^2.2 = x(x^1/2.2)^2.2 = x Graficy pracują w przestrzeni gammaGraficy pracują w przestrzeni gamma Textury powiązane z oświetleniem musza być korygowaneTextury powiązane z oświetleniem musza być korygowane Obliczenia światła powinny być w przestrzeni liniowejObliczenia światła powinny być w przestrzeni liniowej PoprawnośćPoprawność Wymagana korekta przed wyświetleniemWymagana korekta przed wyświetleniem Korekcja
26
Korekcja
27
Gamma
28
RozwiązanieRozwiązanie Na wejściu korygujemy texturyNa wejściu korygujemy textury Float4 Color = pow(tex2D(tex,UV),2.2)Float4 Color = pow(tex2D(tex,UV),2.2) Obliczmy oświetlenieObliczmy oświetlenie LiniowoLiniowo Korygujemy do wyświetleniaKorygujemy do wyświetlenia Final = pow(Color, 1/2.2)Final = pow(Color, 1/2.2) Korekcja
29
Spec = CalSpec(); Diff = tex2D( Sampler, UV ); Color = Diff * max( 0, dot( N, L ) ) + Spec; return Color; Korekcja
30
Spec = CalSpec(); Diff = pow( tex2D( Sampler, UV ), 2.2 ); Color = Diff * max( 0, dot( N, L ) ) + Spec; return pow( Color, 1/2.2); Korekcja
31
Sprzętowa korekcjaSprzętowa korekcja Odczyt texturOdczyt textur D3DSAMP_SRGBTEXTURED3DSAMP_SRGBTEXTURE Zapis do render targetuZapis do render targetu D3DRS_SRGBWRITEENABLED3DRS_SRGBWRITEENABLE Shader może zostać w wesji sprzed korekcjiShader może zostać w wesji sprzed korekcji Oszczędność POW-ówOszczędność POW-ów Korekcja
32
X360X360 Uwaga na krzywą gamma x360Uwaga na krzywą gamma x360 Jest to to liniowa aproksymacjaJest to to liniowa aproksymacja Stratna w zakresie szarościStratna w zakresie szarości Za jasna niskich wartościachZa jasna niskich wartościach Zbyt kontrastowaZbyt kontrastowa Wraz z krzywymi gamma telewizorów wymaga dużo uwagi, żeby uniknąć bandingu i uzyskać pożądany efektWraz z krzywymi gamma telewizorów wymaga dużo uwagi, żeby uniknąć bandingu i uzyskać pożądany efekt Korekcja
33
Gamma spaceGamma space DiffuseDiffuse LightmapsLightmaps EmmisiveEmmisive Inne mapy percepcyjneInne mapy percepcyjne Linear spaceLinear space Normal mapNormal map Specular mapSpecular map Inne mapy wartości fizycznych / matematycznychInne mapy wartości fizycznych / matematycznych Korekcja
34
Podsumowanie For more information contact me hello@drobot.org Slides will be available at Drobot.org
35
Questions ?
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.