FPS, Hertz, Sync, Input Lag.

Introduzione

FPS, Hertz, Sync, Input Lag

Iniziamo questo percorso che spero possa fare chiarezza sul funzionamento del monitor e sulla visualizzazione delle immagini inviate dalla scheda video, estendendo il discorso allo input lag.

Cerchiamo di comprendere una cosa fondamentale, il refresh del monitor ed i frame per secondo (fps) sono due grandezze distinte e non correlate.

La correlazione ha luogo quando sono sincronizzati tramite software o hardware, adattando i frame al refresh del monitor (vsync, fastsync, etc.) o la frequenza del monitor ai frame (Freesync o Gsync).

Questo articolo è complesso e quando si entra nel dettaglio per le verifiche occorrono strumenti specifici di misurazione: è necessario avere una fotocamera che possa registrare video con un minimo di 240 fps e per questo ho acquistato una

Casio Exilim che può filmare a 480 fps.

Definiremo i concetti di base che cercheremo di chiarire con esempi e foto passando poi ai video ed ai test rivolti all’input lag ed alla fluidità video.

Questi sono gli argomenti che vedremo in dettaglio:

Hertz, Fps, Sync, Fps Limit, Fluidità video, Input Lag, Tearing, Stuttering

HERTZ

Gli Hertz (Hz) del monitor indicano quante volte al secondo il pannello mostra una immagine ed è anche chiamato Refresh video.

Ad esempio a 60 Hz l’immagine generata dalla gpu viene aggiornata 60 volte al secondo.

L’intervallo di funzionamento dei monitor varia tra i 60 ed i 240 Hz per i monitor di ultima generazione

Tearing

Il tearing si verifica quando senza sincronizzazione tra scheda video e monitor vengono visualizzati il frame uscente dal front buffer e quello entrante.

Come si nota nella foto il frame si trova in una zona della memoria della scheda video indicata con Buffer e senza sincronizzazione è inviato al display,

quindi a seconda delle tempistiche dalla scheda video possono essere inviati due frame durante lo stesso refresh video causando il tearing.

Diverso in caso di sync dove viene atteso il refresh per mostrare il frame pronto nel buffer.

Il buffer è una zona di memoria della scheda video che contiene i frame da inviare al monitor e non essendo sincronizzati con il monitor può accadere che ne siano inviati due o più durante il tempo di refresh del monitor,

tutto dipende dalla velocità con cui la scheda video riesce a generare ed inviare i frame.

Il test di Nvidia fornisce un’idea del tearing e del funzionamento del Vsync e del Gsync (tecnologie proprietarie).

Pendolo Demo Nvidia

Come si vede la posizione della “linea” di interruzione dell’immagine non è fissa in quanto i frame non sono sincronizzati e quindi non si sovrappongono mai con le stesse tempistiche.

Ringrazio Vanessaezekowitz – Opera propria per la simulazione che mostra tre frame col doppio tearing, invece di una sola linea di interruzione tra due frame il refresh mostra tre frame e due interruzioni.

Link Wikipedia all’articolo

Possiamo vedere nella foto come ci siano due linee di interruzione dell’immagine, supponiamo che l’immagine sia quello di un monitor a 60hz, se la gpu produce 180 frame al secondo è facile vedere due linee che evidenzino i tre frame inviati dalla scheda video.

Tralasciando l’effetto visivo si può comprendere come il maggior framerate incida molto nei giochi di shooter con l’aggiornamento dei dati nei frame riducendo così l’input lag,

Questo accade perchè la visualizzazione libera da vincoli mostra tutti i frame che vengono prodotti dalla gpu causando però le interruzioni che abbiamo visto negli screenshot,

ma mostrando anche gli input frame by frame, quindi riducendo il tempo di input.

Come vedremo infatti in seguito il lag degli input è strettamente legato alla visione ed alla velocità dei frame.

Se però sincronizziamo i frame con il segnale di Vsync i tempi si dilatano aumentando il ritardo alla risposta degli eventi del gioco da 5 (con i 180 fps menzionati sopra) a 16.7 msec (con un monitor a 60hz)

Stuttering (Balbettio)

