16. 1. 2011

Gamma 2.2

Nepochybne si každý z vás všimol istú farebnú disproporciu v prípade multiplatformových hrách, obzvlášť ak bol tzv. vedúcou platformou xcrap. Porovnávame PS3 a Xcrap verziu tej istej hry. Dnes to už nie je až tak častý jav, pred 2-3 rokmi však išlo o masovú záležitosť. Vybľuté farby na PS3 /náhodne vybratý "washed out" link/. A určite aj sami ste si už vyskúšali to nejako vylepšiť povolením funkcie RGB Full Range /ak vám to vôbec váš monitor umožňuje/. V skutočnosti je táto zjavná chyba spôsobená paradoxne hlavne hárdvérom xcrapu. Dodrbaná gammma korekcia.

 kontrastnejší obraz na billšmejde ?? - nie !!

Najprv vám však musím predhodiť zopár klúčových pojmov, inak sa nikde nedostaneme. Biele - achromatické svetlo /slnko/ obsahuje všetky farby, po odraze od telesa sa pohltením časti vlnovej dĺžky svetla vytvára jeho "odrazová" farba /ak prevláda nejaká frekvencia, hovoríme o dominantnej frekvencii/, farba teda závisí od vlnovej dĺžky, jas je intenzita svetla, sýtosť - čistota farby a závisí od frekvencie svetla /čím užšie spektrum, tým sýtejšia farba/, a svetlosť je vlastne je veľkosť achromatickej zložky svetla o určitej dominantnej frekvencii, alebo inak ide o tonalitu - jas odrazeného svetla od telesa v pomere k odrazenému svetlu z bielej plochy osvetlenej tým istým zdrojom.

Ľudské rozlíši nejakých 1.5 milióna farieb a podľa modikácie jasom a svetlosťou aj ďalšie odtiene. Pozor - nie každej farbe /odtieňu - jas / zodpovedá iná vlnová dĺžka, tá prislúcha iba odlišným odtieňom rôzných farieb. Ako to vlastne dostať do počítača. Musíme rozsekať našimi očami viditeľné pásmo na veľa malých častí, a uložiť to pod poradovým číslom. Teda čo farba to iná vlnová dĺžka.

Bežné kódovanie je napríklad RGB - aditívny /tri RGB o maximálnom jase vytvoria biele svetlo/ spôsob miešania troch základných farieb RED-GREEN-BLUE, na namiešanie 1.5M farieb nám stačí každú zo základných RGB zložiek rozdeliť na 115 častí. Sme však na binárnom počítačí, a je výhodne použiť šírku 8 bitov - čo znamená 256 odtieňov osobitne pre červenú, zelenú a modrú farbu a to nám kombináciami umožní dostať tých dobre známych 16 777 216 farieb aka 24 bitová paleta /tých známejších 32 bitov ráta aj s 8 bitmi pre alfa, tj. 4 kanály po 8 bitov/. Keď teda v RGB systéme naťukáte 255+0+0 dostanete červenú farbu, 0+2550 je zelená farba, 0+0+255 je modrá, 0+0+0 je čierna a 255+255+255 pre biela farba.

Mimo tému. Farebný model CMY-K používame hlavne kvôli tlačiarniam. Pointa. Tienidlo-podklad obrazovky je čierne /vypnutý pixel - kľudový stav/, papier je však biely. Zmeníme teda spôsob mešania z aditívneho na subtraktívny použitím doplnkových farieb ku RGB a to azúrová /Cyan/, purpurová /Magenta/ a žltá /Yellow/ - CMY. To "K" je za čiernu farbu - Black, lebo je lacnejšie ju tam priložiť ako extra kárdridž, než ju miešať z CMY zložiek /čierna je najčastejšie používaná pri tlači/. Televízny formát YUV slúži na zvládnutie prechodu ČB obrazy do plnej farby. Ku Y zložke /svietivosť, ČB obraz/ sa pridalo 2 jednotky U a V /diferencia- odtieňa medzi modrou a žltu, červenou a žltou/. Transformačná rovnica : R = Y + 1,403V; G = Y - 0,344U - 0,714V; B = Y + 1,770U. Ďalší pokec o farebných modeloch HSB a HLS dobrovoľne pre vaše dobro vynechám.

