Frames Per Second, Explained

Most az egyik leggyakrabban feltett kérdéssel foglalkozunk a PC-s játékokkal kapcsolatban: hány képkockára van szükséged másodpercenként? A monitorod maximális frissítési frekvenciájával megegyező képkockasebességgel kell futtatnod, mondjuk 60 FPS egy 60 Hz-es monitoron, vagy van előnye annak, ha a játékokat sokkal magasabb képkockasebességgel futtatod, mint amennyit a monitorod képes megjeleníteni, mondjuk 500 FPS-sel?

A kérdés megválaszolásához egy kicsit beszélnünk kell arról, hogyan működik együtt a GPU és a kijelző, hogy képkockákat küldjön a szemgolyóidba, és hogyan működnek az olyan technológiák, mint a Vsync.

A lényeg az, hogy a játékok rendkívül magas, a monitorod frissítési frekvenciáját jóval meghaladó képkockasebességgel történő futtatása sokkal érzékenyebb játékélményhez vezet, alacsonyabb érzékelhető bemeneti késleltetéssel. Ez a válasz a kérdésre azoknak, akik nem akarnak a végéig várni. Most pedig beszéljünk arról, hogy miért.

Szerkesztő megjegyzése: Ez a cikk eredetileg 2018. augusztus 2-án jelent meg. Ma is ugyanolyan releváns és aktuális, mint akkor volt, ezért a #ThrowbackThursday kezdeményezésünk részeként újra elővettük.

Tegyük fel, hogy van egy 60 Hz-es fix frissítési frekvenciájú monitorunk. Más szóval a monitor 1/60 másodpercenként, azaz 16,7ms-enként frissíti a kijelzőt. Egy játék futtatásakor nincs garancia arra, hogy a GPU minden képkockát pontosan 16,7 milliszekundum alatt képes renderelni. Néha 20 ms, néha 15 ms, néha 8 ms szükséges hozzá. Ez a játék GPU-n történő renderelésének változó jellege.

Ezzel a változó renderelési sebességgel választható, hogy az egyes renderelt képkockák hogyan kerülnek a monitorra. Átadhatja az új képkockát a kijelzőnek, amint az teljesen renderelt, ami általánosan ismert, mint a játék “Vsync” vagy vertikális szinkronizálás kikapcsolva történő futtatása, vagy megvárhatja, amíg a kijelző készen áll a frissítésre az új képkocka elküldésével, ami “Vsync be” néven ismert.

Vsync ki

Az első módszer, a Vsync ki, könnyezést okoz. Ennek oka, hogy a kijelző nem tudja a teljes képet azonnal frissíteni, hanem soronként frissíti, általában a kijelző tetejétől az aljáig. E folyamat során egy új képkocka készen állhat a GPU-tól, és mivel nem használjuk a Vsync-et, a képkocka azonnal elküldésre kerül a kijelzőre. Az eredmény az, hogy a frissítés közepén a monitor új adatokat kap, és a kijelző többi sorát ezekkel az új adatokkal frissíti. Ekkor olyan képet kapunk, ahol a képernyő felső fele az előző képkocka, az alsó fele pedig az új, frissen elérhető képkocka.

Tearing

A megjelenített tartalomtól függően ez az új és régi képkockák közötti megosztottság egy frissítés során szakadásként, vagyis a régi és az új képkocka között látható vonalként jelenik meg. Általában ez leginkább a gyorsan mozgó jeleneteknél tűnik fel, ahol nagy a különbség az egyik képkocka és a következő között.

A kikapcsolt Vsync ugyan szakadáshoz vezet, de megvan az az előnye, hogy a GPU és a kijelző közötti alacsony késleltetés érdekében a képkockát a renderelés befejezése után azonnal elküldi a kijelzőre. Ezt tartsd szem előtt a későbbiekben.

Vsync on