Lo stuttering e microstuttering è una perdita di fuidità, un avanzamento non regolare delle immagini, avviene quando il tempo di generazione dei frame non è costante,

questo può accadere a causa della non adeguata programmazione dei giochi, per i driver video, per la gpu che non genera i frame con regolarità

o la cpu che fornisce i dati alla scheda video con velocità non adeguata.

Si nota di più quando i frame generati dalla scheda video sono pochi rispetto al refresh del monitor e la stessa immagine è visualizzata più volte causando una perdita di fluidità visiva restituendo una visualizzazione che procede a strappi.

La scarsità di frame renderizzati porta anche a fermo immagini della durata di qualche decimo di secondo.

Da un video relativo a S.T.A.L.K..E.R. Call of Pripyat si notano microstuttering e freeze.

Ho limitato la scheda video (cap) a 60 frame con display a 144Hz di refresh, il gioco che ha sempre avuto questi problemi che sono evidenziati dal cap e dalla frequenza di refresh del monitor.

FPS

Frame per second, il frame è una singola immagine mostrata sul display, creata in combinazione tra gpu e cpu che calcolano l’azione dell’ intelligenza artificiale, posizione, texture, fisica degli oggetti dell’immagine che poi la gpu invierà sullo schermo sottoforma di pixel in funzione della risoluzione scelta.

Semplice comprendere che più veloci saranno i calcoli, più veloce l’immagine sarà visualizzata, portando all’aumento di frame possibili in un secondo e che determinano il frametime (velocità di uscita dei frame).

SYNC

Qui il discorso si amplia essendoci diversi tipi di sincronizzazione, come già accennato in precedenza è possibile correlare i frame al refresh o viceversa, dipende dalla tecnologia utilizzata.

Il concetto fondamentale è che l’immagine prodotta dalla gpu ed inviata al monitor NON HA TEMPISTICHE FISSE, ESSENDO UN PROCESSO COMPLESSO UN FRAME PUO’ ESSERE INVIATO CON TEMPISTICHE DIVERSE visualizzabili attraverso

Msi Afterburner e Rivatuner

Impostando in OSD il frametime è visibile il tempo impiegato per avere i frame sullo schermo che è molto variabile.

Nelle foto vediamo come avere la info a schermo del frametime, abilitando il periodo e il risultato.

Perchè si sente il bisogno di dover sincronizzare?

Semplice, in molti casi la scheda video invia un determinato numero di frame ogni secondo, mentre il monitor aggiorna l’immagine un determinato numero di volte al secondo,

quando i frame prodotti sono molto maggiori del refresh del monitor può succedere che nel momento del refresh si accavallino due frame generando l’effetto di TEARING,

ovvero quell’effetto che mostra sul display l’immagine visualizzata divisa in due da una evidente linea di demarcazione,

dove appunto vediamo due parti di due frame contigui.

Naturalmente il refresh avviene verticalmente e l’interruzione sarà sempre orizzontale rispetto al monitor.

Lista dei vari tipi di sincronizzazione:

Gsync:

Modulo hardware proprietario di Nvidia permette di adattare dinamicamente il refresh ai frame.

Freesync:

Software open source utilizzato da AMD, anche questo adatta il refresh ai frame tramite driver specifici (in teoria è possibile avvalersi del Freesync anche con schede grafiche Nvidia senza driver opportunamente modificati)

QUI trovate alcune interessanti info su nvidia e freesync

Entrambi questi due metodi hanno un minore impatto in termini di ritardo rispetto a quelli che seguono.

Ritardo chiamato latency che crea Input Lag, che vedremo nella sezione apposita.

Vsync:

Il modo più classico di sincronizzazione che adatta i frame al refresh video limitando la visualizzazione delle immagini

Nel caso di monitor a 60hz la gpu invierà sempre 60 frame al secondo, chiaramente se è in grado di generarli

A 60hz sarà visualizzata una immagine ogni sessantesimo di secondo ovvero ogni 16.67ms circa.

Il limite del Vsync è che il frame pronto nel buffer deve attendere il refresh del monitor e quindi ci sarà sempre un ritardo nella visualizzazione delle immagini di almeno 16.67ms, per i giochi shooter è uno svantaggio incontrare un giocatore avversario che non usa il vsync o che ha un refresh video maggiore quindi un aggiornamento dei dati più rapido

