Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Gamma / Linear Light Pipeline Michał Drobot Technical Art Director Reality Pump.

Podobne prezentacje


Prezentacja na temat: "Gamma / Linear Light Pipeline Michał Drobot Technical Art Director Reality Pump."— Zapis prezentacji:

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

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) = da nam pixel ¼ jasności zamiast 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/

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 Slides will be available at Drobot.org

35 Questions ?


Pobierz ppt "Gamma / Linear Light Pipeline Michał Drobot Technical Art Director Reality Pump."

Podobne prezentacje


Reklamy Google