A kép megjelenítésének alternatív módja a Vsync on. Itt ahelyett, hogy a GPU azonnal elküldené az új képkockát a kijelzőre, minden egyes renderelt képkockát egy pufferbe kever. Az első pufferben tárolja azt a képkockát, amelyen éppen dolgozik, a második pufferben pedig azt a képkockát, amelyet a kijelző éppen megjelenít. A frissítés során a második puffer a frissítés egyetlen pontján sem frissül, így a kijelző csak egy teljesen renderelt képkocka adatait mutatja, és ennek eredményeképpen a frissítés közbeni frissítésből adódó szakadás sem jelentkezik.

Vsync bekapcsolva, közelebbről

A második puffer frissítése csak a frissítések között történik. Hogy ez megtörténjen, a GPU a képkocka renderelésének befejezése után megvárja, amíg a kijelző frissítésre kerül. Ezután megkeveri a puffereket, elkezdi az új képkocka renderelését, és a folyamat megismétlődik. Néha a folyamat több puffert is érinthet, mielőtt egy képkocka elérné a kijelzőt, de ez a Vsync működésének általános lényege.

Ha a GPU túl lassú egy képkocka rendereléséhez… dadogás történik

A Vsync-kel két probléma van. Először is, ha a GPU renderelési sebessége túl lassú ahhoz, hogy lépést tartson a kijelző frissítési sebességével – mondjuk csak 40 FPS sebességgel képes renderelni egy 60 Hz-es kijelzőn -, akkor a GPU nem fog időben renderelni egy teljes képkockát, hogy megfeleljen a kijelző frissítésének kezdetének, így egy képkocka megismétlődik. Ez dadogást okoz, mivel egyes képkockák csak egyszer, míg mások kétszer jelennek meg.

Vsync be: 60 Hz-es kijelző, 200 FPS

A második probléma akkor jelentkezik, ha a GPU nagyon gyors, és könnyen képes egy képkockát a frissítési időközön belül megjeleníteni. Tegyük fel, hogy 200 FPS sebességgel képes renderelni, 5ms-enként új képkockát produkálva, kivéve, hogy 60 Hz-es kijelzőt használsz 16,7ms-os frissítési ablakkal.

A Vsync bekapcsolásával a GPU 5ms alatt befejezi a következő megjelenítendő képkockát, majd 11,7 ms-ot vár, mielőtt elküldi a képkockát a második pufferbe a monitoron való megjelenítéshez, és elkezdi a következő képkockát. Ezért van az, hogy bekapcsolt Vsync esetén a legmagasabb képkockasebesség, amit kapsz, megegyezik a monitorod frissítési sebességével, mivel a GPU lényegében “le van zárva” arra, hogy ne rendereljen gyorsabban, mint a frissítési sebesség.

Most ez az a pont, ahol sok a félreértés.

Gyakran hallunk olyan dolgokat, hogy “a GPU-t a monitorom frissítéséhez rögzíteni a Vsync segítségével nagyszerű, mert ha gyorsabban renderel a frissítési frekvenciánál, akkor azok a képkockák kárba vesznek, mert a monitor nem tudja megjeleníteni őket, és csak könnyezést kapok”. Sokan a Vsync használatával elért energiamegtakarításra hivatkoznak; a GPU-nak nem kell olyan keményen dolgoznia, nincs előnye a monitor frissítési frekvenciájánál magasabb képkockasebességgel való futtatásnak, ezért fuss zárolt FPS-sel és takaríts meg némi energiát.

Megértjük, hogy az emberek miért jutnak erre a következtetésre, és van benne némi igazság, de ez általánosságban nem pontos. Ennek oka pedig az, hogy nem veszed figyelembe a bemenetek feldolgozásának idejét, és azt, hogy mennyi időbe telik, amíg ezek a bemenetek materializálódnak a kijelzőn.

Vsync on including input

Hogy elmagyarázzuk, miért van ez így, nézzük meg a Vsync on diagramot, de fedjük le a diagramot az egér és a billentyűzet bemenetével, amelyet jellemzően 1ms-enként gyűjtenek. Használjuk ugyanazt a példát, ahol van egy GPU-nk, amely 60 Hz-es kijelzővel 200 FPS sebességgel képes renderelni.

