MSI
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          
 

Triple Buffering a VSync

Pokles snímkové frekvence při zapnutém VSync je pro hráče počítačových her typu FPS (First Person Shooter) natolik závažným problémem, že se raději při svém herním běsnění zapnutí VSync ve hře vyhýbají jak čert kříži a raději se spokojí s nepříjemným Stutteringem. Pokus o nápravu věcí, tedy velkému propadu snímkové frekvence při zapnutém VSync, přináší Triple Buffering a jak už samotný název napovídá, pro prezentaci snímku na monitoru počítače nejsou použity buffery pouze dva, nýbrž hnedle tři.

Samotná myšlenka Triple Bufferingu je poměrně jednoduchá. Pokud jste si v minulé kapitole všimli, tak při zapnutém VSync a Double Bufferingu byla grafická karta velmi často nevytížena (IDLE) z důvodu toho, že Back Buffer byl zaplněn (čekal na Swap) a grafická karta vlastně ani neměla kam další snímek renderovat. Pokud bychom tedy přidali do Swap Chain další (Back) buffer, grafická karta by rendering zastavit nemusela, protože by pro vykreslení dalšího snímku mohla využít právě tohoto třetího bufferu.

 

Triple Buffering - implementace DirectX

 

Triple Buffering Chain

 

Triple Buffering v implementaci DirectX přidává do Swap Chain další Back Buffer. Výsledkem jsou pak tedy tři buffery zapojené za sebou sériově, kterými musí projít každý renderovaný snímek. Snímek je grafickou kartou vytvářen ve druhém Back Bufferu, když je snímek v tomto bufferu dokončen, je jeho obsah překlopen do prvního Back Bufferu, kde čeká do doby VBI na překlopení do Front Bufferu.

Samozřejmě, pokud grafická karta renderuje snímky vyšší snímkovou frekvencí nežli je obnovovací frekvence monitoru, žádné výhody z Triple Bufferingu se nedočkáte. Během chvilky se totiž zaplní oba Back Buffery, grafická karta opět nebude mít kam další snímek připravovat a rendering zastaví (IDLE). V takovémto případě bude opět (stejně jako u Double Bufferingu) snímková frekvence rovna obnovovací frekvenci monitoru, ale díky tomu, že nám v pipeline přibyl další buffer, Input Lag se navýší v případě 60 Hz monitoru o 16,66 ms.

Výhody Triple Bufferingu se tak dočkáte pouze v případě, kdy grafická karta renderuje snímky s nižší snímkovou frekvencí, nežli je obnovovací frekvence monitoru.

 

Triple Buffering diagram

 

V takovémto případě vám Triple Buffering na rozdíl od Double Bufferingu zajistí stálé vytížení grafické karty, což má ve finále za následek také dosahování vyšších snímkových frekvencí, nebo lépe řečeno, nižších propadů snímkové frekvence. Opět i zde ale platí, že díky dalšímu bufferu v pipeline se nám zvyšuje Input Lag o 16,66 ms u 60 Hz monitorů.

 

Triple Buffering - implementace OpenGL

 

Triple Buffering OpenGL

 

Na rozdíl od implementace DirectX je u Triple Bufferingu v OpenGL třetí buffer (Back Buffer 2) připojen paralelně k Back Bufferu 1 a obsah obou těchto Back Bufferu může být překlopen do prezentačního Front Bufferu. Vše funguje následovně.

Grafická karta začne renderovat snímek do Back Bufferu 1, jakmile je snímek hotov, označí tento buffer jako aktuální (naposled vyrenderovaný) a bez jakýchkoli skrupulí začne další snímek renderovat do Back Bufferu 2, nehledě na to, jestli v tomto druhém bufferu již nějaký snímek vyrenderovaný byl nebo nikoliv. Po vytvoření snímku v tomto druhém Back Bufferu jej opět označí jako aktuální a grafická karta se okamžitě vrhne na Back Buffer 1, do kterého opět začne renderovat snímek další. Tak to jde stále dokola a nejnověji vyrenderovaný snímek je vždy umístěn v tom Back Bufferu, který je označen příznakem jako aktuální.

V době kdy Video Controller vytváří signál VBI je pak ten Back Buffer, který je označen jako aktuální, překlopen do Front Bufferu a následně zobrazen na monitoru. Práce Back Buffer(ů) a Front Bufferu je tak oddělena podobně, jako tomu bylo u klasického Double Bufferingu bez VSync, avšak nepříjemný Tearing je pryč.

Grafická karta tedy pracuje na plný výkon a renderuje snímky nejvyšší možnou snímkovou frekvencí, na monitor však jsou zasílány snímky „v rytmu“ obnovovací frekvence monitoru. V případě nějaké svižné hry tedy grafická karta renderuje snímky do Back Bufferů rychlostí třeba 120 FPS, ale na monitor se jich dostane pouze 60 (v případě 60 Hz monitoru). A kamže se těch zbylých 60 snímků vůbec podělo? Byly vyhozeny, odstraněny, smazány, přepsány v bufferech, vyberte si výraz dle vlastní libosti. Opět, byli byste šťastnými vlastníky 120 Hz monitoru, žádný snímek by vyhozen neby a bylo by na něm zobrazeno všech 120 snímků.

Nevýhodou OpenGL Triple Bufferingu je pak to, že pro něj musí být vytvořena podpora přímo ve hře. Také jeho účinnost je vyšší v případě, kdy hra generuje snímkovou frekvenci vyšší, nežli je obnovovací frekvence monitoru.

Toto pojetí Triple bufferingu dnes není součástí pouze OpenGL, ale bylo implementováno také do nového 3D API Vulkan, kde ho můžete nalézt pod názvem Mailbox. Kdo pak sledoval vydání nových grafických karet Pascal, jistě ví, že společnost Nvidia si toto řešení vypůjčila do své nové technologie s názvem Fast Sync. Výhodou Fast Sync pak je, že je vše implementováno v ovladačích a dá se tedy vynutit prakticky u každé počítačové hry.

         
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