TakéFPS, frames per second, framerateZákladní

Definice

Snímková frekvence je počet samostatných obrazů, které systém zobrazí nebo zaznamená za jednu sekundu. Udává se obvykle ve FPS a ovlivňuje plynulost videa, hry, animace i snímání kamerou. Důležitý není jen průměr, ale také pravidelnost intervalů mezi snímky v čase.

Kategorie: Grafické programováníAktualizováno

Co snímková frekvence měří

Snímková frekvence popisuje, kolikrát za sekundu se v obraze objeví nový snímek. Jednotka FPS pochází z anglického frames per second. U videa jde o rychlost záznamu nebo přehrávání, u hry a animace o výsledek práce CPU, GPU a zobrazovacího řetězce. Hodnota 60 FPS znamená cílově nový obraz přibližně každých 16,7 ms; 30 FPS znamená přibližně 33,3 ms. Právě délka snímku, často nazývaná frame time, bývá pro vnímanou plynulost přesnější než samotný průměr.

Proč průměr FPS někdy klame

Průměrná snímková frekvence schová krátké záseky. Aplikace může vykázat 60 FPS za jednu sekundu, ale pokud několik snímků dorazí pozdě, uživatel uvidí cuknutí. Proto se u her, VR a interaktivního UI sledují také percentily frame time, propady a rovnoměrnost. Animace působí lépe, když se snímky střídají v pravidelném rytmu, i kdyby číselný průměr nebyl rekordní.

Vztah k monitoru, kameře a rendereru

Obnovovací frekvence displeje říká, kolikrát panel umí za sekundu překreslit obraz. Snímková frekvence aplikace říká, jak často vznikají nová obrazová data. Pokud hra renderuje rychleji než displej obnovuje, část snímků se nikdy nezobrazí, případně vznikne tearing. Pokud aplikace renderuje pomaleji, displej opakuje starší snímky. Synchronizace s obnovováním, například VSync nebo plánování přes requestAnimationFrame, pomáhá sladit výpočet s okamžikem zobrazení.

Proč je vyšší FPS dražší

Vyšší snímková frekvence zkracuje časový rozpočet pro jeden snímek. Renderer musí za kratší dobu vyřešit logiku scény, fyziku, animace, stíny, postprocessing a odeslání práce na GPU. U videa se častější snímky projeví větším množstvím dat před kompresí a často i vyššími nároky na enkódování. Výsledkem může být vyšší spotřeba baterie, větší zahřívání zařízení nebo nižší grafické nastavení.

Kde vzniká snímková frekvence na webu

Webová animace nevyrábí FPS jen jedním parametrem. Prohlížeč skládá JavaScript, výpočet stylů, layout, rasterizaci a kompozici vrstev. Animace vlastností, které se dají kompozitovat, typicky transform a opacity, mívají menší riziko záseků než časté přepočty layoutu. Funkce requestAnimationFrame navíc volá kód v rytmu, který prohlížeč považuje za vhodný pro další vykreslení.

Změna FPS není jen přepočet čísla

Převod z jedné snímkové frekvence na druhou vyžaduje rozhodnutí, co se stane s časem mezi původními snímky. Jednoduché vyhození nebo zopakování snímků může vytvořit trhání, protože pohyb nezůstane rovnoměrný. Pokročilejší postupy dopočítávají mezisnímky nebo mění časování přehrávání, ale mohou přidat artefakty a latenci. U interaktivních aplikací je proto lepší produkovat snímky v rytmu cílového zařízení než dodatečně maskovat nepravidelnost.

