Frames Per Second, Spiegati
Oggi ci occupiamo di una delle domande più frequenti che ci vengono poste sul PC gaming: di quanti frame al secondo hai bisogno? Dovresti correre allo stesso frame rate della frequenza di aggiornamento massima del tuo monitor, diciamo 60 FPS su un monitor da 60 Hz, o c’è un vantaggio nell’eseguire i giochi ad un frame rate molto più alto di quello che il tuo monitor può visualizzare, come ad esempio 500 FPS?
Per rispondere a questa domanda dobbiamo parlare un po’ di come una GPU e un display lavorano insieme per inviare i fotogrammi nei vostri occhi, e di come funzionano tecnologie come Vsync.
Ma la linea di fondo è che l’esecuzione di giochi a frame rate estremamente elevati, ben al di sopra della frequenza di aggiornamento del monitor, porterà a un’esperienza di gioco più reattiva con una minore latenza di input percepita. Questa è la risposta alla domanda per coloro che non vogliono aspettare fino alla fine. Ora parliamo del perché.
Nota del redattore: Questa caratteristica è stata originariamente pubblicata il 2 agosto 2018. È altrettanto rilevante e attuale oggi quanto lo era allora, quindi l’abbiamo riproposto come parte della nostra iniziativa #ThrowbackThursday.
Prevediamo di avere un monitor con una frequenza di aggiornamento fissa di 60 Hz. In altre parole, il monitor aggiorna il suo display ogni 1/60 di secondo, o ogni 16,7ms. Quando si esegue un gioco, non c’è garanzia che la GPU sia in grado di renderizzare ogni fotogramma esattamente in 16,7 millisecondi. A volte potrebbe impiegare 20ms, a volte 15ms, a volte 8ms. Questa è la natura variabile del rendering di un gioco su una GPU.
Con questo tasso di rendering variabile, c’è una scelta di come ogni frame renderizzato viene passato al monitor. Può passare il nuovo fotogramma al display non appena è completamente renderizzato, comunemente noto come eseguire il gioco con “Vsync” o vertical sync off, o può aspettare fino a quando il display è pronto per il refresh prima di inviare il nuovo fotogramma, noto come “Vsync on”.
Vsync off
Utilizzando il primo metodo, Vsync off, causa tearing. Questo perché un display non può aggiornare l’intera immagine istantaneamente, ma si aggiorna riga per riga, di solito dalla parte superiore del display a quella inferiore. Durante questo processo, un nuovo fotogramma può diventare pronto dalla GPU, e siccome non stiamo usando il Vsync, il fotogramma viene inviato al display immediatamente. Il risultato è che a metà di un refresh, il monitor sta ricevendo nuovi dati, e aggiorna il resto delle linee sul display con questi nuovi dati. Ti ritrovi quindi con un’immagine in cui la metà superiore dello schermo è del fotogramma precedente e la metà inferiore è del nuovo fotogramma appena disponibile.
Tearing
A seconda del contenuto che viene visualizzato, questa divisione tra fotogrammi nuovi e vecchi in un refresh si presenta come uno strappo, o linea visibile tra il vecchio e il nuovo fotogramma. Di solito è più evidente nelle scene in rapido movimento dove c’è una grande differenza tra un fotogramma e il successivo.
Sebbene Vsync off porti al tearing, ha il vantaggio di inviare un fotogramma al display non appena ha finito il rendering, per una bassa latenza tra la GPU e il display. Tenetelo a mente per dopo.
Vsync on
Il modo alternativo di visualizzare un’immagine è con Vsync on. Qui, invece di inviare immediatamente il nuovo fotogramma al display, la GPU mescola ogni fotogramma renderizzato in un buffer. Il primo buffer viene utilizzato per memorizzare il fotogramma su cui si sta lavorando al momento, e il secondo buffer viene utilizzato per memorizzare il fotogramma che il display sta attualmente mostrando. In nessun momento durante il refresh il secondo buffer viene aggiornato, così il display mostra solo i dati di un fotogramma completamente renderizzato, e come risultato non si ottiene il tearing da un aggiornamento a metà del refresh.
Vsync on, a closer look
L’unico punto in cui il secondo buffer viene aggiornato è tra i refresh. Per assicurarsi che ciò accada, la GPU aspetta dopo aver completato il rendering di un fotogramma, fino a quando il display sta per essere aggiornato. Poi mescola i buffer, inizia il rendering di un nuovo frame e il processo si ripete. A volte il processo potrebbe coinvolgere più buffer prima che un fotogramma raggiunga il display, ma questa è la sostanza generale di come funziona Vsync.
Quando la tua GPU è troppo lenta per renderizzare un fotogramma… succede lo stuttering
Ci sono due problemi con Vsync. In primo luogo, se la velocità di rendering della GPU è troppo lenta per tenere il passo con la frequenza di aggiornamento del display – diciamo che è solo in grado di renderizzare a 40 FPS su un display a 60 Hz – allora la GPU non renderà un frame completo in tempo per soddisfare l’inizio del refresh del display, quindi un frame viene ripetuto. Questo causa stuttering in quanto alcuni fotogrammi vengono visualizzati solo una volta, mentre altri vengono visualizzati due volte.
Vsync on: Display a 60Hz, 200 FPS
Il secondo problema si verifica quando la tua GPU è molto veloce ed è facilmente in grado di renderizzare un fotogramma entro l’intervallo di refresh. Diciamo che può renderizzare a 200 FPS, producendo un nuovo fotogramma ogni 5ms, tranne che state usando un display a 60 Hz con una finestra di aggiornamento di 16,7ms.
Con Vsync attivo, la vostra GPU completerà il prossimo fotogramma da visualizzare in 5ms, poi aspetterà 11,7 ms prima di inviare il fotogramma al secondo buffer per essere visualizzato sul monitor e iniziare il fotogramma successivo. Questo è il motivo per cui con Vsync attivo, il frame rate più alto che otterrete corrisponde alla frequenza di aggiornamento del vostro monitor, poiché la GPU è essenzialmente ‘bloccata’ nel rendering non più veloce della frequenza di aggiornamento.
Ora è a questo punto che c’è molta confusione.
Sentiamo spesso cose come “bloccare la GPU al refresh del mio monitor usando Vsync è fantastico, perché se renderizza più velocemente della frequenza di aggiornamento, quei fotogrammi sono sprecati perché il monitor non può mostrarli, e tutto ciò che ottengo è il tearing”. Molte persone puntano al risparmio energetico derivante dall’uso del Vsync; la tua GPU non ha bisogno di lavorare così duramente, non c’è alcun beneficio nell’eseguire a frame rate più alti della frequenza di aggiornamento del monitor, quindi esegui a un FPS bloccato e risparmia un po’ di energia.
Possiamo capire perché la gente potrebbe arrivare a questa conclusione e ci sono alcuni pezzi di verità, ma non è accurato in generale. E la ragione di questo è che non si sta calcolando il tempo in cui gli input vengono processati, e quanto tempo ci vuole perché questi input si materializzino sul display.
Vsync on includendo l’input
Per spiegare perché questo è il caso, guardiamo il diagramma Vsync on, ma sovrapponiamo il diagramma con l’input dal vostro mouse e tastiera, che è tipicamente raccolto ogni 1ms. Usiamo anche lo stesso esempio in cui abbiamo una GPU in grado di renderizzare a 200 FPS con un display a 60 Hz.
Con Vsync e un semplice sistema di buffer, in questa spiegazione semplificata la GPU inizia a renderizzare un frame corrispondente all’input del mouse non appena riceve quell’input, al tempo 0. Poi impiega 5ms per renderizzare il frame, e attende altri 11,7ms prima di inviarlo al buffer del display.
Il display impiega poi un po’ di tempo per ricevere il frame da renderizzare e aggiornare fisicamente il display riga per riga con questa informazione.
Vsync su input compreso
Anche nel migliore dei casi, stiamo cercando un ritardo di almeno 16,7ms tra il tuo input e quando il display può iniziare a mostrarti i risultati di quell’input.
Quando si calcola il ritardo di input del display, il tempo di elaborazione della CPU e così via, la latenza tra l’input e il refresh del display potrebbe essere facilmente superiore a 50ms.
Vsync off incluso l’input, display 60Hz, 200 FPS
Ora guardiamo il diagramma Vsync off. La GPU esegue continuamente il rendering indipendentemente da quando il display sta aggiornando, impiegando 5ms per trasformare il vostro input in un frame completo. Il display può quindi iniziare a visualizzare quel nuovo frame immediatamente, anche se potrebbe essere solo una parte di quel frame. Il risultato è che la latenza tra il vostro input al gioco, e quando il display può iniziare a mostrare i risultati di quell’input, si riduce da 16,7ms a soli 5ms. E non ci sarà alcun buffer aggiuntivo nelle implementazioni del mondo reale; è veloce come quello, più l’input lag del vostro monitor.
E qui è dove si ottiene il vantaggio. In questo esempio, l’esecuzione a 200 FPS con Vsync off su un monitor a 60 Hz riduce la latenza di input a 5ms, mentre con Vsync on, quella latenza è di almeno 16,7ms, se non di più.
Anche se il display non è in grado di mostrare tutti i 200 fotogrammi al secondo nella sua interezza, ciò che il display mostra ogni 1/60 di secondo è prodotto da un input molto più vicino nel tempo a quel fotogramma.
Questo fenomeno, naturalmente, si applica anche con monitor ad alto refresh. A 144 Hz, per esempio, sarete in grado di vedere molti più fotogrammi ogni secondo, quindi avrete un’esperienza complessivamente più fluida e reattiva. Ma correre a 200 FPS con Vsync off piuttosto che a 144 FPS con Vsync on vi darà ancora una differenza tra 5ms e più di 7ms di latenza di input.
Ora che stiamo parlando di differenze di millisecondi, probabilmente vi starete chiedendo se si può effettivamente notare questa differenza nei giochi. Un gioco veloce come CS: GO che gira a 400 FPS su un monitor a 60 Hz, con una latenza di input nel migliore dei casi intorno ai 2,5ms, si sentirà significativamente più reattivo ai movimenti del mouse rispetto a un gioco a 60 FPS con 16,7ms di latenza (o più).
In entrambi i casi il display sta mostrando un nuovo frame solo 60 volte al secondo, quindi non sarà così fluido come su un display a 144 Hz o 240 Hz. Ma la differenza nella latenza di input è enorme; l’esecuzione a 400 FPS consente di ottenere i vostri input al display quasi 7 volte più velocemente, se non di più. Provate voi stessi e sentirete sicuramente la differenza nella reattività.
E non abbiamo tirato fuori questa spiegazione dal nulla, infatti Nvidia conosce i limiti di Vsync in termini di latenza di input, ed è per questo che forniscono un’alternativa chiamata Fast Sync (l’alternativa di AMD si chiama Enhanced Sync). Questa tecnica di sincronizzazione del display è come una combinazione di Vsync on e Vsync off, producendo il meglio di entrambi i mondi.
Fast Sync funziona introducendo un buffer aggiuntivo nella pipeline Vsync on chiamato last rendered buffer. Questo permette alla GPU di continuare a renderizzare nuovi fotogrammi nel back buffer, passando nell’ultimo buffer renderizzato quando è completo. Poi su un refresh del display, l’ultimo buffer renderizzato viene spinto al buffer anteriore a cui il display accede.
Fast Sync / Enhanced Sync
Il vantaggio che questo crea è che la GPU non aspetta più dopo il completamento di un frame che il refresh del display avvenga, come nel caso di Vsync on. Invece, la GPU continua a renderizzare i frame, in modo che quando il display va ad accedere a un frame all’inizio del periodo di aggiornamento, quel frame è stato renderizzato più vicino alla finestra di aggiornamento. Questo riduce la latenza in ingresso. Tuttavia, a differenza di Vsync spento, Fast Sync consegna un fotogramma completato al display all’inizio di ogni refresh, piuttosto che semplicemente spingere il fotogramma al display immediatamente, ed è questa tecnica che elimina il tearing.
Fast Sync è funzionale solo quando il frame rate è superiore al refresh rate del display, ma riesce a fornire un’esperienza di gioco più reattiva senza tearing. E naturalmente, AMD ha un equivalente chiamato Enhanced Sync.
Spero che questa spiegazione abbia chiarito alcune delle tue domande sul perché l’esecuzione di un gioco al di sopra del refresh rate massimo del tuo monitor fornisce un’esperienza di gioco più reattiva, e perché la capacità di eseguire giochi a frame rate più elevati è sempre un vantaggio anche se potrebbe sembrare che il tuo monitor non possa trarne vantaggio.
Un’ultima nota: non abbiamo discusso le tecnologie di sincronizzazione adattiva come G-Sync e FreeSync qui, e questo perché abbiamo parlato principalmente di giochi in esecuzione sopra il refresh massimo, dove la sincronizzazione adattiva non si applica. Ci sono molti metodi di sincronizzazione diversi là fuori, ma la sincronizzazione adattiva è molto diversa da Vsync e Fast Sync di cui abbiamo parlato e, almeno per questa discussione, non è davvero rilevante.
Altre letture
- I migliori monitor da gioco
- FreeSync 2 spiegato
- Le migliori schede grafiche 2018
scorciatoie per lo shopping
- Radeon RX 570 su Amazon, Newegg
- Radeon RX 580 su Amazon, Newegg
- GeForce GTX 1060 6GB su Amazon
- GeForce GTX 1070 Ti su Amazon, Newegg
- GeForce RTX 2070 su Amazon, Newegg
- GeForce RTX 2080 su Amazon, Newegg
- GeForce RTX 2080 Ti su Amazon, Newegg
Masthead credit: Foto di Jakob Owens