A Vsync és egy egyszerű pufferrendszer esetén ebben az egyszerűsített magyarázatban a GPU az egér bemenetének megfelelő képkocka renderelését azonnal elkezdi, amint megkapja a bemenetet, azaz 0-kor. Ezután 5ms-ra van szüksége a képkocka rendereléséhez, és további 11,7ms-ot vár, mielőtt elküldi azt a kijelző pufferébe.

A kijelzőnek ezután némi időre van szüksége, hogy megkapja a renderelendő képkockát, és fizikailag soronként frissítse a kijelzőt ezzel az információval.

Vsync on including input

Még a legjobb esetben is legalább 16,7 ms késéssel számolunk a bemenet és aközött, hogy a kijelző elkezdheti megjeleníteni a bemenet eredményét számodra.

Ha figyelembe vesszük a kijelző bemeneti késleltetését, a CPU feldolgozási idejét és így tovább, a bemenet és a kijelző frissítése közötti késleltetés könnyen meghaladhatja az 50 ms-ot.

Vsync ki, beleértve a bemenetet, 60 Hz-es kijelző, 200 FPS

Most nézzük a Vsync ki diagramot. A GPU folyamatosan renderel, függetlenül attól, hogy a kijelző mikor frissül, 5 ms-ig tart, amíg a bemenetből egy teljes képkocka lesz. A kijelző ezután azonnal elkezdheti megjeleníteni az új képkockát, bár lehet, hogy annak csak egy részét. Az eredmény az, hogy a késleltetés a játékba történő bemenet és az között, hogy a kijelző elkezdheti megjeleníteni a bemenet eredményét, 16,7ms-ról mindössze 5ms-ra csökken. És a valós világbeli implementációkban nem lesznek további pufferek; ez ugyanolyan gyors, mint ez, plusz a monitorod bemeneti késleltetése.

És ez az, ahol előnybe kerülsz. Ebben a példában a 200 FPS-en való futtatás kikapcsolt Vsync-kel egy 60 Hz-es monitoron 5 ms-ra csökkenti a bemeneti késleltetést, míg bekapcsolt Vsync-kel ez a késleltetés legalább 16,7 ms, ha nem több.

Még ha a kijelző nem is képes mind a 200 képkockát másodpercenként teljes egészében megjeleníteni, amit a kijelző 1/60 másodpercenként megjelenít, az az adott képkockához időben sokkal közelebbi bemenetből származik.

Ez a jelenség természetesen a nagy frissítésű monitorok esetében is érvényes. 144 Hz-en például másodpercenként sokkal több képkockát láthatsz, így összességében simább és érzékenyebb élményt kapsz. De ha 200 FPS-en futsz kikapcsolt Vsync helyett 144 FPS-en bekapcsolt Vsync-vel, akkor is 5ms és akár 7ms közötti különbség lesz a bemeneti késleltetésben.

Most, amikor ezredmásodperces különbségekről beszélünk, valószínűleg azon tűnődsz, hogy valóban észreveheted-e ezt a különbséget a játékokban.

Az attól függően, hogy milyen játékkal játszol, a különbség a nagyon észrevehetőtől a semmiféle különbségig terjedhet. Egy olyan gyors tempójú játék, mint a CS: GO, amely 400 FPS sebességgel fut egy 60 Hz-es monitoron, ahol a bemeneti késleltetés a legjobb esetben is 2,5 ms körüli, jelentősen érzékenyebben reagál az egér mozdulataira, mintha ugyanezt a játékot 60 FPS sebességgel, 16,7 ms (vagy több) késleltetéssel futtatná.

