Performance contro fluidità

Abbiamo iniziato a usare PresentMon al posto di Fraps. Questo software, di non facile utilizzo, ci permette di dissezionare le prestazioni delle schede video con i titoli DirectX 12, OpenGL e Vulkan.

Avatar di Tom's Hardware

a cura di Tom's Hardware

Quantificare l'esperienza di gioco reale

Andando oltre l'idea di prestazioni medie, o anche di performance in un dato lasso di tempo, dissezioniamo la più piccola unità di misura, il secondo, per valutare il frame pacing (ovvero la quantità di tempo che un frame passa sullo schermo), la costanza fra i tempi di rendering dei frame e lo stuttering, ognuno dei quali influisce sulla percezione di fluidità. Ovviamente, vogliamo vedere tutti i frame che rientrano in una certa media di frame al secondo fossero renderizzati ad intervalli regolari. garantendo così la miglior esperienza possibile a un dato livello prestazionale.

Purtroppo non è sempre quello che osserviamo. Alcune volte i frame rate elevati sono accompagnati da fenomeni di stuttering e questo è il motivo per cui dobbiamo valutare le prestazioni separatamente dalla fluidità, seppure sia correlate.

Una semplice analisi prestazionale

Per prima cosa confrontiamo due schede video usando le DirectX 11 e 12. Nei grafici che seguono, i tempi di rendering dei frame (frame time) sono sull'asse X mentre l'asse Y indica le percentuali. In una situazione ideale vorrete vedere i numeri da sinistra (ossia frame time più brevi) rappresentati dalla percentuale più alta possibile. Qualsiasi cosa oltre i 33 ms significa scendere sotto i 30 FPS: questo non va affatto bene, quindi la parte più a destra della linea dovrebbe essere più vicina possibile a zero.

07 Frame Time Performance Max CPU

Clicca per ingrandire

È interessante notare che con le DirectX 12 la linea relativa alle performance della Radeon viene spostata verso sinistra sia con il sistema di fascia alta che con quello mainstream, mentre la linea della scheda Nvidia non viene alterata in modo altrettanto evidente.

08 Frame Time Performance Min CPU

Clicca per ingrandire

Una semplice analisi della fluidità

Per farvi immergere nell'esperienza di gioco i singoli frame devono essere mostrati nel modo più fluido possibile con differenze minime nei tempi di rendering. Variazioni da 10 a 20 ms sono percepite dal nostro cervello come micro-stuttering (brevi intoppi dell'azione) che rovinano l'esperienza di gioco. Ovviamente, alcuni percepiscono questo fenomeno più facilmente di altri.

Anche in questo caso, le percentuali sono indicate sull'asse Y mentre sull'asse X, invece del tempo di rendering dei frame, è indicata a differenza tra i frame fino a 10 ms. Oltre tale soglia dobbiamo ridurre la scala per avere maggiori dettagli. Per il momento, quei picchi verso la fine del grafico sono abbastanza consistenti da farci capire che non stiamo avendo un'esperienza di gioco sufficientemente fluida con entrambi i sistemi, sia usando le DirectX 11 che le 12. Idealmente, vorremmo vedere l'intera linea spostata il più possibile a sinistra. La RX 480 ci si avvicina molto usando le DirectX 11 sul sistema di fascia alta. Il risultato con le DX 12 non è altrettanto buono.

09 Smoothness Max CPU

Clicca per ingrandire

10 Smoothness Min CPU

Clicca per ingrandire

I grafici precedenti preannunciavano quello che è emerso chiaramente con quelli qui sopra: malgrado performance migliori (specialmente sul PC mainstream basato sulla CPU AMD FX), nella nostra prova con le DirectX 12 ha restituito differenze nei tempi di rendering dei frame maggiori rispetto alle DirectX 11, che appaiono restituire un comportamento più fluido, almeno secondo i nostri risultati. È tempo di andare più a fondo...

Frame rate vs. differenza nel frame time

