Metro Redux: com'è veramente sviluppare per PS4 e Xbox One - intervista
Una discussione aperta con 4A Games sulla nuova generazione di console.
Per quanto riguarda le interviste tecniche, questa è fenomenale. Chi ha letto le interviste riguardanti Metro 2033 e Metro Last Light sa già che Oles Shishkovstov, chief technical officer di 4A Games, non è ritroso riguardo a ciò che lo interessa, e nella transizione alla nuova generazione di console ci sono chiaramente molti argomenti importanti di cui discutere.
È questa franchezza che va dritta al punto a rendere le interviste a Oles così corroboranti. 4A Games è il primo sviluppatore disposto a parlare in maniera approfondita e aperta dello sviluppo sulle nuove console, discutendo i problemi e le opportunità fornite da hardware e software alla base di PlayStation 4 e Xbox One. Oles ha fatto luce su alcuni punti, in passato oggetto di voci e speculazioni, illustrando le difficoltà affrontate in particolare da chi sviluppa per Xbox One, offrendoci un accenno del lavoro che Microsoft sta facendo dietro le quinte per migliorare i kit di sviluppo.
Ci sono molte informazioni da assimilare: ovviamente la differenza di prestazioni tra Xbox One e PlayStation 4, un giudizio sincero sulla ESRAM della console di Microsoft, le implicazioni della condivisione di memoria e banda tra CPU e GPU, e osservazioni su hardware PC e DirectX 12. L'intervista contiene anche alcune rivelazioni. Sapevate che Microsoft permette ora agli sviluppatori di bypassare le DX11 e comunicare direttamente con l'hardware in maniera simile a quanto accade con le GNM API di Sony? E quanto fosse rilevante per gli sviluppatori il ritorno delle risorse della GPU riservate a Kinect?
Questo articolo precede la nostra analisi comparativa di Metro Redux, rinviata a causa di una patch dell'ultimo minuto per la versione PC. Nel frattempo abbiamo incluso del materiale delle versioni console sul quale stiamo lavorando. Per una copertura approfondita delle versioni console vi rimandiamo agli articoli sul confronto delle versioni last-gen con le Redux e l'analisi delle prestazioni di queste ultime. Alla luce dei fatti non abbiamo remore nel consigliarvi il gioco.
Credo che ciò che abbiamo ottenuto con le nuove console sia veramente ottimo visto il poco tempo che abbiamo avuto con i kit di sviluppo nello studio, appena quattro mesi di esperienza pratica su Xbox One e sei con PlayStation 4 (credo che i problemi che abbiamo avuto per far arrivare i kit di sviluppo all'ufficio di Kiev siano ormai noti).
Il fatto è che non abbiamo ancora cominciato a utilizzare appieno tutta la potenza di calcolo che abbiamo a disposizione. Ad esempio non abbiamo utilizzato contesti di calcolo parallelo a causa della mancanza di tempo e dello stato 'alpha' del supporto sulle console al tempo. Ciò significa che c'è molto potenziale ancora da utilizzare, che dovrebbe tradursi in visuali e gameplay migliori una volta che avremo preso confidenza con l'hardware.
Ovviamente non sono dotate dell'hardware più avanzato che si possa comprare oggi (anche se a prezzi folli) per PC, ma sono delle macchine ben bilanciate e superiori in termini di prestazioni a ciò di cui sono in possesso la maggior parte delle persone. Non dimentichiamo che la programmazione di basso livello permette solitamente di ottenere il doppio delle prestazioni che avremmo da un PC dalle specifiche equivalenti. Ottenerle richiede però un po' di tempo!
Per rispondere alla domanda, potrebbero durare altrettanto. Ricordiamoci che quando PS3 arrivò nei negozi fu lanciata anche la Nvidia G80, al tempo due volte più veloce dell'RSX…
Beh, l'architettura simile delle GPU è veramente una buona cosa. Il motivo è che le GPU moderne sono degli apparecchi veramente complessi con picchi prestazionali non ovvii. Non si può più dire di essere limitati da fattori come ALU, ROP, filtering delle texture e così via. Non c'è una risposta semplice e corretta. Potremmo essere limitati in una certa misura dalle unità aritmetiche e logiche e in parte dal texture addressing e in parte dalla banda, tutto allo stesso tempo… padroneggiare queste cose richiede del tempo.
Per quanto riguarda la CPU la cosa non ha veramente importanza, purché ci sia sufficiente potenza di calcolo. Per quanto riguarda la gerarchia della RAM e le sue prestazioni, è diversa tra le piattaforme.
Beh, abbiamo convertito i giochi e fatto molti test!
Un piccolo esempio che posso fare: Metro Last Light (su entrambe le console last-gen) è caratterizzato da alcuni procedimenti di generazione di texture fortemente vettorizzati e ottimizzati a mano. Ciascuno di essi richiede 0.8ms sulla singola SPU di PS3 e circa 1.2ms su un singolo hyper-thread di Xbox 360. Dopo la prima profilazione su PS4 (già vettorizzato tramite AVX+VEX) ha richiesto più di 2ms! Ciò depone male per un fotogramma da 16ms. Il fatto è che l'unico scopo di quel procedimento era di alleggerire di alcuni cicli il lavoro delle (vecchie) GPU, il che è controproducente sulle nuove console. Quel percorso è stato semplicemente disattivato nel codice.
Beh, hai praticamente risposto alla tua stessa domanda: PS4 è un po' più potente. Hai dimenticato di menzionare i ROP, e non dimentichiamo che CPU e GPU condividono la banda con la DRAM (su entrambe le console). Durante la profilazione di Xbox One ho assistito in molti casi a prestazioni sufficientemente veloci da parte della GPU, ma solo quando la CPU è praticamente inattiva. Purtroppo ho assistito anche a situazioni opposte, in cui la CPU offre le prestazioni attese ma solo a GPU inattiva, anche se il processore in teoria ha un accesso alla memoria prioritario. Per questo la decisione di Microsoft di incrementare le velocità di clock appena prima del lancio è stata assennata, visto il design ormai immutabile.
Calcolare il numero di pixel non è comunque il miglior modo per misurare la differenza tra le console. Ci sono molti altri fattori più importanti che influenzano la qualità dell'immagine oltre alla risoluzione. Potremmo ottenere il 40% di pixel in più da PS4, ma il risultato non sarebbe migliore del 40%... i tuoi stessi occhi possono confermartelo.
In realtà la difficoltà non viene dalla ESRAM, ma dalla piccola quantità presente di quest'ultima. Per quanto riguarda le sue prestazioni, sono sufficienti per la GPU presente nell'Xbox One. È vero che la banda massima teorica, paragonabile in qualche misura a quella di PS4, può essere ottenuta raramente (di solito con operazioni simultanee di lettura e scrittura, come il blending a FP16), ma in pratica abbiamo assistito solo ad alcuni casi in cui è stata un fattore limitante.
Mettiamola così: abbiamo visto scenari in cui un singolo core della CPU è arrivato a pieno carico solo gestendo le draw-call (sicuramente a causa del driver 'mono' con l'utilizzo di parecchie chiamate ad alta velocità). Su PS4, negli stessi scenari è stato difficile trovare quelle draw-call nei grafici di profilazione perché impiegano pochissimo tempo e sono quindi appena visibili.
In generale non capisco perché abbiano scelto le DX11 come punto di inizio per la console. È una console! Perché preoccuparsi di un elemento obsoleto? Su PS4 la maggior parte dei comandi della GPU sono appena alcune DWORD scritte nel command buffer, diciamo qualche ciclo di clock della CPU. Su Xbox One il tutto potrebbe essere un milione di volte più lento a causa di tutte le operazioni di registro eseguite dalle API.
Microsoft però non sta dormendo. Ogni XDK rilasciato prima e dopo il lancio di Xbox One ha portato con sé draw-call sempre più veloci. Sono state aggiunte molte funzionalità con cui aggirare le limitazioni delle DX11. Hanno perfino reso disponibile delle API in stile DX12/GNM, che però non abbiamo utilizzato in Redux a causa dei limiti di tempo.
Non ci sono segreti. Ci siamo solo adattati all'hardware.
GCN non ama gli interpolatori? Ok, via lo spazio tangente in vettori, sotto con quello per pixel. Un processo della CPU diventa troppo veloce su una CPU con esecuzione fuori ordine? Uniamo questi processi. Troppo lenti? Parallelizziamoli. Forse la GPU non lavora bene con molte radici quadrate ma va meglio con calcoli integrali? Useremo dei vecchi trucchi integrali. E così via.
Questa è l'arte dell'ottimizzazione, e non c'è altro. A proposito, la versione PC beneficia direttamente di queste ottimizzazioni, specialmente dal lato CPU, come tutte le piattaforme dotate di CPU con esecuzione fuori ordine.
Perché possiamo! In effetti, per il prossimo progetto ancora non annunciato i designer vogliono ancora di più (come sempre), ed è possibile che punteremo a 30fps.
Abbiamo lanciato un gioco solido a 60fps con la qualità a metà strada tra le impostazioni alte e molto alte della versione PC. Diciamo di riservare circa il 30% del frame-time per il post processing (si tratta di un valore praticamente costante), saremmo a circa 11ms per visualizzare il fotogramma. Ora immagina di farlo a 30fps, avremmo visuali 2 volte e mezzo più ricche, migliori.
Dal lancio di Metro Last Light abbiamo raccolto dei suggerimenti dai giocatori al fine di includerli in Metro Redux. La potenza delle nuove console ci ha permesso di migliorare i giochi nei settori più critici riguardo al gameplay, specialmente le sparatorie e il feeling generale. Ad esempio, le sequenze di intermezzo e i combattimenti sono diventati più fluidi e i controlli molto più reattivi. Inoltre la nuova incarnazione di Metro 2033 include molti aggiornamenti introdotti da Metro Last Light: nuove armi e relativi upgrade, modalità stealth e abbattimenti più accessibili, IA migliorata dal comportamento più realistico, grafica migliore etc.
Siamo molto contenti che i giochi siano più bilanciati: si giocano meglio, girano più velocemente e sono visivamente più freschi. E anche del fatto che siamo riusciti a raccogliere tutto il mondo di Metro in un unico pacchetto contenente tutti i DLC, le modalità e I livelli di difficoltà.
Stiamo facendo entrambe le cose. Abbiamo lavorato su un nuovo gioco oltre che Redux. Avevamo le risorse per gestire Redux mentre il progetto successivo era in fase iniziale di pre-produzione, anche se ora il team di Redux è necessario sul progetto mentre acceleriamo! Avete comunque già visto che Metro Redux non è solo una conversione, ma una nuova esperienza, specialmente il capitolo 2033!
Decisamente.
Per il gioco su cui stiamo lavorando ora, i designer sono passati a un'esperienza più in stile sandbox, meno lineare ma comunque con una forte componente narrativa. Non scenderò nei dettagli, ma ciò richiede anche del lavoro da parte dei programmatori. Inoltre stiamo migliorando la grafica sotto aspetti molto differenti, ad esempio di recente abbiamo creato un'occlusione ambientale globale basata sulla fisica (invece che sull'ambiente, come la SSAO). Non parlerò della renderizzazione basata sulla fisica (PBR) al momento, perché siamo ancora nella fase in cui gli artisti stanno adattando la propria mentalità ad essa.
Oltre a comunicare molto più da vicino con l'hardware, queste API rappresentano un cambiamento nel design delle API. Le DX 11 erano come un 'terrò traccia di tutto per te'. Le DX 12 dicono 'ora è una tua responsabilità', quindi potrebbe essere una barriera molto più sottile. Per quanto riguarda Mantle, secondo la mia opinione sono delle API temporanee.
No, sono importanti. Il tracciamento di tutte le dipendenze richiede una grossa fetta della potenza di calcolo della CPU. Se parliamo della generazione di comandi multi-threaded, il modello DX 11 è stato essenzialmente un 'flop', mentre quello delle DX 12 dovrebbe essere giusto.
Beh, il problema è un po' più complesso. Non è che ci sia stato detto 'ecco, prendete quel 10% di prestazioni che vi avevamo rubato'. In realtà è variabile, a volte puoi usarne l'1.5% in più, a volte il 7% e così via. Avremmo potuto puntare a una risoluzione più alta, ma questa volta abbiamo optato per un frame-rate stabile al 100% con sincronia verticale. Non voglio dire che non avremmo potuto fare di più con più tempo a disposizione, e come ho detto nella precedente risposta l'XDK e il software di sistema continuano a migliorare di mese in mese.
Beh, le prestazioni delle CPU si sono essenzialmente bloccate a causa di vari fattori, tra cui quello economico. Direi che gli sviluppatori di giochi PC dovrebbero prendere come riferimento le CPU delle console.
È difficile rispondere senza scendere nelle 'guerre tra fan'. Prendete i componenti più potenti che il vostro budget vi permette, con un occhio di riguardo per la GPU.
Il problema con la memoria unificata è la coerenza. Anche su console, in cui vediamo dei sistemi su circuito integrato (SoC) altamente integrati, abbiamo l'opzione di mappare gli intervalli di indirizzo di memoria essenzialmente come 'per la CPU', 'per la GPU' e 'pienamente coerente'. E quest'ultima soluzione non è molto utile in quanto è uno spreco di performance. Per il PC tradizionale, passare per un qualche tipo di bus esterno solo per lo snoop delle cache sarà veramente lento.
Sì, l'originale Metro Last Light per Linux era basato su OpenGL 3.2, stabile ma senza supporto per funzionalità più complesse. Per Redux stiamo essenzialmente replicando la versione DX11 con una corrispondenza quasi identica nelle funzionalità. Lo svantaggio di questo approccio è che la GPU dovrebbe avere un 'core profile' almeno OpenGL 4.
Decisamente. Il K1 è semplicemente una stella nel mondo mobile. Vorrei che il cielo fosse pieno di stelle per renderlo economicamente possibile per noi!