Asus
Grafická pipeline IV: Monitor
Další a dnes již poslední díl minisérie o grafické pipeline je věnován monitorům. Dnes si ukážeme, jak se přenáší obraz z naší počítačové hry na monitor, co je to Swap Chain, Double a Triple Buffering, jak funguje vertikální synchronizace obrazu a jak se díku ní můžeme zbavit nepříjemného Tearingu.
gpureport.cz  Pavel Šantrůček  22.09.2016

OBSAH:
1. Swap Chain a Double Buffering          
4. VSync          
2. Monitor          
5. Triple Buffering a VSync          
3. Screen Tearing          
6. Závěr          
 

Vertical Synchronization (VSync)

Nyní už víme, že Tearing způsobuje Swap, tedy přehození úloh Front a Back Bufferu v době, kdy Video Controller provádí skenování a odesílání viditelných dat (obrazu) z Front Bufferu na monitor počítače (Scan Out).

Pokud bychom však Swap neprováděli okamžitě po dokončení snímku grafickou kartou v Back Bufferu, ale počkali si na nějakou vhodnější dobu, až bude mít video kontrolér data z Front Bufferu kompletně oskenovaná, ale ještě před začátkem nového skenování, měli bychom vyhráno a žádný Tearing by se nekonal. No a právě takovou dobou je ten moment, kdy video kontrolér vytváří Vertical Blanking Interval (VBI), tedy kdy jsou na monitor zasílány ony monitorem nezobrazované přidružené informace.

Tomuto odložení, nebo raději synchronizaci, provedení Swapu Front/Back Bufferů do doby, kdy Video Controller vytváří a odesílá Vertical Blanking Interval (VBI) se říká Vertical Synchronization, nebo zkráceně VSync.

Zapnutím funkce VSync v ovladačích nebo přímo ve hře se sice nepříjemného Tearingu zbavíme, ale jak už to tak bývá, nic není dokonalé a samozřejmě ani VSync není. Zapnutím VSync si totiž „uzamkneme“ snímkovou frekvenci ve hře na maximální hodnotu, která je rovna obnovovací frekvenci monitoru, což je u nejčastěji používaných 60 Hz monitorů hodnota 60 snímků za sekundu (FPS). Pokud bychom byli šťastnými vlastníky monitoru s vyšší obnovovací frekvencí, například 120 Hz, maximální hodnota snímkové frekvence při zapnutém VSync by se nám zvýšila na 120 FPS. Stejně tak minimální snímková frekvence může jít se zapnutým VSync rapidně dolů, ale raději si to pojďme nakreslit.

 

Příklad 1 - rendering nad hranicí obnovovací frekvence monitoru

 

VSync Quick

 

Předpokládejme, že máme monitor s obnovovací frekvencí 60 Hz a grafická karta vytváří snímky do Back Bufferu každých 10 ms, což představuje snímkovou frekvenci 100 FPS. První snímek je vytvořen v čase 10 ms, ale musí čekat do doby VBI ještě dalších 6,66 ms. Grafická karta nemá kam připravovat další snímek, protože Back Buffer je obsazený a proto další renderování zastaví (IDLE). Někdy v čase 16,66 ms při VBI je konečně proveden Swap, Back Buffer je uvolněn pro tvorbu dalšího snímku a Video Controller začíná provádět Scan Out snímku č.1. Někde v čase 26,66 ms je další snímek v Back Bufferu hotov, ale opět musí čekat dalších 6,66 ms na VBI, aby mohl být proveden Swap. Grafická karta opět pochopitelně stojí.

Tak to jde stále dokola, a jak můžete vidět, z původní snímkové frekvence 100 FPS, kterou je grafická karta schopna za normálních okolností snímky renderovat, jsme se dostali na snímkovou frekvenci 60 FPS, tedy přesně na hodnotu obnovovací frekvence monitoru. Dobrou zprávou pak je absence Tearingu a cca 30 % úspora energie, protože cca 30 % doby byla grafická karta nevytížena (IDLE), na druhou stranu nám pak zase narostl Input Lag, tedy doba, která uplynula od interakce hráče (myší nebo klávesnicí) po vykreslení snímku,  protože snímky zůstávaly v pipeline delší dobu (o 6,66 ms).

 

Příklad 2 - rendering pod hranicí obnovovací frekvence monitoru

 

VSync Slow

 

Opět předpokládejme, že máme monitor s obnovovací frekvencí 60 Hz, ale tentokrát grafická karta vytváří snímky do Back Bufferu pomaleji, každých 20 ms, což představuje snímkovou frekvenci 50 FPS. První snímek je vytvořen v čase 20 ms, ale musí čekat do doby VBI dalších 13,33 ms. Grafická karta nemá kam připravovat další snímek, protože Back Buffer je obsazen a renderování zastaví (IDLE). V čase 33,33 ms je proveden Swap při VBI, Back Buffer je uvolněn pro rendering dalšího snímku a Video Controller začíná konečně provádět Scan Out snímku č.1. Někde v čase 53,33 ms je snímek č.2 v Back Bufferu hotov, ale opět musí čekat do doby VBI dalších 13,33 ms, aby mohl být proveden Swap. Grafická karta při tomto čekání opět stojí (IDLE).

Z původní snímkové frekvence 50 FPS, kterou by byla grafická karta za normálních okolností schopná renderovat, jsme se nakonec dostali na frekvenci 30 FPS (jeden snímek každých 33,33 ms). Grafická karta v tomto případě trávila v IDLE kolem 40 % času a Input Lag nám narostl o 13,33 ms.

Jak tedy můžete vidět, odstranění Tearingu ve hrách za pomocí zapnutého VSync rozhodně není zadarmo a „odměněni“ tak vždy budete poklesem snímkové frekvence (někdy i fatálním) a nárůstem Input Lagu ve hrách. Díky hůře vytěžované grafické kartě pak na druhou stranu zase můžete ušetřit na její spotřebě, což je IMHO tak trochu slabá náplast.

         
Předchozí kapitola   Další kapitola
         

SPONSORS & PARTNERS

Asus  Alza  MSI  Gigabyte
AMD  Sapphire  Asbis  EVGA  Nvidia

Copyright (c) 2019 InfoTrade Powered by ASP.NET & MS SQL Server