Come si suol dire, tutte le strade portano a Roma. Per prima cosa, interpoliamo la curva del frame rate con il tempo di rendering dei frame così da poterle confrontare direttamente. Tuttavia le differenze fra i tempi di rendering non sono una mera sottrazione aritmetica tra frame. Piuttosto, facciamo un calcolo più complesso che mette in luce i valori che più probabilmente possono disturbare la vostra esperienza di gioco.

Per prima cosa consideriamo il PC basato sul più veloce Core i7:

11 FPS vs  Difference Max CPU

Clicca per ingrandire

Vediamo un esempio auto esplicativo. Qui si vede chiaramente che un maggior frame rate non corrisponde necessariamente a un'esperienza più immersiva. Soprattutto con la Radeon, picchi superiori a 100 ms non sono solo micro-stuttering, ma si tratta di blocchi rilevanti dell'azione che non potrete ignorare. Nemmeno la scheda di Nvidia è immune, perché la GTX 1060 mostra le stesse problematiche passando dalle DirectX 11 alle 12.

I frame rate sul PC più lento migliorano considerevolmente passando alle DX 12, soprattutto con la Radeon RX 480. Purtroppo c'è un evidente compromesso, sotto forma di una variabilità del tempo di rendering particolarmente fastidiosa.

12 FPS vs  Difference Min CPU

Clicca per ingrandire

Le DirectX 12 finiscono per aiutare solamente la GTX 1060 sul PC meno prestante. I picchi e i cali non sono così pronunciati e la sua variabilità nei tempi di rendering nel corso del tempo non è così prona ad oscillazioni imprevedibili.

L'incorruttibile "Indice dello Stuttering"

Per prima cosa dividiamo il test in intervalli di un secondo e calcoliamo il frame rate di ognuno. Questa è la base per la costruzione del nostro indice. Ad ogni intervallo è assegnato un valore basato su quanti FPS rileviamo. Un risultato sotto 30 FPS è ritenuto ingiocabile, mentre da 30 a 60 FPS viene classificato come giocabile, buono e molto buono. L'indice si abbassa all'aumentare del tempo di rendering dei frame.

È comunque troppo approssimativo. Un breve picco di frame lenti può presentarsi anche nel mezzo di un intervallo di 70 FPS. Non si può comprenderlo dal mero frame rate, ma lo percepirete nettamente durante il gioco. Pertanto, ci addentriamo nel tempo di rendering dei singoli frame e nella differenza fra gli stessi.

Per evitare accidentali interpretazioni errate, usiamo un filtro intelligente che intercetta i momenti di transizione fra le cut scene (i tagli da uno scenario all'altro) che si trovano spesso nei benchmark integrati. Se una sequenza non è complessa ed è veloce mentre la seconda è più impegnativa e riduce le prestazioni, l'artefatto che si presenta fra le due viene filtrato in quanto non si tratta realmente di stuttering ma di un cambio di scena.

In questo modo si può prevedere se lo stuttering o il calo di frame sono visivamente percepibili o meno dal giocatore. Se il punteggio per un singolo frame è più alto (quindi peggiore) rispetto al valore FPS base, allora l'intero intervallo è indicato con il valore più alto/peggiore nell'indice.

Quando questi calcoli sono completati, ci ritroviamo con un "Indice di Stuttering/Difformità" costituito solo da numeri interi, privo di valori frazionari. Tale valutazione spazia da zero (perfetto, nessuna influenza negativa) a 5 (il limite di accettabilità) e fino a 10 (stuttering evidente e frame persi). I giocatori più sensibili percepiranno il micro-stuttering già con punteggi di 3 o 4.

13 Uneveness max CPU

Clicca per ingrandire

Nel diagramma qui sopra, una CPU più veloce riesce a mantenere una ragionevole fluidità di gioco nonostante la RX 480 faccia fatica con le DirectX 12 mostrando stuttering molto evidente.

14 Uneveness Min CPU

Clicca per ingrandire

Questo diventa ancora più chiaro con il PC meno potente. Per quanto la GTX 1060 non sia così veloce, le immagini risultano più fluide.