FastSync:

Vediamo adesso una delle ultime implementazioni di nvidia con chip Pascal il fastsync o sync veloce, per ridurre il ritardo del vsync hanno deciso di utilizzare un triplo buffer.

Cosa succede al frame che arriva dalla gpu?

Immaginiamo di avere tre contenitori (BUFFER), uno è quello che contiene il frame che il pc invia al monitor, mentre gli altri due sono riempiti dai frame della Gpu.

Il fastsync lavora inviando al monitor il frame pronto e scartando quello in più di uno degli altri due.

Questo processo fa si che si riduca l’input lag ed è utile nei casi quando la gpu genera molti frame non visualizzabili da monitor a bassa frequenza. ad esempio 60hz.

Inoltre è un trucco per utilizzare un Sync veloce sui monitor con features freesync, permettendo di acquistare monitor ad un costo minore (Gsync è un modulo HW) ed avere una sincronizzazione efficiente.

FPS Limit

Una pratica molto comune è quella di quello di limitare i frame cercando di essere prossimi al refresh del monitor.

E’ chiaro cosa significhi limitare i frame.

Voglio invece sottolineare qualcosa di poco conosciuto.

Consideriamo un monitor a 60hz che come già visto esegue un aggiornamento ogni 16.67 ms.

Teoricamente limitando il gioco a 60 frame al secondo si potrebbe pensare di avere una situazione ottimale.

invece è errato dal momento che i frame elaborati ed inviati dalla gpu non rispettano puntualmente le tempistiche del monitor, ma solo in media.

Ad esempio possiamo avere un frame che viene inviato ogni 15ms, mentre un altro dopo 18ms,

questo fa si che anche limitando si possa incorrere nel tearing e con la possibilità di generare qualche artificioso ritardo.

L’unico vantaggio è quello di diminuire il carico di lavoro della gpu e farla riscaldare meno.

A che pro mi chiedo se aggiorniamo le schede video per inviare più frame al secondo ?

CHIARAMENTE NON ENTRO NEL MERITO DI SITUAZIONI SPECIFICHE DOVE SUBENTRANO PROBLEMI LEGATI AL GIOCO.

 Se l’esigenza è data dal malfunzionamento di un gioco il discorso cambia, io cerco solo di condividere le idee generali.

Vedremo nei test del lag come invece sia una pratica adeguata al contrario di quanto le nozioni teoriche possano far pensare.

Si vede che con il limite a 60 fotogrammi il tearing si manifesta ugualmente in quanto i frame non sono perfettamente sincronizzati con il refresh video.

INPUT LAG

Siamo giunti allo spinoso tema dell’input lag.

L’Input lag è il tempo che intercorre tra l’azione eseguita con un qualsiasi sistema di input (mouse, tastiera, controller per esempio) e l’effetto visualizzato sullo schermo,

Vedremo quali sono i fattori che influenzano questo ritardo e la somma di questi fornisce il valore finale detto Latenza.

Quello che andremo a misurare in questo articolo è il reale ritardo in gioco. Faccio notare che quando nelle recensioni dei pannelli dei monitor leggiamo signal lag,

questo è solo il ritardo dovuto al pannello calcolato con opportuni strumenti.

Bisogna fare attenzione a non confondere i due concetti, il signal lag è il ritardo del solo pannello, l’input lag è la somma totale dei ritardi.

Per comodità di calcolo consideriamo sempre un monitor a 60 Hz e la trasmissione di 60 frame per secondo.

Periferiche di input

Mouse e tastiera hanno il loro ritardo, per esempio i mouse di ultima generazione sono programmati ad aggiornare le informazioni a 1000 Hz quindi ogni millisecondo, ma va considerato anche il ritardo della trasmissione dati via usb.

Il wireless aumenta il ritardo ma di pochissimo.

Vediamo con un semplice test le differenze del refresh col vsync.

Test html java per movimento mouse

Stranamente il 60hz non da nessun risultato rimanendo a zero, ma si comprende bene la scala dei ms in funzione del refresh sincronizzato coi frame.

