Aktuality  |  Články  |  Recenze
Doporučení  |  Diskuze
Grafické karty a hry  |  Procesory
Storage a RAM
Monitory  |  Ostatní
Akumulátory, EV
Robotika, AI
Průzkum vesmíru
Digimanie  |  TV Freak  |  Svět mobilně

Grafická pipeline: jak se tvoří obraz III

4.3.2015, Pavel Šantrůček, článek
Grafická pipeline: jak se tvoří obraz III
Máme za sebou dva kontrolní lety nad naším grafickým potrubím. Dnes nás čeká let závěrečný, na jehož konci bychom už konečně rádi viděli nějaký ten obrázek z naší hry na samotném monitoru počítače.

Monitor


Přilétáme k zařízení zvanému monitor, na kterém jsou zobrazovány všechny snímky naší hry. Nás dnes vůbec nebude zajímat, zda jde o LCD monitor s nějakým konkrétním typem obrazovky (TN, IPS nebo nějakým jiným), nám jde pouze o princip zobrazení a výkon. Zkusíme si tedy odchytnout na konci kabelu nějaký jeden celý snímek, který na monitor zasílá grafická karta. Samozřejmě, naším pomalým letadlem jsme ten první snímek chytit nestačili, ale to nevadí, odchytíme si nějaký další.

Snímek na konci kabelu zachycen, tak si ho teď dobře prohlédneme.


Monitor frame


Tak tohle jsme opravdu nečekali. Odchycený snímek má úplně jiné rozlišení (2200×1125) než ten, který jsme viděli ve Front Bufferu grafické karty (1920×1080)! Ale proč?

Abychom zjistili, proč tomu tak je, musíme se vrátit zpět do historie, kdy světu vládly CRT monitory. Tenkrát to bylo všechno trochu složitější. Tehdejší monitory pracovaly na principu vysílání paprsků elektronovými děly na stínítko potažené fosforem, který se v místě osvitu rozsvítil. Aby elektronový paprsek osvítil celou obrazovku, musel se po stínítku pohybovat po řádcích zleva doprava a když dorazil na poslední řádek obrazovky, musel se opětovně přemístit na svou startovací pozici v levém horním rohu obrazovky.


Crt monitor


Tyto přesuny paprsku elektronového děla samozřejmě konzumovaly určitý čas a v přenosovém signálu to muselo být nějak zohledněno. Dnes v době LCD panelů se už sice žádné elektronové dělo nepoužívá, nicméně prapůvodní standardy tu s námi kvůli zpětné kompatibilitě zůstaly a my se s tím musíme nějak poprat.

Na odchyceném snímku vidíme, že jeho plocha je rozdělena na dvě části. Ta první šedivá „Active Video Area“ nás zajímá nejvíce, protože obsahuje právě ty informace o našem snímku a v rastru, který jsme čekali od samého počátku, tedy 1920×1080 px. Druhá a doplňková část se obecně nazývá „Blanking Area“ a může obsahovat nějaké další přidružené informace. Konkrétně u našeho HDMI jsou to zvukové stopy a třeba u TV vysílání to může být Teletext. Důležité pro nás je to, že obsah těchto přidružených informací není na obrazovce vidět, tam jsou vidět pouze informace z „Active Video Area“, tedy pixely snímku naší hry.

Asi nemá valného významu se v tom příliš moc šťourat, to necháme odborníkům, ale přeci jenom ještě jedna věc. Budeme si nyní všímat pouze řádků odchyceného snímku, které představují také čas. Vidíme, že tam Active Video Area (tedy náš snímek ze hry) zabírá celkem očekávaných 1080 řádků a dalších 45 řádků patří oné Blanking Area.

Lze tedy jednoduše říct, že v případě zpracování našeho snímku monitorem je doba představující 1080 řádků věnována zapisování na displej (daty, které budou vidět) a po dobu zbylých 45 řádků se na obrazovku nebude zapisovat nic (zpracovávají se pouze přidružené informace). Tomuto času, při kterém monitor sice pracuje, ale nevykresluje data na displej, se říká „Vertical Blanking Interval“ neboli VBLANK a zkráceně také VBI. VBI je tedy vysvětleno, pojďme si říci něco o výkonu.