A kijelző mindkét esetben csak másodpercenként 60 alkalommal mutat új képkockát, így nem lesz olyan sima érzés, mint egy 144 Hz-es vagy 240 Hz-es kijelzőn. De a bemeneti késleltetésben óriási a különbség. 400 FPS-en futtatva a bemenetek közel hétszer gyorsabban jutnak el a kijelzőre, ha nem gyorsabban. Próbáld ki magad, és biztosan érezni fogod a különbséget a reakciókészségben.”

És ezt a magyarázatot nem a semmiből húztuk elő, valójában az Nvidia tisztában van a Vsync korlátaival a bemeneti késleltetés tekintetében, ezért biztosítanak egy alternatívát Fast Sync néven (az AMD alternatívája az Enhanced Sync). Ez a kijelzőszinkronizációs technika olyan, mint a Vsync on és a Vsync off kombinációja, mindkét világból a legjobbat produkálva.

A Fast Sync úgy működik, hogy a Vsync on pipeline-ba bevezet egy további puffert, az úgynevezett last rendered buffert. Ez lehetővé teszi a GPU számára, hogy folytassa az új képkockák renderelését a hátsó pufferbe, és a befejezés után átmenjen az utolsó renderelt pufferbe. Ezután a kijelző frissítésekor az utolsó renderelt puffer az első pufferbe kerül, amelyhez a kijelző hozzáfér.

Fast Sync / Enhanced Sync

Az így létrejövő előny, hogy a GPU nem vár a képkocka befejezése után a kijelző frissítésére, mint a Vsync on esetében. Ehelyett a GPU folytatja a képkockák renderelését, így amikor a kijelző a frissítési időszak elején egy képkockához megy hozzá, az a képkocka már a frissítési ablakhoz közelebb került renderelésre. Ez csökkenti a bemeneti késleltetést. A kikapcsolt Vsync-től eltérően azonban a Fast Sync minden frissítés kezdetén egy kész képkockát szállít a kijelzőnek, ahelyett, hogy egyszerűen azonnal a kijelzőre tolná a képkockát, és ez a technika az, ami kiküszöböli a könnyezést.

A Fast Sync csak akkor működik, ha a képkocka sebessége nagyobb, mint a kijelző frissítési sebessége, de sikerül könnyezés nélkül gyorsabb játékélményt nyújtani. És természetesen az AMD-nek is van ennek megfelelője, az Enhanced Sync.

Remélhetőleg ez a magyarázat tisztázott néhány kérdést azzal kapcsolatban, hogy miért nyújt érzékenyebb játékélményt egy játék futtatása a monitor maximális képfrissítési frekvenciája felett, és miért jelent mindig előnyt a játékok magasabb képfrissítési frekvencián való futtatása, még akkor is, ha úgy tűnik, hogy a monitor nem tudja ezt kihasználni.

Egy utolsó megjegyzés: az adaptív szinkronizálási technológiákat, mint a G-Sync és a FreeSync, itt nem tárgyaltuk, és ez azért van, mert többnyire a játékok maximális frissítési frekvencia feletti futtatásáról beszéltünk, ahol az adaptív szinkronizálás nem alkalmazható. Rengeteg különböző szinkronizálási módszer létezik, de az adaptív szinkronizálás nagyon különbözik a Vsync-től és a Fast Sync-től, amelyekről eddig beszéltünk, és legalábbis e vita szempontjából nem igazán releváns.

További olvasnivalók
  • A legjobb játékmonitorok
  • FreeSync 2 magyarázata
  • A legjobb grafikus kártyák 2018
Vásárlási rövidítések
  • Radeon RX 570 az Amazonon, Newegg
  • Radeon RX 580 az Amazonon, Newegg
  • GeForce GTX 1060 6GB az Amazonon
  • GeForce GTX 1070 Ti az Amazonon, Newegg
  • GeForce RTX 2070 az Amazonon, Newegg
  • GeForce RTX 2080 az Amazonon, Newegg
  • GeForce RTX 2080 Ti az Amazonon, Newegg

Masthead hitel: Jakob Owens

fotója.

Articles

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.