Digital Foundry: cosa succede al filtraggio delle texture su console? - articolo
Perché spesso vediamo texture perfette su PC, ma sfocate e prive di dettaglio su PS4 e Xbox One?
C'è un elefante nella stanza. Nel corso di questa generazione di console, l'impatto visivo di molti titoli PS4 e Xbox One è stato sminuito da un piccolo problema. Viviamo nell'era del 1080p e degli incredibili livelli di dettaglio, ma purtroppo una delle impostazioni grafiche più basilari è spesso trascurata: il filtraggio delle texture. Che si tratti di Grand Theft Auto 5 o Metal Gear Solid 5, entrambe le console spesso non riescono ad offrire un texture filtering alla pari neppure con i livelli più moderati su PC, producendo texture sgradevoli e sfocate e dunque un mondo di gioco che non rispecchia gli ideali che tutti noi avevamo per questa generazione.
Inoltre, come emerge con evidenza da molte delle nostre analisi tecniche, spesso è la versione PS4 ad avere la peggio in questo specifico ambito. Sebbene la console di Sony offra spesso una risoluzione o un frame-rate superiori a quelli di Xbox One, titoli recenti come la Definitive Edition di Dishonored mostrano che la PS4 ancora non riesce ad eguagliare la sua rivale in termini di texture filtering. Si tratta di un problema diffuso, e l'effetto di un filtraggio scadente sulla qualità d'immagine finale è spesso palpabile, mortificando il lavoro compiuto dagli artisti. Alcuni sviluppatori intervengono con correzioni post-lancio, come ad esempio Ninja Theory, che ha patchato il suo reboot di Devil May Cry per inserire su PS4 un filtraggio anisotropico di livello superiore, aumentando di molto il dettaglio delle texture sul terreno. Anche in Dying Light abbiamo visto un simile miglioramento postumo. Ma dopo 2 anni di vita di questa generazione, possiamo dire che il problema ancora persiste.
Quali sono le cause? Si può davvero trattare di un problema hardware, se per risolverlo in Devil May Cry è bastata una patch? O magari si tratta di un limite dovuto alla memoria unificata di PS4 e Xbox One, che fa sì che CPU e GPU debbano condividere le stesse risorse? È una questione su cui vale la pena indagare, anche perché tutto ciò è curioso, se si considera che il texture filtering è una tecnica molto poco pesante da gestire. Perché le console dimostrano di avere tutti questi problemi nel farlo? Abbiamo contattato diversi sviluppatori per trovare una risposta, e il loro feedback si è rivelato molto interessante.
Parlare con Marco Thrush, CTO e proprietario di Bluepoint Games (nota per l'eccellente lavoro svolto sulla Nathan Drake Collection), ci ha aiutato a capire meglio la situazione. Per quanto PS4 e Xbox One siano molto simili ad un moderno PC - più di quanto le console non siano mai state - fare paragoni diretti può essere fuorviante. Integrare CPU e GPU dando loro accesso ad un'ampia memoria condivisa è un esempio di come l'architettura PC sia stata semplificata per introdurla nelle console di nuova generazione. Tale approccio offre numerosi vantaggi, ma presenta anche diverse sfide.
"La quantità di AF [anisotropic filtering] ha un grande impatto sull'utilizzo di banda della memoria", dice Thrush. "Su PC è generalmente disponibile molta banda, perché la memoria è collocata fisicamente sulla scheda grafica. Sulle console con memoria condivisa, la situazione è diversa. In ogni caso, l'architettura condivisa ha molti più pregi che difetti. "
In effetti, i vantaggi che PS4 e Xbox One ottengono usando un'APU (CPU e GPU sul medesimo chip) sono chiari. Tale soluzione consente alle due componenti di lavorare in tandem senza dover trasmettere i dati attraverso un'altra interfaccia di bus, cosa che potrebbe introdurre ulteriore latenza. Avendo il processore e la scheda grafica collegati ad una risorsa comune, gli sviluppatori possono sfruttare al meglio ogni parte.
L'idea che la CPU e la GPU debbano contendersi la banda della RAM, però, è un punto critico (evidenziato anche da una delle slide presentate da Sony prima del lancio di PS4). Anche con 8GB di veloce RAM GDDR5 all'opera, la slide mostra una correlazione tra la banda occupata dalla CPU e l'impatto che ciò ha sulla velocità di trasmissione alla GPU (e viceversa). Indagando su The Crew di Ubisoft, a suo tempo, scoprimmo che viene operata una specifica allocazione: la GPU ha un veloce bus di memoria personale da 176GB/s, denominato “Garlic”, mentre il bus della CPU si chiama “Onion” e viaggia a 20GB/s. Nonostante questa suddivisione, c'è comunque una “lotta” delle due componenti per aggiudicarsi la banda della memoria, che viene gestita differentemente a seconda del gioco.
L'idea viene confermata da Andrzej Poznanski, lead artist della versione PS4 di The Vanishing of Ethan Carter. In una recente analisi tecnica del gioco, è emerso come i titoli che impiegano pesantemente la CPU possono avere una ricaduta negativa sugli effetti grafici ad alto consumo di banda, come il texture filtering.
"Usiamo un alto livello di filtro anisotropico, ma per correttezza nei confronti degli altri sviluppatori va ammesso che nel nostro titolo non dobbiamo spendere cicli sull'Intelligenza Artificiale o sulla distruzione degli ambienti", dice Poznanski. "Dietro al gioco c'è un enorme lavoro grafico e di certo non intendo sminuirlo, ma nel nostro caso specifico avevamo più spazio per i miglioramenti estetici di quanto non succeda con altri progetti."
Ovviamente, sui moderni PC il calo di prestazioni addebitabile al texture filtering è spesso minimo: esso impiega infatti la RAM dedicata esclusivamente alla GPU, che è dunque del tutto indipendente dalla CPU. Il risultato è che la maggior parte dei titoli può impiegare un filtro anisotropico 16x con un impatto sul frame-rate di 1-2fps al massimo. Ma cosa succede quando si usa un PC che impiega un'APU simile a quella delle console, e dunque costringe la macchina a lavorare con una RAM unificata? Abbiamo considerato questo scenario, concludendo che se la contesa delle risorse è un problema su console, allora dovremmo poter replicare la stessa situazione anche su una delle recenti APU di AMD (per quanto esse siano significativamente meno potenti di quelle montate da PS4 e Xbox One).
Per effettuare un test, abbiamo assemblato un PC basato sulla A10-7800 di AMD, con 8GB di memoria DDR3 a 2400MHz. La CPU e la scheda grafica di questa APU condividono la stessa bandwidth di memoria, e bus come “Garlic” e “Onion” dovrebbero dunque competere per la gestione delle risorse. Inoltre, se il problema è quello della banda condivisa, la RAM da noi impiegata dovrebbe segnalarlo con chiarezza ancora maggiore: i moduli DDR3 non hanno infatti la stessa velocità di quelli GDDR5 equipaggiati da PS4, né possono beneficiare dei 32MB di cache ESRAM presenti su Xbox One.
Immaginando dunque che il collo di bottiglia sia questo, anche i titoli provati sul nostro hardware PC realizzato ad hoc dovrebbero soffrire in termini di texture filtering. Come potete vedere nella tabella qui sotto, però, passando da un'impostazione molto bassa all'AF 16x il frame rate di Tomb Raider e di Grand Theft Auto 5 varia di circa 1fps. I risultati sono mediamente scarsi (persino a 1080p con impostazioni basse non si superano di molto i 30fps), ma quel che è chiaro è che il texture filtering non ha un impatto percettibile sulla performance.
Se dunque l'ampiezza di banda è il problema alla base dello scarso filtraggio delle texture su console, evidentemente si tratta di uno scenario che al momento non può essere replicato con la normale componentistica PC. Da un certo punto di vista, si tratta di un enigma tutto specifico dei design di Xbox One e PS4.
AMD A10 7800 APU/8GB 2400MHz DDR3 | Filtraggio a qualità minima | Filtro Anisotropico 16x |
---|---|---|
Grand Theft Auto 5, impostazioni 'normal', 1080p | 32.3 (senza filtraggio) | 32.11 |
Tomb Raider, impostazioni 'low', 1080p | 42.6 (bilineare) | 42.0 |
Tomb Raider, impostazioni 'medium', 1080p | 30.4 (bilineare) | 29.2 |
Project Cars, impostazioni 'low', 1080p | 27.0 (trilineare) | 27.0 |
Shadow of Mordor, impostazioni 'low', 1080p | 27.0 (2x AF) | 26.7 |
Un altro punto di vista sulla questione ci è offerto da Krzysztof Narkowicz, lead engineer programmer di Flying Wild Hog, sviluppatore di Shadow Warrior. Il quadro da lui dipinto sul filtraggio delle texture in ambito console è per certi versi differente da quello che noi abbiamo inizialmente immaginato.
"È difficile quantificare l'impatto dell'AF sulle console senza usare un devkit", dice Narkowicz. "Esso dipende molto dal titolo specifico e dalla scena in questione. Non si possono fare paragoni diretti. Hardware differenti hanno rapporti ALU:Tex specifici, ampiezze di banda diverse eccetera. Questo comporta anche colli di bottiglia specifici e un diverso impatto dell'AF sul frame-rate. Quest'ultimo dipende anche dalla scena specifica (ad esempio: quanta parte dello schermo è composta da superfici oblique?) e dal gioco stesso (quanta parte del frame è spesa disegnando geometrie, e quali texture impiegano l'AF?)."
C'è anche una differenza fondamentale tra PC e console, un livello di flessibilità ulteriore su come il filtro anisotropico può essere impiegato (qualcosa che abbiamo visto in titoli come Project Cars, The Order: 1886 e Uncharted: The Nathand Drake Collection.
"Su PC (DX9, DX11 e DX12), si può impostare il livello di AF (off, 2x-16x) ma il resto dei parametri (ossia le soglie di AF) sono stabilite automaticamente dal driver. L'AF di certo non è a costo zero: richiede l'impiego di risorse e deve campionare una mipmap inferiore (il che ha un impatto sulla cache delle texture), quindi si tratta di una feature piuttosto pesante".
La spiegazione di Narkowicz per i differenti livelli di filtro anisotropico su console è abbastanza semplice: " il problema non è la memoria unificata, e di certo non sono l'IA o il gameplay ad influenzare la performance dell'AF. Il compromesso è un altro: quando si crea un gioco per console, si vogliono ottenere esattamente 30 o 60fps e modificare tutte le feature per ottenere il miglior rapporto tra qualità grafica e performance. La differenza tra AF 8x e 16x è impossibile da notare durante il normale gameplay, con la telecamera in movimento".
"L'AF 4x solitamente è quello che offre il migliore bilanciamento: si ottiene un buon filtraggio delle texture e si risparmiano risorse da dedicare altrove. In alcuni casi (ad esempio quando si converte un gioco da una piattaforma all'altra) alla fine del progetto si possono riscontrare delle risorse di GPU non utilizzate: queste possono tornare utili per alzare l'AF, dal momento che si tratta di una modifica semplice da implementare a fine progetto. Applicare diversi livelli di AF su diverse superfici è un approccio piuttosto standard. Anche in questo caso, si tratta di una soluzione equilibrata, che libera risorse da dedicare su aspetti più importanti (come ad esempio un frame-rate bloccato a 30fps costanti)."
Narkowicz ha anche una sua idea del perché a volte, nei titoli multi-piattaforma, si notino diversi livelli di filtraggio tra PS4 e Xbox One: "i kit di sviluppo di Sony e Microsoft sono molto diversi. Microsoft è più developer-friendly e usa API collaudate come le DX11 o DX12. Sony è più estrema: all'inizio della generazione, quando la documentazione è ancora carente, è possibile fare degli errori usando un'API che non si conosce bene. Ovviamente, con il passare del tempo, il miglioramento della documentazione e la maggiore esperienza degli sviluppatori, il problema dovrebbe risolversi."
Sul perché i titoli Xbox One offrano spesso un filtraggio notevolmente migliore delle controparti PS4, nonostante la GPU della console di Microsoft sia oggettivamente meno capace, uno sviluppatore esperto in titoli multi-piattaforma suggerisce un'altra teoria interessante, individuando nella risoluzione un fattore fondamentale.
"Solitamente i titoli PS4 mirano ai 1080p, mentre l'Xbox One si orienta spesso sulla risoluzione 900p. Il filtro anisotropico è molto pesante, quindi è tra i primi elementi ad essere tagliati su PS4, per mantenere buone prestazioni. L'Xbox One, impiegando una risoluzione inferiore, ha a disposizione risorse di GPU aggiuntive e quindi può impiegare un AF migliore per migliorare l'immagine."
Si tratta di una teoria che può spiegare alcuni casi, ma non tutti: in Tony Hawk's Pro Skater 5, Strider, PayDay 2: Crimewave Edition e Dishonored: Definitive Edition, infatti, PS4 e Xbox One impiegano la stessa risoluzione 1920x1080 nativa, eppure la console di Microsoft continua ad offrire un filtraggio migliore.
Quel che è chiaro è che le ragioni esatte del perché PS4 e Xbox One offrano un filtraggio delle texture così diverso fra di loro, e spesso diverso dalle impostazioni PC, restano ancora ignote. Abbiamo chiarito qualche aspetto: sappiamo, ad esempio, che la memoria unificata delle console ha molti vantaggi, ma porta anche a qualche potenziale problema di banda. E sappiamo anche che, per quanto le console current-gen utilizzino architetture molto simili a quella PC, i loro design ne differiscono comunque in modi significativi e ancora non del tutto noti. Le spiegazioni degli sviluppatori con cui abbiamo parlato finora ci hanno aiutato ad ottenere brandelli di risposta, che però non formano un quadro complessivo sufficientemente chiaro e rivelatore... almeno non ancora.