Poruchy plynulosti pohybu v počítačových hrách
30.10.2015, Pavel Šantrůček, recenze
Už jste někdy slyšeli o poruchách plynulosti pohybu v počítačových hrách? Víte, co jsou to latence, frame times, jak je měřit a vyhodnocovat? Pokud ne, tento článek by Vám neměl uniknout, jelikož je určený právě pro Vás.
Kapitoly článku:
- Úvod
- Variabilita snímkové frekvence
- Stuttering
- Micro-stuttering
- Měření
- Minimální FPS a Percentily
- Směrodatná odchylka
- Variabilita snímkové frekvence - výpočet
- Stuttering - výpočet
- Porovnatelná snímková frekvence
- Příklad
- Závěr
Výpočet variability snímkové frekvence
Z předchozí kapitoly víme, co je to směrodatná odchylka a jak ji vypočítat. Na jednoduchém příkladu jsme si ukázali postup výpočtu, kdy jsme směrodatnou odchylku počítali z naměřených hodnot snímkové frekvence. V praxi však hodnoty snímkové frekvence nepoužíváme z prostého důvodu – těchto hodnot je příliš málo na to, abychom dosáhli nějaké výraznější přesnosti.
Předpokládejme, že měříme snímkovou frekvenci na testovací scéně (hře) po dobu 60 sekund. Obdržíme tedy 60 hodnot snímkové frekvence, jednu pro každou sekundu testovací scény. Ze statistického hlediska je však 60 hodnot přeci jen malou množinou dat a výsledky by tedy nemusely mít potřebnou vypovídací hodnotu. V našich výpočtech tedy budeme raději využívat časy jednotlivých snímků (frame times), což nám zaručuje dostatečné množství vstupních hodnot.
Budeme-li opětovně uvažovat, že měříme na testovací scéně po dobu 60 sekund, pak při průměrné snímkové frekvenci 60 FPS bychom mohli obdržet okolo 3600 vstupních dat (časů snímků), což je již postačující.
Takže předpokládejme, že jsme pomocí nástroje FRAPS zaznamenali v naší testovací scéně časy jednotlivých snímků do logovacího souboru. Pokud bychom tyto časy pro každý jednotlivý snímek z našeho souboru zanesli do spojnicového grafu, vypadalo by to následovně.
Průměrný frame time (žlutá), který je dán podílem součtu časů všech snímků a jejich počtem, je v našem grafu roven hodnotě 24 milisekund. Pokud bychom chtěli, tento průměrný čas můžeme jednoduchým způsobem převést na snímkovou frekvenci podle vzorce 1000 / čas (v milisekundách), tedy 1000 / 24 = 41,6 FPS. Převodem průměrného frame time na snímkovou frekvenci obdržíme nám dobře známou veličinu nazvanou průměrná snímková frekvence, která se využívá pro srovnávání grafických karet ve většině dnešních recenzí. To je ale jen tak na okraj, protože my budeme v našich příkladech dále pracovat výhradně s jednotkami času v milisekundách, nikoliv s FPS.
Průměrný čas snímků tedy máme vypočtený, a tak bychom nyní mohli snadno provést výpočet směrodatné odchylky tak, že bychom vypočetli rozptyl hodnot a výsledek odmocnili. Dostali bychom pak směrodatnou odchylku celého průběhu frame times, která by byla daleko přesnějším vyjádřením variability, než nám doposud poskytovaly hodnoty minimální FPS či Percentily.
Jenže naším cílem nebylo zjistit pouhou variabilitu frame times, my jsme chtěli mnohem více a rádi bychom zjistili odděleně variabilitu všech typů poruch plynulosti pohybu, tedy snímkové frekvence, stutteringu a také micro-stutteringu.
K tomuto účelu je zapotřebí provést ještě jeden dodatečný, avšak nezbytný krok. Pro zjištění variability snímkové frekvence a stutteringu bychom potřebovali vést pomyslným středem vynesených hodnot modré křivky frame times další a mnohem hladší křivku, která by pro nás představovala průběh snímkové frekvence (v milisekundách) a díky níž bychom mohli později vyjádřit také stuttering.
Pokud byl předchozí odstavec někomu méně srozumitelný, pak obrázek snad osvětluje vše. Červená křivka, která vede pomyslným středem vynesených hodnot frame times (modrá), pro nás bude představovat průběh snímkové frekvence (v milisekundách) a my tak nyní můžeme počítat její směrodatnou odchylku bez toho, že by se nám tam pletly skokové změny hodnot stutteringu. Jednoduše by se dalo říci, že jsme se zbavili stutteringu.
Otázkou je, jak matematicky získat onu červenou křivku vyjadřující pro nás průběh snímkové frekvence. My se v článku tímto výpočtem zabývat nebudeme. Ono by to totiž poněkud překročilo jeho rámec a zřejmě i znechutilo mnoho čtenářů, které to jednak příliš nezajímá, ale také zajímat vůbec nemusí, protože tyto výpočty za ně provede samotný FLA Calculator. Nám jde o pochopení principu jako takového, nikoliv aby z toho člověk dělal maturitu. Těm zvídavějším mohu prozradit, že hodnoty této křivky se získávají tak, že se na původní hodnoty frame times aplikují různé low-pass filtry, které jejich průběh vyhladí. Konkrétně FLA Calculátor pro tyto výpočty využívá metodu plovoucího (klouzavého) průměru, kterou aplikuje v několika průchodech.
Kýženou křivku průběhu snímkové frekvence tedy máme vytvořenou, takže samotný výpočet její směrodatné odchylky by již pro nás neměl být větším problémem. Postupně budeme od hodnot snímkové frekvence odečítat hodnotu průměrného času snímku (průměrný frame time), umocníme a průměr těchto hodnot (rozptyl) opětovně odmocníme.
Takto vypočtená hodnota směrodatné odchylky nám bude udávat míru variability snímkové frekvence. A jak už víme, čím vyšší hodnotu této odchylky obdržíme, tím vyšší bude i variabilita snímkové frekvence a naopak. Jednotkou směrodatné odchylky snímkové frekvence jsou samozřejmě milisekundy.
Směrodatnou odchylku snímkové frekvence máme tedy vypočtenu a můžeme se pustit do dalších výpočtů. V našem případě do výpočtu směrodatné odchylky stutteringu.