Příklady z praxe

  1. Měření plynulosti webové animace

    Vývojář webové hry si v prohlížeči měří orientační FPS pomocí requestAnimationFrame. Konzole ukáže, že při otevřeném debug panelu klesá plynulost pod cílovou hodnotu, takže autor přesune část výpočtů mimo hlavní animační smyčku. Výsledek není laboratorní benchmark, ale rychle odhalí, kdy UI ztrácí rytmus.

    let last = performance.now();
    let frames = 0;
    
    function tick(now) {
      frames++;
      if (now - last >= 1000) {
        console.log(`FPS: ${frames}`);
        frames = 0;
        last = now;
      }
      requestAnimationFrame(tick);
    }
    
    requestAnimationFrame(tick);
  2. Scrollování v mobilním UI

    Mobilní aplikace má seznam karet s náhledy, stíny a animovaným posunem. Na slabším telefonu se při scrollování některé snímky nestihnou vykreslit, takže uživatel cítí zasekávání, i když aplikace průměrně nevypadá pomalá. Zjednodušení stínů a přesun animace na transformace sníží počet pozdních snímků.

Časté omyly

Mýtus30 FPS je vždycky přesně poloviční plynulost proti 60 FPS.
Ve skutečnostiRozdíl mezi 30 a 60 FPS je výrazný, ale vnímání plynulosti není jen lineární porovnání čísel. Velkou roli hraje pravidelnost frame time, typ pohybu, rozmazání pohybu, vstupní latence a obnovovací frekvence displeje.
MýtusVyšší FPS automaticky znamená lepší obraz.
Ve skutečnostiVyšší snímková frekvence může zlepšit plynulost a odezvu, ale sama nezaručuje vyšší kvalitu obrazu. Horší komprese, nízké rozlišení, nestabilní frame time nebo slabé osvětlení u kamery mohou výsledný dojem zhoršit.

Časté dotazy

Proč hra při 60 FPS může pořád působit trhaně?
Snímková frekvence hry může mít průměr 60 FPS a přesto působit trhaně, protože průměr neukazuje rozložení snímků v čase. Pokud několik snímků dorazí pozdě a další dorazí rychle za sebou, výpočet průměru vypadá dobře, ale oko zachytí nepravidelný pohyb. Pro hodnocení plynulosti je proto důležitý frame time, propady a stabilita, nejen jedna průměrná hodnota.
Jak snímková frekvence souvisí s obnovovací frekvencí monitoru?
Snímková frekvence popisuje, kolik nových obrazů vytvoří video, hra nebo aplikace za sekundu. Obnovovací frekvence monitoru popisuje, kolikrát za sekundu panel dokáže obraz zobrazit. Pokud aplikace dodává snímky pomaleji než monitor obnovuje, některé obrazy se opakují. Pokud aplikace dodává snímky rychleji, část snímků se nemusí zobrazit nebo může vzniknout tearing bez vhodné synchronizace.
Kolik FPS potřebuje webová animace?
Snímková frekvence webové animace by měla odpovídat tomu, co uživatel vnímá jako plynulé na svém zařízení, a zároveň nesmí zbytečně zatěžovat baterii a procesor. Prohlížeč obvykle plánuje animace přes requestAnimationFrame podle zobrazovacího rytmu zařízení. Prakticky je důležitější vyhnout se dlouhým úlohám, častému layoutu a blokování hlavního vlákna než ručně prosazovat konkrétní pevné FPS.
Proč video s vyšším FPS zabírá víc místa?
Snímková frekvence videa zvyšuje počet obrazů, které je potřeba uložit nebo zakódovat za stejný čas. Komprese sice využívá podobnosti mezi snímky, ale rychlejší pohyb a více časových vzorků obvykle znamenají vyšší datové nároky při stejné kvalitě. Vyšší FPS proto může vyžadovat vyšší bitrate, silnější enkodér nebo kompromis v rozlišení a detailech.

Zdroje

  1. Frame rate(otevře se v novém okně)Wikipedia
  2. Window: requestAnimationFrame() method(otevře se v novém okně)MDN Web Docs
  3. Timing control for script-based animations(otevře se v novém okně)World Wide Web Consortium

Související pojmy

Potřebujete to vyřešit v praxi?

Poradíme, jak na to ve vašem projektu

Vysvětlit pojem je jedna věc, navrhnout kolem něj funkční řešení druhá. Ozvěte se a probereme, co dává smysl u vás.