HomeTest Vega 56 - úvodGamesProfessional appsSynthetic benchmarksFrame times vs. FPSDemos
Zde se pokusím napravit omyly často páchané při interpretacích Frame Times (časy snímků) pomocí FPS a naopak.

Uveďmě si příklad. Ve hře Cvilizace 6 byl puštěn benchmark, na jehož konci jsou tyto výsledky: Average frame time: 17.949 ms, 99th Percentile: 25.300 ms.
Benchmark samotný vytváří log soubor, ve kterém jsou sekvenčně zaznamenány všechny časy, kolik trvalo systému pro renderování jednoho každého snímku.
Máte-li zájem si prohlédnout si tyto časy, klikněte sem, pro opětovné schování výsledků klikněte sem.

Ve výsledcích vyhledám minimální a maximální časy snímkům, a průměrný čas vypočítáme: Minimum ft=9.8698 ms, average ft=17.949333732057 ms, maximal ft=29.03987 ms.
První, co nás napadne je, že výpočtem (1000 milisekund / frametime) zjistíme konkrétní FPS., což by v tomto případě znamenalo: Min. 34.44 fps, avg. 55.71 fps a max. 101.32 fps.
Pro pořádek podotýkám, že max. fps bych samozřejmě počítal z min. frametime a naopak :)

Jenomže... no prostě chyba. Reálné fps vychází jinak:Min. 43 fps, avg. 55.7 fps a max. 96 fps ...tedy krom průměrných fps. Ty pro jistotu, aby v tom byl pořádný zmatek sedí.
Jak to? Není to úplně složité, ale je potřeba se zamyslet - minimální Frame Time se vyskytl pouze jednou - neopakuje se v dané sekundě neustále dokola, aby ji "vyplnil" celou .

Pokud ani to nestačí, pak bych ve světle (či temnotě) výše řečeného zkusil rozebrat pojem FPS, tedy Frames Per Second,
tedy počet za sebou jdoucích snímků v dané vteřině. Jinak by se tomu říkalo třeba FOUT - any Frame Once Upon a Time :)
Chcete-li, spočítejte si to osobně, všechny časy snímků jsou na této stránce k dispozici.

Pro správný výpočet FPS z naměřených Frame Times je tedy třeba použít poněkud jiný algoritmus.
Od času 0 přičítáme jednotlivé časy snímků a za každý takto přičtený si uděláme jednu čárku. Ve chvíli, kdy se výsledný čas rovná, nebo přesáhne 1000 milisekund spočítáme čárky.
Počet čárek za danou sekundu nám udává FPS za tutéž sekundu. Od výsledného času (např. 1004.7895) odečteme 1000 a pokračujeme od začátku s tím,
že akorát již nenulujeme výchozí čas.
Pro přesnost výpočtu jen dodám, že pokud poslední přičtený čas snímku "přetekl" přes 1000, pak tento snímek do výsledného počtu v dané sekundě nezapočítáváme.

Sám jsem dlouho tápal, proč mi výsledky např. ve STALKER benchmarku vychází rozdílně od oficiálních.
Tedy kromě rozdíl průměrných FPS. To je totiž jediná hodnota, která se dá jednoduše vypočítat z avg. Frame Time (1000/average frame time).

A STALKER benchmark evidentně používá výpočet minimálních a maximálních FPS z max. a min. Frame Times i přes to, že minima a maxima FPS jsou ve skutečnosti jiné.
© 2017 - The Krumpáč Corporation