Už sa však blížime ku meritu veci. Takže máte svoje krásne lineárne RGB signály tj. na bod-pixel s hodnotou 150 naozaj dopadlo 5 x viac svetla než na pixel s hodnotou 30 a aplikujete gama-korekciu. Prečo ? Lebo stará dobrá CRT televízia ma nelineárny priebeh krivky /v nej napr. 5 násobne silnejšiemu napätiu nezodpovedá 5 x jasnejší svit daného miesta obrazovky !!/. A gamma korekcia nie je nič iné ako KOMPENZÁCIA tejto nerovnováhy /štandardné nastavenie má hodnotu gamma 2.2, pravá RGB grafika je uložená v lineárnom formáte /. Moderné alebo špičkové profesionálne LCD monitory samozrejme majú aj "lineárny mód".

Definitívne sa už nachádzame v intímnej blízkosti našich dvoch porovnávaných konzol. Aby to nebola až tak jednoduché, tak tie hore spomínané konverzie, kódovanie, modifikovanie signálu varíruje aj pri načítaní farebnej hodnoty pixla z textúry, pri jeho zápise do framebuffera, a dokonca pri samotnej zobrazení na telke. Z toho plynie prvý záver - to čo u seba vidíte, nie je vždy to čo sa naozaj nachádza v PS3, alebo čo má pred sebou vývojár na svojej referenčnom TV. Po teórii konečne grafy, po ktorých to už pochopíte v celom rozsahu a dosiahnete pravé osvietenie.


Začnime tým vľavo. Priebeh troch kriviek /detail/ - referenčná gamma 2.2, sRGB aka PS3 a Xenon - xcrap GPU. Odchýlky Xcrap GPU od normy sú iste dobre viditeľné. Obrázok vpravo je zväčšená časť ľavého obrázka s dôrazom na tvar krivky v dolnom spektre, v ktorom má ľudské oko najväčšiu citlivosť a teda ľahko spozorujete abnormality v obraze a xcrap tu jasne padá na hubu. V absolútných číslach je čierna pri tomto nastavení na xcrape 3.2 krát svetlejšia ako na takmer referenčnom PS3 HW. Čo to vlastne znamená v praktickom hernom živote ? Sledujte.


Takto by ste na svojej obrazovke videli farby tej istej textúry, ak by ste ich prehnali svojim gamma korekčným "2.2" hárdvérom BEZ akéhokoľvek zásahu do procesu. Vľavo PS3, vpravo xcrap. Ak tie špeciálne zásahy do textúr a gamma krivky xcrapu urobíte /textúry + gamma/, a vykašlete sa s modifikáciou pre PS3 /PS3 sRGB stále nie je ideálnou gamma 2.2 hlavne v dolnej časti - teda v čiernej/- pri následnom posune sa to skončí kontrastnými farbami na xcrape s "výbornou" čiernou farbou /black crash/, ale so "šedou čiernou" na PS3 a vypálenou bielou na druhom konci spektra.

Xcrap HW je natoľko dodrbaný, že ešte aj farebné podanie v NTSC-U, NTSC-J, a PAL norme medzi sebou trochu kolíše. Ak preto pri správnom nastavení svojej gamma 2.2 telku niekedy uvidíte - niečo podobné ako ten obrázok so spidermanom úplne hore, znamená to to iba jedno. Na xcrap verziu sral pes a dotyčný vývojár to tam hodil tak ako to "HW dal". A ak tu niekedy nabudúce spomeniem prednášku od Naughty Dog /Uncharted 2/ kde sa doslovali "vyhrali" s precíznou kontrolou - gamma korigovanej HDR, lineárnej gammy a konverzie do "filmového" HDR nastavenie pre Uncharted 3, už budete vedieť o čom hovorím. "Washed out" farby PS3 hier pri multiplaftormových projektoch majú teda čerta spoločného s údajne nekompetentným SONY hárdvérom.