Cpu, tempo di elaborazione dei dati da inviare alla gpu da inserire nel frame successivo

Il tempo che la cpu usa per elaborare i dati ed inviarli alla gpu per il render finale.

Gpu, tempo del render per mostrare il frame

Il tempo che la gpu utilizza per renderizzare è variabile, quindi non avremo mai un frame ogni 16.7 ms a 60 frame, ma poco più, poco meno o esatto.

Il dato fisso è che se si gioca a 30 fps il tempo sarà di 33.33ms per ogni frame, la metà per i 60 fps quindi 16.67ms, e 8.3ms a 120fps.

Una causa del ritardo è che se viene generato un input sopo il frame in uscita avremo un ritardo maggiore in quanto sarà visualizzato nel frame successivo.

Per questo è molto vantaggioso avere più fps di quanti ne possa visualizzare il monitor.

Sync

In caso di Vsync l’attesa del frame successivo legato al refresh aggiunge altro ritardo, ritardando l’invio del frame in attesa del refresh video, è naturale che più maggiore è la frequenza di aggiornamento e minore è il tempo di ritardo dell’invio del frame, per gli shooter è molto vantaggioso.

Con altri tipi di sync il tempo varia e chiaramente le due tecnologia AMD e Nvidia danno una notevole mano ai giocatori.

Refresh monitor

Ecco l’arma supplementare del gaming online (e non solo) il refresh

il tempo con cui viene aggiornata l’immagine prodotta e quindi il vostro comando,

nel caso di monitor a 144hz è di 4.16ms e se il frame è pronto e sincronizzato si vedrà con questo ritardo.

Latenza del monitor

Qui entra in gioco il tipo di pannello, il lag del monitor spesso non nominato dai produttori è un dato importante.

E’ il tempo che occorre al monitor per mostrare le immagini in combinazione con il sistema.

Il ritardo totale è la somma di tutti i fattori compreso il seguente:

Response time GTG

ovvero il tempo che un pixel impiega a passare da grigio a bianco e grigio di nuovo, quindi per visualizzare l’immagine.

Possiamo dire che 5 ms sono un ottimo valore per i monitor a 60hz, mentre per frequenze di refresh video maggiori è sempre meglio aggiungere al massimo 1/2 ms, nel caso di un monitor a 120hz il calcolo è semplice 8.3ms di refresh sommato a 1/2 ms di GTG.

Tempo di reazione umano

Da notare che tutti questi tempi sono da sommare alla nostra reazione per ottenere il ritardo totale.

Se si gioca online deve essere aggiunto anche il reaction time del server (ping).

Vediamo adesso uno scenario possibile con monitor a 60hz e 60 frame per secondo in game.

In questo caso come latenza del monitor ho considerato una frequenza di 60hz , che si riduce in caso di monitor dotati di pannelli più veloci.

Come detto più volte il refresh più alto del monitor unito al framerate dimezza i valori del Refresh e della Gpu togliendo 16.7 al valore finale.

Chiaramente anche qui va aggiunto il reaction time umano e dopo aggiungiamo il reaction time del server di gioco (ping).

Test Reaction

E’ il nostro tempo di reazione in conseguenza di uno stimolo esterno.

Sommando tutto si ottiene il totale di 281.2 ms, sono quasi 3 decimi di secondo.

Bisogna tenere conto che quando si usa la tastiera lo switch dei singoli tasti ha la sua importanza.

Inseguito vedremo in dettaglio questi concetti tramite i test.

Domande:

Una domanda che spesso ci poniamo è che se in caso di aggiornamento del monitor a 60hz un maggior numero di frame possa portare ad una migliore esperienza in game,

come più volte detto il maggior numero di frame si nota specialmente in giochi shooters online dove la componente RITARDO è uno dei fattori che causa la vita o la morte del personaggio.

Perchè parlo di ritardo?

Perchè la differenza è nei millisecondi nei quali un frame è pronto per essere visualizzato e quindi avere l’effetto degli input a schermo.

Quindi avere un maggior numero di frame riduce i tempi di risposta diminuendo l’input lag o latenza.

V-SYNC OFF i due tipi di tearing con due frame che si accavallano e con tre

