Câte cadre pe secundă, explicate
Astăzi ne ocupăm de una dintre cele mai frecvente întrebări pe care le vedem despre jocurile pe PC: de câte cadre pe secundă ai nevoie? Ar trebui să rulați la aceeași rată de cadre ca rata maximă de reîmprospătare a monitoarelor, să zicem 60 FPS pe un monitor de 60 Hz, sau există vreun beneficiu dacă rulați jocurile la o rată de cadre mult mai mare decât poate afișa monitorul dumneavoastră, cum ar fi, să zicem, 500 FPS?
Pentru a răspunde la această întrebare, trebuie să vorbim puțin despre modul în care un GPU și un afișaj lucrează împreună pentru a trimite cadrele în globii tăi oculari și despre modul în care funcționează tehnologii precum Vsync.
Dar concluzia este că rularea jocurilor la rate de cadre extrem de ridicate, cu mult peste rata de reîmprospătare a monitorului tău, va duce la o experiență de joc mai receptivă, cu o latență de intrare percepută mai mică. Acesta este răspunsul la întrebare pentru cei care nu vor să aștepte până la sfârșit. Acum haideți să vorbim despre de ce.
Nota editorului: Acest articol a fost publicat inițial pe 2 august 2018. Este la fel de relevantă și actuală astăzi ca și atunci, așa că am reluat-o ca parte a inițiativei noastre #ThrowbackThursday.
Să presupunem că avem un monitor cu o rată de reîmprospătare fixă de 60 Hz. Cu alte cuvinte, monitorul își actualizează afișajul la fiecare 1/60 de secundă, sau la fiecare 16,7ms. Atunci când rulăm un joc, nu există nicio garanție că GPU-ul este capabil să redea fiecare cadru în exact 16,7 milisecunde. Uneori poate dura 20 ms, alteori poate dura 15 ms, alteori poate dura 8 ms. Aceasta este natura variabilă a redării unui joc pe un GPU.
Cu această rată de redare variabilă, există posibilitatea de a alege modul în care fiecare cadru redat este transmis către monitor. Acesta poate transmite noul cadru către afișaj imediat ce este complet redat, cunoscut în mod obișnuit sub numele de rularea jocului cu „Vsync” sau sincronizare verticală dezactivată, sau poate aștepta până când afișajul este gata de reîmprospătare înainte de a trimite noul cadru, cunoscut sub numele de „Vsync activat”.
Vsync dezactivat
Utilizarea primei metode, Vsync dezactivat, provoacă tearing. Acest lucru se datorează faptului că un afișaj nu poate actualiza instantaneu întreaga imagine, în schimb actualizează linie cu linie, de obicei din partea de sus a afișajului spre partea de jos. În timpul acestui proces, un nou cadru poate deveni gata de la GPU și, deoarece nu folosim Vsync, cadrul este trimis imediat către afișaj. Rezultatul este că, la jumătatea unei reîmprospătări, monitorul primește date noi și actualizează restul liniilor de pe afișaj cu aceste date noi. Rămâneți apoi cu o imagine în care jumătatea de sus a ecranului este din cadrul anterior, iar jumătatea de jos este din cadrul nou, proaspăt disponibil.
Tearing
În funcție de conținutul afișat, această împărțire între cadrele noi și cele vechi într-o singură reîmprospătare se prezintă ca o ruptură, sau o linie vizibilă între cadrele vechi și cele noi. De obicei, este cel mai vizibil în scenele care se mișcă rapid, unde există o diferență mare între un cadru și următorul.
În timp ce Vsync dezactivat duce la rupere, acesta are avantajul de a trimite un cadru pe ecran imediat ce a terminat de redat, pentru o latență scăzută între GPU și ecran. Țineți minte acest lucru pentru mai târziu.
Vsync on
O altă modalitate de a afișa o imagine este cu Vsync on. Aici, în loc ca GPU să trimită imediat noul cadru pe ecran, acesta amestecă fiecare cadru redat într-un buffer. Primul buffer este utilizat pentru a stoca cadrul la care se lucrează în prezent, iar al doilea buffer este utilizat pentru a stoca cadrul pe care îl afișează în prezent afișajul. În niciun moment în timpul reîmprospătării nu este actualizat cel de-al doilea buffer, astfel încât afișajul afișează doar datele dintr-un singur cadru complet redat și, ca urmare, nu se produce tearing din cauza unei actualizări la jumătatea reîmprospătării.
Vsync pornit, o privire mai atentă
Singurul moment în care este actualizat cel de-al doilea buffer este între reîmprospătări. Pentru a se asigura că acest lucru se întâmplă, GPU așteaptă după ce termină de redat un cadru, până când afișajul este pe cale să se reîmprospăteze. Apoi amestecă tampoanele, începe redarea unui nou cadru, iar procesul se repetă. Uneori, procesul poate implica mai multe tampoane înainte ca un cadru să ajungă la afișaj, dar aceasta este esența generală a modului în care funcționează Vsync.
Când GPU-ul dumneavoastră este prea lent pentru a reda un cadru… apare stuttering
Există două probleme cu Vsync. În primul rând, dacă rata de randare a GPU-ului dvs. este prea lentă pentru a ține pasul cu rata de reîmprospătare a afișajului – să spunem că este capabil să redea doar la 40 FPS pe un afișaj de 60 Hz – atunci GPU-ul nu va reda un cadru complet la timp pentru a respecta începutul reîmprospătării afișajului, astfel încât un cadru se repetă. Acest lucru provoacă bâlbâieli, deoarece unele cadre sunt afișate o singură dată, în timp ce altele sunt afișate de două ori.
Vsync on: Afișaj 60Hz, 200 FPS
A doua problemă apare atunci când GPU-ul dvs. este foarte rapid și este capabil să redea cu ușurință un cadru în intervalul de reîmprospătare. Să spunem că poate reda la 200 FPS, producând un nou cadru la fiecare 5 ms, cu excepția faptului că utilizați un afișaj de 60 Hz cu o fereastră de reîmprospătare de 16,7 ms.
Cu Vsync activat, GPU-ul dvs. va finaliza următorul cadru care urmează să fie afișat în 5 ms, apoi va aștepta 11,7 ms înainte de a trimite cadrul în al doilea buffer pentru a fi afișat pe monitor și de a începe următorul cadru. Acesta este motivul pentru care, cu Vsync activat, cea mai mare rată de cadre pe care o veți obține se potrivește cu rata de reîmprospătare a monitorului dumneavoastră, deoarece GPU-ul este în esență „blocat” să nu redea mai repede decât rata de reîmprospătare.
Acum, în acest punct există o mulțime de confuzii.
De multe ori auzim lucruri de genul „blocarea GPU-ului la rata de reîmprospătare a monitorului meu folosind Vsync este grozavă, deoarece dacă redă mai repede decât rata de reîmprospătare, acele cadre sunt irosite deoarece monitorul nu le poate afișa și tot ce obțin este tearing”. O mulțime de oameni indică economiile de energie din utilizarea Vsync; GPU-ul nu trebuie să lucreze atât de mult, nu există niciun beneficiu dacă rulezi la rate de cadre mai mari decât rata de reîmprospătare a monitorului, așa că rulează la un FPS blocat și economisește energie.
Am putea înțelege de ce oamenii ar ajunge la această concluzie și există unele părți de adevăr acolo, dar nu este corectă în general. Iar motivul este că nu țineți cont de timpul în care sunt procesate intrările și de cât timp este nevoie pentru ca aceste intrări să se materializeze pe afișaj.
Vsync on, inclusiv intrarea
Pentru a explica de ce se întâmplă acest lucru, să ne uităm la diagrama Vsync on, dar să suprapunem diagrama cu intrarea de la mouse și tastatură, care este de obicei adunată la fiecare 1ms. Să folosim, de asemenea, același exemplu în care avem un GPU capabil să redea la 200 FPS cu un afișaj de 60 Hz.
Cu Vsync și un sistem buffer simplu, în această explicație simplificată GPU-ul începe să redea un cadru corespunzător intrării mouse-ului dvs. imediat ce primește acea intrare, la timpul 0. Apoi are nevoie de 5 ms pentru a reda cadrul și mai așteaptă încă 11,7 ms înainte de a-l trimite la bufferul de afișare.
Afișajul are apoi nevoie de ceva timp pentru a primi cadrul care urmează să fie redat și pentru a actualiza fizic afișajul linie cu linie cu aceste informații.
Vsync la includerea intrării
Inclusiv în cel mai bun scenariu, avem de-a face cu o întârziere de cel puțin 16,7ms între momentul în care intrați și momentul în care afișajul poate începe să vă arate rezultatele acestei intrări.
Când se ia în considerare întârzierea de intrare a afișajului, timpul de procesare a procesorului și așa mai departe, latența dintre intrare și reîmprospătarea afișajului ar putea fi cu ușurință mai mare de 50ms.
Vsync off inclusiv intrarea, afișaj 60Hz, 200 FPS
Acum să ne uităm la diagrama Vsync off. GPU-ul redă în mod continuu, indiferent de momentul în care afișajul se reîmprospătează, având nevoie de 5 ms pentru a transforma intrarea dvs. într-un cadru complet. Afișajul poate începe apoi să afișeze imediat acel nou cadru, deși ar putea fi doar o parte din acel cadru. Rezultatul este că timpul de latență între momentul în care introduceți date în joc și momentul în care afișajul poate începe să afișeze rezultatele acestor date se reduce de la 16,7 ms la doar 5 ms. Și nu vor exista tampoane suplimentare în implementările din lumea reală; este la fel de rapid ca asta, plus decalajul de intrare al monitorului dumneavoastră.
Și de aici rezultă avantajul. În acest exemplu, rularea la 200 FPS cu Vsync dezactivat pe un monitor de 60 Hz reduce latența de intrare la 5 ms, în timp ce cu Vsync activat, această latență este de cel puțin 16,7 ms, dacă nu mai mult.
Chiar dacă afișajul nu este capabil să afișeze toate cele 200 de cadre pe secundă în întregime, ceea ce afișează la fiecare 1/60 de secundă este produs dintr-o intrare mult mai apropiată în timp de acel cadru.
Acest fenomen, desigur, se aplică și în cazul monitoarelor cu refresh ridicat. La 144 Hz, de exemplu, veți putea vedea mult mai multe cadre în fiecare secundă, astfel încât veți avea o experiență mai fluidă și mai receptivă în general. Dar rulând la 200 FPS cu Vsync dezactivat, mai degrabă decât la 144 FPS cu Vsync activat, veți avea totuși o diferență între 5 ms și peste 7 ms de latență de intrare.
Acum, când vorbim despre diferențe de milisecunde, probabil că vă întrebați dacă puteți observa cu adevărat această diferență în jocuri.
În funcție de tipul de joc pe care îl jucați, diferența poate fi orice, de la foarte vizibilă, până la nici o diferență. Un joc rapid, cum ar fi CS: GO, care rulează la 400 FPS pe un monitor de 60 Hz, cu o latență de intrare în cel mai bun caz de aproximativ 2,5 ms, se va simți semnificativ mai receptiv la mișcările mouse-ului decât dacă ați rula același joc la 60 FPS cu o latență de 16,7 ms (sau mai mult).
În ambele cazuri, afișajul vă arată un nou cadru doar de 60 de ori pe secundă, așa că nu se va simți la fel de fluid ca pe un afișaj de 144 Hz sau 240 Hz. Dar diferența în ceea ce privește latența de intrare este enormă; rularea la 400 FPS vă permite să transmiteți intrările pe ecran de aproape 7 ori mai repede, dacă nu chiar mai mult. Încercați și dumneavoastră și veți simți cu siguranță diferența în ceea ce privește capacitatea de reacție.
Și nu am scos această explicație de nicăieri, de fapt, Nvidia cunoaște limitările Vsync în ceea ce privește latența de intrare, motiv pentru care oferă o alternativă numită Fast Sync (alternativa AMD se numește Enhanced Sync). Această tehnică de sincronizare a afișajului este ca o combinație între Vsync on și Vsync off, producând ceea ce este mai bun din ambele lumi.
Fast Sync funcționează prin introducerea unui buffer suplimentar în pipeline-ul Vsync on numit ultimul buffer redat. Acest lucru permite GPU să continue redarea cadrelor noi în bufferul din spate, trecând în ultimul buffer redat atunci când este finalizat. Apoi, la o reîmprospătare a afișajului, ultimul buffer redat este împins în bufferul din față pe care îl accesează afișajul.
Fast Sync / Enhanced Sync
Avantajul pe care îl creează acest lucru este că GPU nu mai așteaptă după finalizarea unui cadru ca reîmprospătarea afișajului să aibă loc, așa cum se întâmplă în cazul Vsync on. În schimb, GPU continuă să redea cadrele, astfel încât, atunci când afișajul merge să acceseze un cadru la începutul perioadei de reîmprospătare, acel cadru a fost redat mai aproape de fereastra de reîmprospătare. Acest lucru reduce latența de intrare. Cu toate acestea, spre deosebire de Vsync dezactivat, Fast Sync livrează un cadru finalizat către afișaj la începutul fiecărei reîmprospătări, în loc să împingă pur și simplu cadrul către afișaj imediat, iar această tehnică este cea care elimină tearing-ul.
Fast Sync este funcțional doar atunci când rata de cadre este mai mare decât rata de reîmprospătare a afișajului, dar reușește să ofere o experiență de joc mai receptivă fără tearing. Și, bineînțeles, AMD are un echivalent numit Enhanced Sync.
Sperăm că această explicație va fi clarificat o parte din întrebările dvs. cu privire la motivul pentru care rularea unui joc peste rata maximă de reîmprospătare a monitorului dvs. oferă o experiență de joc mai receptivă și de ce capacitatea de a rula jocuri la rate de cadre mai mari este întotdeauna un avantaj, chiar dacă s-ar putea părea că monitorul dvs. nu poate profita de acest lucru.
O ultimă observație: nu am discutat aici despre tehnologiile de sincronizare adaptivă, cum ar fi G-Sync și FreeSync, și asta pentru că am vorbit în principal despre rularea jocurilor peste rata maximă de reîmprospătare, unde sincronizarea adaptivă nu se aplică. Există o mulțime de metode de sincronizare diferite, dar sincronizarea adaptivă este foarte diferită de Vsync și Fast Sync despre care am vorbit și, cel puțin pentru această discuție, nu este cu adevărat relevantă.
Lecturi suplimentare
- Cele mai bune monitoare pentru jocuri
- FreeSync 2 Explained
- Cele mai bune plăci grafice 2018
Shopping Shortcuts
- Radeon RX 570 pe Amazon, Newegg
- Radeon RX 580 pe Amazon, Newegg
- GeForce GTX 1060 6GB pe Amazon
- GeForce GTX 1070 Ti pe Amazon, Newegg
- GeForce RTX 2070 pe Amazon, Newegg
- GeForce RTX 2070 pe Amazon, Newegg
- GeForce RTX 2080 pe Amazon, Newegg
- GeForce RTX 2080 Ti pe Amazon, Newegg
Credit pentru cap de masă: Fotografie realizată de Jakob Owens
.