Pokud se podíváte do specifikací monitoru, je tam uvedena položka s názvem „Pixel Clock“, jejíž hodnota udává výkon elektroniky monitoru. Jednodušeji řečeno jde o počet pixelů, které je elektronika schopna zpracovat v časovém rámci jedné sekundy. V mém konkrétním případu (ale také u většiny z vás) je touto hodnotou 148,5 MHz. My z této hodnoty můžeme klidně vypočítat, kolik řádků za sekundu náš monitor stačí zpracovat.

Náš odchycený snímek obsahuje v jednom řádku 2200 px (včetně Blanking Area), takže 148 500 000 / 2200 = 67 500 řádků za sekundu. Náš monitor je tedy schopen zpracovat maximálně 67 500 řádků za sekundu. Pokud budeme chtít vědět, kolik to bude celých snímků, pak to je 67 500 / 1125 = 60 snímků za sekundu. Můj monitor (a zřejmě také většiny z vás) při tomto rozlišení a výkonu (Pixel Clock) může tedy zobrazit „pouze“ 60 snímků za sekundu.

Popravdě to je dost zásadní zjištění, že běžné monitory (jako máme my) můžou zobrazit pouze 60 snímků za sekundu a ani o snímek navíc. Jedinou dobrou zprávou je to, že ačkoliv nemohou zobrazit snímků více, také naštěstí nemohou zobrazit snímků méně. U monitorů se tedy dá obecně říci, že pracují s konstantní snímkovou frekvencí, která je dána možnostmi použité elektroniky. Samozřejmě monitory se 120Hz elektronikou zobrazují konstantně 120 snímků/s, se 75MHz elektronikou pak 75 snímků/s atd.

Při tomto zjištění vás určitě napadlo, jak je tedy možné, že mi hra ukazuje na 60Hz monitoru třeba 165 snímků/s? Abychom si to objasnili (a mnozí z vás už vědí nebo tuší), vyčkejte ještě chviličku, já jen shrnu naši zastávku u monitoru počítače. Takže co jsme si z exkurze u monitoru odnesli za moudra.
  • Monitor pracuje s konstantní snímkovou frekvencí, která je dána výkonem jeho elektroniky
  • Přenášený snímek neobsahuje pouze zobrazovaná data, ale i další přidružené informace
  • Celková doba vykreslení jednoho snímku na displeji je dána součtem doby vykreslení viditelného snímku plus doby VBI

Ten poslední bod si raději nakreslíme, protože jsme zapomětliví, tak aby se nám to později nevykouřilo z hlavy. Aby nás to nemátlo, ještě si tu snímkovou frekvenci monitoru převedeme z Hz na sekundy. V našem případě u 60Hz monitoru to je 1/60 = 0,01666 sekund a aby to číslo vypadalo trochu snesitelněji, převedeme ho ještě do milisekund 0,01666 * 1000 = 16,66 ms. Doba zobrazení jednoho snímku našeho 60Hz monitoru trvá tedy 16,66 milisekundy.


Monitor refresh


Kdo by mermomocí chtěl vědět, jak dlouho v našem případě trvá ten zakreslený VBI (Vertical Blanking Interval), pak trojčlenka je tím správným způsobem, jak to lze zjistit. Pokud 1125 řádek trvá monitoru zpracovat 16.66 ms, tak kolikpak mu asi trvá zpracovat 45 řádků? Komu vyšlo, že to je 0,66 ms, pak to je správně a my můžeme pokračovat.

Takže v takovémto téměř valčíkovém rytmu tedy pracuje náš 60Hz monitor. Dříve ale než nasedneme do našeho letadla a poletíme dále, vrátíme náš odchycený snímek zpět do HDMI kabelu a necháme si ho zobrazit.


Game tearing
Screen tearing v akci

Hm, děje se tu něco podivného. Proč je ten snímek takto přeseknutý? Tomuto jevu se říká „Screen Tearing“ a monitor za něj nemůže. Respektive může, ale nepřímo, díky své konstantní snímkové frekvenci. Ale abychom si tento jev osvětlili a zabránili mu v jeho tvorbě, musíme se vrátit zpět ke grafické kartě a Swap Chain. Takže nasedat a rychle letíme zase zpět.
Doporučujeme náš velký přehled desktopových grafických čipů.