Siccome i frame non hanno il medesimo tempo di uscita dalla gpu si può verificare la situazione di due frame che possono creare anche un ritardo minimo di 3/4 ms.

Come si può facilmente comprendere il tearing genera si fastidio, ma riduce il ritardo.

V-sync su cosa influisce?

Sul ritardo ed in game online ha grande importanza.

E’ comprensibile come si genera il ritardo: i frame restano in stand by nel buffer sino al refresh successivo, questo porta inevitabilmente ad attendere i famosi 16.67 secondi, che diventano 8.3 in caso di sync con 120Hz e così via.

La Gpu genera frame che vengono memorizzati nel secondo buffer per poi portarli nel front buffer per essere poi inviati al refresh video.

Il problema è che la Gpu attende che il secondo buffer o back buffer sia libero.

Se la Gpu produce meno Frame del Refresh?

In questo caso è inevitabile la ripetizione del frame causando il balbettio chiamato Stutter con vsync attivo se i frame arrivano oltre i 16.67 ms, anche senza sincronizzazione viene ripetuto il frame presente nel buffer, non essendo possibile lo swap tra il back e il front.

Quanto lag possono avere i miei input?

A seguire è dedicata un’ampia sezione.

Ogni quanto si rende visibile il mio comando?

Con V-sync il vostro input che si aggiorna 1000 volte al secondo col polling rate a 1000, deve attendere in ogni caso il refresh del monitor collegato al frame, ecco dove si ha il grosso svantaggio nei giochi online.

Basta pensare che i dati di input a 1000 Hz vengono inviati alla cpu ogni millesimo di secondo, e a salire a seconda del polling rate.

Con un refresh a 1000 Hz è estremamente difficile che si possa peggiorare sensibilmente la risposta del gioco.

Vediamo come e perchè senza V-sync si ha un minore ritardo.

Dal modello vediamo come lasciando i frame liberi si possa avere un aggiornamento di dati più rapido, ricordando sempre che la gpu non invia i frame sempre con le stesse tempistiche.

Consideriamoora il caso di un monitor ad alto refresh con tanti fps.

Si passa da un tempo di invio di 16.67 ms sino a 4 ms.

Ricordiamo sempre che questo è solo una parte del lag, a quello totale ci arriviamo alla fine!

Il nuovo Fast Sync introdotto con Pascal risolve i problemi di latenza?

La riduce sicuramente, col terzo buffer fa si che un frame completo sia sempre pronto nel momento del refresh, non dovendo attendere per l’invio, riducendo così il tempo di visualizzazione.

Cerchiamo di chiarire col modello, nei due buffer sul retro si alternano i frame da inviare per essere trasferiti dal front buffer al display, e scartare quello in più così da avere sempre al refresh un frame pronto sempre in 16.67 ms.

E’ chiaro che è molto utile nel caso della generazione di molti frame video rispetto al refresh video.

Ritorniamo allo input lag e frametime: ho acquistato una camera capace di memorizzare 480 fps ed anche se è a risoluzione bassa è adatta allo scopo.

Come primo passo e prima di passare ai test con la camera vediamo come il tempo del frame vari a seconda delle diverse situazioni di refresh e sync.

Test effettuato su The Hunter Call of Wild e Doom Vulkan Version

DOOM

The Hunter Call of Wild

Ho eseguito ogni tipo di test, con tutti i vari sync, la cosa evidente è che i millisecondi non sono mai stabili senza sync, e qui vi dovete fidare delle mie parola appena si passa da 60 Hz a 144 Hz senza sync la situazione cambia completamente ed anche il ritardo delle operazioni diventa evidente.

Se mi passate il termine è come passare dalla carta vetrata al velluto, tutto diventa fluido e liscio, mentre a 60 Hz si notano gli scatti.

Questi due video non determinano niente , mostrano solo il comportamento del framerate e come si nota senza alcun tipo di sync varia  molto ma aumentando i frame si abbassa il tempo di invio dei frame stessi.

Share
Share

Utilizzando il sito, accetti l'utilizzo dei cookie da parte nostra. maggiori informazioni

Questo sito utilizza i cookie per fornire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie, cliccando su "Accetta" o continuando la navigazione permetti il loro utilizzo.

Chiudi