Metro Redux su Switch: il making of di un porting 'impossibile' - articolo
4A Games spiega il processo di transizione su hardware di Switch del gioco uscito su PS4 e Xbox One.
Tutto è cominciato con Doom 2016 - un porting per Switch che sembrava così ambizioso da risultare impossibile. Ma da allora, una sfilza di titoli ambiziosi current-gen sono sbarcati sulla console ibrida Nintendo, il cui ultimo arrivato è Metro Redux di 4A Games. Si tratta di shooter in prima persona brillanti che sono molto fedeli alle versioni originali. Ma qual è il segreto? Come fanno gli sviluppatori a riuscire in queste imprese con un hardware mobile Nvidia vecchio di cinque anni?
"All'inizio, avevamo grosse preoccupazioni riguardo alle performance", ammette il chief technical officer di 4A, Oles Shishkovstov. "Capite, passare da una PS4/Xbox One base con sei e mezzo o sette core CPU che girano a 1.6 GHz o 1.75GHz a una CPU tri-core che gira solo a 1.0GHz può sembrare spaventoso. La GPU era adeguata, visto che la grafica può essere scalata verso su e verso giù molto più facilmente rispetto al codice di simulazione del gioco."
I risultati di questo lavoro di conversione sono certamente incredibili considerando il gap abissale tra le CPU delle console. 4A ha iniziato traducendo il codice delle versioni PS4 e Xbox One di Metro Redux (e vogliamo sottolineare che il team non ha utilizzato il codice last-gen), un processo svolto con agevolezza dal team, ma questa versione preliminare del gioco riusciva a girare solo a 7-15fps. Il gioco era totalmente CPU limited.
Dimezzare il frame-rate target di PS4 e Xbox One che era pari a 60fps, portandolo a 30fps, è stato un passo obbligatorio prima di iniziare il processo di ottimizzazione. "Prima di tutto, abbiamo importato alcune ottimizzazione da Exodus nel codice di base di Redux", spiega Shishkovstov. "Dopodiché, ci siamo concentrati sul processare le animazioni ad alto livello e sull'estrazione delle ILP( (instruction-level parallelism) dall'A57 a basso livello. E poi è stato modificato il LOD: il problema della CPU è stato risolto con alcune manovre per stabilizzare il frame-rate."
Spiegata in questo modo, la soluzione scelta da 4A per bypassare le limitazioni della CPU di Switch sembrano semplici ma il processo di codifica a livello Assembly (il linguaggio di programmazione usato per dare istruzioni al processore ARM Cortex-A57 di Switch) non dev'essere stato certo una passeggiata. Le animazioni impegnano un sacco di cicli del processore, quindi l'idea di aggiungere LOD nella transizione ha molto senso.
Dopodiché, 4A è passata alle ottimizzazioni per la GPU, e tutto è iniziato con la scelta delle API grafiche. La compagnia ha una lunga storia nel supporto delle più performanti API a basso livello, con Metro Exodus che ne è esempio brillante, essendo stato programmato per sfruttare DX11, DX12, Vulkan e GNM sulle release per le varie piattaforme. Switch supporta OpenGL e Vulkan, e 4A ha scelto la prima (di Nvidia) per ottenere le prestazioni migliori.
"NVN è l'API a livello più basso possibile su NX", spiega Shishkovstov. "L'overhead della CPU è insignificante, in gran parte dei casi costituito da un paio di DWORD scritte nel buffer di comando della GPU. Un codice pulito e ben disegnato, che consente di sfruttare tutto quello che offre l'hardware. Molto meglio di Vulkan per esempio."
Ed è qui che siamo particolarmente interessati, ovvero nel metodo in cui Switch riesce a dare così tanto con così poco. Quando l'hardware di Switch è stato annunciato, la nostra unica esperienza col processore Tegra X1 veniva da Shield Android TV, hardware su cui le conversioni da console last-gen solitamente faticavano. Sembra che NVN faccia realmente la differenza qui, con 4A che probabilmente ha accesso diretto a basso livello all'architettura Nvidia Maxwell. Quindi le feature dell'architettura Maxwell sono utilizzate in Metro Redux?
"Non sono sicuro di poterlo affermare, ma sembra che le usiamo tutte", spiega Shishkovstov. "Molte delle nostre ottimizzazioni per la GPU sono focalizzate sulla riduzione della banda di memoria verso l'esterno dal chip. Per esempio, NVN offre molto controllo sulla compressione della memoria, sul comportamento delle tile cache, sul layout della memoria e sull'aliasing. La modalità di rendering immediata è utilizzata solamente durante la creazione del g-buffer e del rendering delle shadow map. Ogni altro step, incluso il rendering successivo e l'illuminazione differita, usa la rasterizzazione con impostazioni differenti per la tile cache."
Così come molti altri giochi di questa generazione, Metro Redux usa il temporal anti-aliasing o, come lo chiama 4A Games, temporal super resolution. L'idea alla base della tecnica è semplice. Il super-sampling tradizionale è il processo di rendering a una risoluzione superiore rispetto a quella nativa, che verrà poi scalata verso il basso alla risoluzione scelta dallo sviluppatore. TSR si basa sulla stessa idea, tranne per il fatto che vengono inseriti dettagli aggiuntivi che sono prelevati dai frame precedenti. La tecnologa è utilizzata in modo eccezionale permigliorare la qualità delle fotocamere degli smartphone, ma al di fuori dei giochi ci sono altri utilizzi.
"Questa è una soluzione ben conosciuta e sfruttata dall'FBI per leggere le targhe delle auto dai satelliti", dice Oles Shishkovstov". Il problema riguarda il sampling delle texture ed i calcoli pesanti per la GPU di Switch. "Non era facile. Dovevamo sviluppare qualcosa di più leggero ma senza grossi compromessi grafici. Abbiamo speso più di un mese per riuscirsi: sembra che l'ISA della GPU Maxwell sia il mio linguaggio adesso.
"Il risultato finale richiede approssimativamente 2ms a 1080p con solo nove sample di texture e tanta matematica complessa. E come prodotto associato applica anche l'anti-aliasing. Quando si spinge troppo (succede a 1080p), l'algoritmo produce estremità pixel-perfect e dettagli nitidi sulle texture, con solo qualche degrado causato dall'AA, ma è veramente poco evidente anche per un occhio allenato".
Usando il temporal super resolution, Shishkovstov afferma che il concetto di rendering a risoluzione nativa diviene poco rilevante, e questo fa sorgere alcuni interessanti quesiti. Tornate a consultare la nostra analisi e vedrete che molto spesso non eravamo in grado di contare i pixel di ogni frame. Comunque, sono giochi come questo, Modern Warfare 2019 e molti altri che ci fanno considerare nuove tecniche per la misurazione della qualità dell'immagine. Redux su Switch non sembra così pulito quanto la versione PS4, ma se prendiamo le immagini di Metro e le confrontiamo con quelle a 720p delle console last-gen, la qualità dell'immagine risulta di un livello superiore.
Sia che giochiate in configurazione docked che mobile, l'output è a 1080p o 720p rispettivamente, ma la nitidezza dell'immagine si modifica in base al contenuto. La tecnica scelta sembra brillare particolarmente in modalità portatile, e questo non può che farci chiedere come 4A abbia scalato il gioco tra modalità portatile e docked.
"Giocando in modalità docked la GPU raddoppia la frequenza di clock ma la banda di memoria aumenta moderatamente, quindi non c'è proprio un raddoppio della velocità, ma è comunque un buon aumento", spiega Shishkovstov. "Questo ci ha permesso, ad esempio, di renderizzare velocità per-pixel per più oggetti, così da ottenere un TSR e AA leggermente più corretti. In modalità portatile possiamo solo tracciare la velocità per HUD/arma, e questo è tutto quello che possiamo permetterci.
"Inoltre, la versione Redux mancava del LOD geometrico per un sacco di modelli. Visto che il team artistico era impegnato con (gli enormi) DLC di Exodus, abbiamo generato in via programmata quelli mancanti. Sia docked che portatile usano la geometria PS4/X1, ma la modalità portatile usa un cambio di LOD più aggressivo, anche se difficilmente ce ne si accorge sul piccolo schermo della console. Dal punto di vista dell'utente, la modalità portatile è sempre 720p e quella docked sempre 1080p, e negli altri aspetti sono identiche."
Metro Redux è inoltre sorprendentemente stabile nel mantenimento del suo frame-target di 30fps. Un punto da sottolineare perché altri porting 'impossibili' per Switch, come The Witcher 3 o Warframe, è raro che riescano nell'impresa.
"Sono soddisfatto che abbiamo centrato i 30fps stabili", ci dice Shishkovstov. "L'unico modo che avevamo per avvicinarci ai 60fps era un rendering di due frame per uno di simulazione, ma questo avrebbe ridotto drasticamente la qualità e introdotto un input lag incostante. Far girare il gioco a 30fps ci ha permesso una qualità senza compromessi. Anche gli shader di materiali e illuminazione esattamente identici a quelli delle versioni PS4 e Xbox One."
E per quanto riguarda il come il gioco riesce a girare a 30fps così stabilmente, 4A spiega che è merito dell'ottimizzazione. "Anche senza adottare il TSR, il gioco produce un frame-rate stabile di 30fps a 720p in modalità portatile, che mantiene per il 99 percento dell'intero gioco. Il TSR è più utile per il 1080p della docked mode."
Con il susseguirsi sempre crescente di voci su un modello più potente di Switch in sviluppo, pensavamo che sarebbe stato interessante vedere come Nintendo ed Nvidia avrebbero scelto di innovare. Dopo tutto, una gran parte del successo del design di PlayStation 4 è merito di Sony che ha costantemente ascoltato i feedback degli sviluppatori.
"Visto che eravamo CPU-limited, core addizionali sarebbero sicuramente in lista. Banda e potenza GPU in più non fanno certo male", afferma Shishkovstov. Mettere la potenza della CPU in cima alla lista potrebbe stupire, ma la grafica scala molto più facilmente del codice del gioco, e nei nostri test di overclock dell'hardware di Switch, innalzare la frequenza della CPU ha dato prova di restituire risultati più importanti rispetto alla stessa operazione sulla GPU.
E dato che stiamo parlando di nuovi hardware, che dire delle prossime console di Sony e Microsoft? Gli sviluppatori sono sotto NDA, quindi non possono parlare di specifiche tecniche dell'hardware. Comunque, gli aspetti chiave delle nuove macchine sono di pubblico dominio, come il supporto accelerato in hardware per il ray tracing in tempo reale.
"Siamo pienamente immersi nel ray tracing, e in via di abbandono completo delle tecniche di sviluppo vecchia scuola", rivela Shishkovstov. E riguardo al modo in cui il RT si è evoluto dai tempi di Metro Exodus? "Internamente abbiamo sperimentato un sacco, ottenendo risultati incredibili. Dovrete aspettare per vedere cosa implementeremo nei nostri progetti futuri".