Una delle domande più
ricorrenti degli utenti di FS è "cosa sono queste
texture sfuocate? Come faccio ad evitarle?".
Per legarsi al concetto appena espresso, diciamo subito che
una cosa è sicura: aumentare il moltiplicatore non
risolve il problema delle "sfocature", con buona pace di chi
asserisce ciò! Il problema delle sfocature non è
infatti legato al fatto che le texture sono elaborate ma non
sono ancora state caricate dalla memoria principale alla
scheda video, ma è legato al fatto che non sono state
elaborate del tutto! Le texture di landclass infatti sono
molto leggere e ciascuna tessera pesa un 40 kB circa e viene
caricata molto velocemente!
L'elaborazione è invece critica, in quanto può
essere un processo lungo. Costruiti per lavorare su una sola
CPU, FS2002, FS2004 e FSX (prima del SP1) utilizzano il
sistema definito
fibers
(una sorta di multitasking cooperativo presente in Windows)
per allocare una certa quantità di tempo
all'elaborazione delle texture; questo sistema è
obsoleto ora che ci sono i sistemi multi core, in quanto il
lavoro potrebbe essere affidato per intero ad un secondo core.
Il sistema dei fibers invece non sfrutta il multithreading, ma
recupera del tempo a quello sottratto al rendering dei
triangoli ottenuto limitando il frame rate e lo assegna al
motore di elaborazione delle texture. Questo le elabora in
base all'ordine stabilito dalla coda FIFO di cui abbiamo
già parlato; se non si ha bloccato il frame o se siamo
sotto il valore di blocco viene allocato un tempo standard.
Ad ogni modo, anche supponendo che molto tempo sia dedicato a
questo sottosistema, al massimo una sola tessera di landclass
può essere elaborata per ogni frame. Va quindi da se
che, supponendo di riuscire a farlo, a 30 fps non possiamo
elaborare più di 30 tessere. Che senso ha allora
poterne passare di più alla scheda con la storia del
moltiplicatore? Ha senso perché le texture elaborate
vengono conservate in memoria centrale (finché possono
essere utili chiaramente), ma vengono scaricate molto presto
dalla memoria video, per evitare di saturarla. Quindi spesso e
volentieri queste devono essere ricaricate, specie se si ha
poca memoria video.
Tutte le tessere di landclass impiegano più o meno lo
stesso tempo ad essere elaborate? Neanche per sogno! Dipende
chiaramente da quanti oggetti, strade, ferrovie eccetera ci
sono sopra... ma specialmente dall'anello di mipmap, e ora
spiego il perché: una tessera da 1 x 1 km viene
elaborata a partire da una texture di partenza e
conterrà statisticamente un certo numero di oggetti.
Una tessera da 2 x 2 km quadrati richiede 4 texture (anche se
a risoluzione inferiore) e un numero di oggetti
statisticamente quattro volte superiore. Indovinate un po'?
Una tessera da 4 x 4 richiede la bellezza di 16 texture da
64x64 punti e conterrà strade e amenità varie
statisticamente presenti in quantità 16 volte maggiore!
E via discorrendo, il prossimo gradino è 64... morale?
Le tessere di landclass più lontane necessitano di un
tempo incredibilmente più grande per essere calcolate!
E sono queste ad intasare il processo di formazione delle
texture! Per cui, quando si ha a che fare con tessere ai mip
map più esterni, non si produrrà una di esse per
frame, ma ci vorranno anche 3-4 secondi (90-120 frames al
ritmo di 30 fps) per produrla! E nel frattempo nessuna altra
tessera può essere prodotta; fortuna vuole che per lo
meno le tessere già calcolate possano essere
trasportate alla scheda video.
Ed ecco finalmente l'origine delle famose "sfocature".
Supponiamo di volare ad una velocità tale per cui la
nostra CPU non riesce a stare dietro alla produzione delle
tessere: le texture che entrano nella coda di rendering sono
più numerose di quelle che riescono ad uscirne
perché pronte. FS è programmato per minimizzare
le micropause, per cui continua a volare anche con texture
mancanti o con mip map scadenti senza interrompere la
simulazione. Le texture ad alta risoluzione non verranno mai
prodotte, in quanto prima di loro i fibers sono impegnati a
produrre texture lontane e che richiedono moltissimo tempo.
Nel frattempo le texture ad alta risoluzione richieste per
l'area che si stava sorvolando diventano obsolete,
perché l'area si è allontanata e ora necessita
di un mip map diverso. Vengono tolte dalla coda FIFO e viene
aggiunta in fondo alla coda una texture a mipmap inferiore.
Quindi alla fine ci si riduce a volare sullo scenario a mip
map basso; in alcuni casi incredibilmente basso in cui un
singolo texel viene applicato su qualcosa come 76x76 metri
quadri di superficie! Il filtro bilineare applicato
farà sembrare questi grossi quadrettoni sfumati, da cui
l'impressione che le texture non siano a fuoco. In
realtà lo sono ma sono semplicemente a bassissima
risoluzione. Provate a guardare le immagini sottostanti
rispettivamente con e senza filtro bilineare di un'area
"sfuocata". È chiarissimo ora cosa sono le sfocature!
Sono un artefatto provocato dal filtro bilineare in un'area
che è coperta da una texture a mip map sbagliato.