Frame rate e percezione
dell'occhio umano
Ma qual è il frame
rate ottimale? Si sentono diverse affermazioni su questo tema,
tipo "l'occhio umano percepisce al massimo 25 immagini
distinte al secondo, per cui andare oltre con il frame rate
è inutile". Interessante teoria, peccato errata (almeno
in parte nei presupposti e totalmente nella conclusione),
tanto vero che passando da 25 a 50 frame al secondo si nota
eccome la differenza!
Ma da dove saltano fuori questi fatidici 25 fotogrammi che
sono sulla bocca di tutti? Dal cinema! La pellicola e' una
successione di fotografie, mostrate in numero di 25 al
secondo. E, indiscutibilmente nel cinema l'impressione di
movimento e fluidità è totale. E allora? Dove
sta l'inghippo? Perché in FS 25 fps sono ancora
"scattosi"? Quante immagini puo' distinguere l'occhio umano?
Allora, l'occhio umano riconosce circa 20 immagini totalmente
distinte al secondo, ma questo numero è molto
soggettivo: certi individui ne percepiscono 5 altri 30. Ma ho
detto 25 immagini distinte, non 25 immagini totali. La
transizione tra questi fotogrammi, se sono molto diversi tra
loro, viene percepita sotto forma di mancanza di
fluidità.
Di nuovo, e nel cinema allora? Il trucco del cinema è
un altro: in un videogame ci sono 25 immagini statiche al
secondo, in un film 25 fotografie scattate con un tempo di
esposizione di 1/25 secondi! E c'è una notevole
differenza. Immaginiamo un'inquadratura statica di una strada
deserta. Tutto è fermo o cambia talmente poco che avere
tanti o pochi fotogrammi è superfluio. Immaginiamo ora
in questa staticità arrivare una macchina che passa ad
alta velocità e attraversa l'intera inquadratura in un
secondo. Nel computer ci troveremmo con 25 immagini statiche
(i nostri frame) che mostrano la macchina perfettamente nitida
e a fuoco in 25 punti diversi dello schermo a comporre la sua
traiettoria. A questa frequenza, troppo vicina a quella delle
immagini distinte percepibili, l'occhio umano si rente conto
che sono immagini nitide e si accorge che la macchina non ha
un movimento fluido, ma si muove di un venticinquesimo di
schermo alla volta. L'impressione di movimento c'è ma
non di un movimento fluido. Al cinema invece sono state 25
fotografie con tempo di esposizione di 1/25 secondi. Per cui
non sono immagini nitide! Si vede la macchina che lascia una
"scia" di un venticinquesimo di schermo in ogni fotogramma.
Ecco la differenza! La scia! Ossia il Motion Blur. È
proprio questo a dare la sensazione di movimento e che
permette a 25 fotogrammi di essere sufficienti. È la
non staticità di questi fotogrammi, ma il fatto che
mostrano tutto ciò che è successo nella durata
del singolo fotogramma. E al contempo l'immagine statica della
strada risulta sufficientemente nitida anche con un tempo di
posa così lungo.
Possiamo mettere il Motion Blur nei frame di un videogame?
Sì! È possibile, grazie ad una funzione del
Vertex Shader. Purtroppo però è un effetto
piuttosto pesante, per cui se si riescono ad ottenere 25 fps
senza motion blur, attivandolo si scenderà a 10 o meno!
Conviene invece puntare sull'aumentare il frame rate. A 50 fps
le immagini sono temporalmente talmente vicine che l'occhio
umano tende ad "impastarle" tra di loro e a crearsi da solo
l'effetto scia: distingue solo una ventina di fotogrammi, ma
quello che c'è in mezzo sono frazioni di fotogramma che
lo aiutano a vedere il movimento fluido. Quindi 50 fps,
spannometricamente, sono un buon target per il frame rate.
C'è poi da dire un'altra cosa; la percezione di
fluidità viene disturbata molto di più
dall'irregolarità del frame rate piuttosto che dal
basso numero di fotogrammi. Nel cinema, se togliessimo il
motion blur (cosa che si può fare scattando le
fotografie con un tempo di apertura molto piccolo), noteremmo
le immagini molto meno fluide, ma in breve l'occhio si
abituerebbe e non percepiremmo più questo effetto; ma
nel cinema i fotogrammi sono tutti esattamente distanziati di
1/25 secondi! In un videogame, l'indicazione 25 fps che si
legge significa che nell'ultimo secondo sono stati elaborati
25 frame. Ma nessuno assicura che siano distanziati di 1/25
secondi. Magari i primi 3 sono arrivati alla velocità
di 50 fps, poi quelli successivi hanno rallentato a 10 fps,
poi hanno di nuovo accelerato... alla fine in un secondo ne
sono stati portati a termine 25, e questo mostra il contatore.
Questa irregolarità viene percepita eccome dall'occhio
umano e l'effetto in FS è noto come micropausa. Cosa fare?
La cosa migliore è quella che fanno molti giochi per
consolle e che FS stesso può fare: bloccare il frame
rate. In una macchina che riesce a riprodurre supponiamo
mediamente 40 fps, bloccarlo a 30 elimina tutte le
fluttuazioni attorno al valore 40. 30 fps sono qualcosa che
riesce a gestire senza problemi e quindi i fotogrammi saranno
molto più regolari. Importante è la struttura
del videogioco, che deve cercare di evitare in tutti i modi
grosse fluttuazioni di frame rate, con operazioni di
caricamento da disco asincrone e altre tecniche che vedremo in
seguito. Da questo punto di vista diversi sforzi sono stati
fatti in FS2004 rispetto a FS2002, ma ancora molto resta da
fare. In FSX troviamo discreti miglioramenti in questa
direzione, purtroppo vanificati dal fatto che il contatore sta
a 14 fps al posto dei 30 di FS2004!