All'interno di Metro: Last Light - intervista
Digital Foundry e Oles Shishkovstov di 4A Games su innovazione tecnologica, PlayStation 3 e potenziale delle console next-gen.
Di tutte le interviste che abbiamo pubblicato qui su Eurogamer, sicuramente una delle nostre preferite è quella che dedicata a Metro 2033 con il Chief Technical Officer di 4A, Oles Shishkovstov. Diretta, aperta e piena di opinioni appassionate sul suo lavoro, Shishkovstov è stato un brillante soggetto da intervistare: quando Deep Silver ci ha offerto una seconda possibilità per parlare di tecnica con Oles, non abbiamo potuto dire di no.
In questo articolo andremo in profondità su alcune delle maggiori innovazioni tecniche di Metro: Last Light, in particolare per quanto riguarda le sfide tecniche poste dall'architettura PS3. Ancora più importante, potremo avere un'anticipazione molto interessante sul potenziale delle prossime console da un architetto di rendering che sa di cosa parla.
In generale, la tecnologia è sempre limitata dalle piattaforme hardware su cui deve funzionare. Per me, Battlefield 3 è stato innovativo dal punto di vista tecnico per il sistema di illuminazione: Crysis mi è piaciuto per come ha realizzato una sorta di finta illuminazione globale in tempo reale. Gli altri due sono titoli vecchia scuola e quindi non particolarmente interessanti dal punto di vista tecnico (scherzo!).
Ma la grafica non è l'unico aspetto che compone la tecnologia di un videogioco. Ad esempio l'approccio di Killzone all'intelligenza artificiale, o gli sviluppi di Battlefield 3 con l'audio HDR, o i livelli di dettaglio automatizzati di Halo sono tutti traguardi tecnici degni di nota. Per non parlare delle ricerche che tutti quei team di sviluppo hanno compiuto nella locomozione e animazione dei personaggi, soprattutto del viso.
Fortunatamente per noi, abbiamo ingegneri di grande talento qui in 4A e abbiamo potuto sperimentare l'80% di queste soluzioni nel 20% del tempo (e denaro), restando concentrati su alcuni aspetti basilari. Quindi non importa più di tanto se solo i loro reparti di ricerca e sviluppo hanno speso il doppio del nostro budget complessivo per realizzare il gioco. Anche in questo caso sto scherzando, ma non poi così tanto...
"La PS3 è semplice sotto alcuni aspetti: se una parte del codice rallenta l'esecuzione a schermo, basta spostarla sulle SPU e dimenticarsene"
Eravamo abbastanza ben preparati per lavorare sulle console fin dall'inizio, perché il motore stesso è stato originariamente progettato con le loro limitazioni in mente, ma non sto dicendo che non abbiamo avuto qualche problema inatteso. Per esempio, sono stato davvero sorpreso di scoprire che semplicemente la riproduzione di video con il decoder integrato occupa il 10% di tutta la memoria disponibile sull'Xbox 360! Una soluzione che abbiamo scartato subito.
Su entrambe le console, i problemi da risolvere sono sempre stati la costante mancanza di memoria e potenza di elaborazione grafica in aggiunta alla lentezza di accesso ai dati da DVD per l'Xbox. Inoltre, abbiamo dovuto superare molti ostacoli per conformarci a un sacco di requisiti tecnici.
Questa esperienza ha sicuramente pagato. Anche quando non avevamo ancora iniziato a lavorare Last Light (ma Metro 2033 era già una realtà su PS3 per testare la nostra tecnologia) in seguito ci siamo fortemente concentrati su un miglior uso della memoria. Per esempio abbiamo completamente rinnovato il nostro sistema di animazione, abbiamo aggiunto la compressione VBR complessa per le musiche e anche iniziato a gestire il flusso di dati di animazione direttamente da DVD/Blu-Ray. Questa soluzione da sola riduce il carico di memoria necessaria dai 90 MB di ogni livello di Metro 2033 ai circa 20 di Last Light. Un risultato impressionante se consideriamo che il numero totale di animazioni è più che raddoppiato.
No, non è stato così difficile lavorare sulla console di Sony. La PS3 è semplice sotto alcuni aspetti: se una parte del codice rallenta l'esecuzione a schermo, basta spostarla sulla SPU e scordarsene. Abbiamo costruito un sistema semplice basato su thread virtuali in esecuzione su due thread hardware reali. La bellezza di questo sistema deriva dal fatto che siamo in grado di scaricare qualsiasi compito gravoso alle SPU del Cell attendere in modo sincrono i risultati per continuare l'elaborazione del codice.
L'esecuzione vera e propria, quando si guarda alla console sotto carico, è completamente asincrona. Il sovraccarico diretto e indiretto causa al massimo ritardi nell'ordine dei 15 microsecondi (secondo la PPU centrale), quindi ogni pezzo di codice che richiede più tempo per quella elaborazione può essere demandato al processore centrale. Tutto quello che stavamo facendo era renderizzare una scena, trovare la ragione del rallentamento e passare la sua elaborazione ad una delle SPU. Nel gioco finale ci sono quasi un centinaio di diversi task SPU in esecuzione circa 1000 volte per ogni frame, con un conseguente carico delle SPU del Cell di circa il 60%.
A parte questo, tutti gli altri compiti del processore video sono rimasti in seno al chip grafico RSX e anche in quel caso abbiamo ottimizzato come matti. L'occlusione ambientale, la geometria, e gli shader in particolare sono stati estremamente ottimizzati. L'RSX è un chip grafico ottimo nell'elaborazione dei pixel, soprattutto se gli shader non sono vincolati alle unità di aritmetica-logica (ALU) ma non è altrettanto efficiente nell'elaborazione dell'illuminazione Vertex.
"L'RSX è un chip grafico ottimo nell'elaborazione pixel, soprattutto se gli shader non sono vincolati alle ALU, ma non è altrettanto efficiente nell'elaborazione dell'illuminazione Vertex"
L'ottimizzazione non era abbastanza e abbiamo ridotto la risoluzione interna per guadagnare terreno sul fronte dell'anti-aliasing. Il risultato finale dovrebbe rendere indistinguibile la versione PS3 da quella Xbox 360 se non leggermente migliore in alcuni aspetti.
Non credo sia possibile confrontare architetture così diverse. Le SPU sono velocissime nell'esecuzione anche di normale codice C + +, ma hanno seri problemi nell'accesso diretto alla memoria a causa della latenza. Dal punto di vista del PC, non mi sembra sia cambiato molto. Certo, le CPU sono più veloci di oggi, ma la tendenza generale è quello di passare a sistemi mobile o comunque meno costosi. Così il risultato finale è lo stesso: la maggior parte la gente compra hardware alla pari con il vecchio Nehalem.
Con quali criteri? Prestazioni pure? Performance per transistor? Prestazioni per watt? Per esempio, Nvidia produce attualmente due architetture quasi completamente diverse: una per il gioco e una per il calcolo. Come sviluppatore console preferisco la prima, anche se è leggermente più sbilanciata, ma con un grande potenziale nelle mani giuste. Come sviluppatore PC preferisco la seconda visto che riesce automaticamente e in modo consistente a destinare risorse di calcolo al codice da elaborare anche se servono veramente un sacco di transistor solo per fare questo.
.Impostazioni massime come l'antialias SSAA 4x, piena tessellazione e PhysX avanzato? Secondo me attualmente non sono ancora riproducibili su unica GTX 680. [In tutta onestà, non abbiamo usato il super sampling nella recensione di Metro Last Light...- DF] Quello che abbiamo cercato di fare è stato di migliorare la qualità di ogni singolo pixel, pur mantenendo prestazioni simili a quelle di Metro 2033. Abbiamo ecceduto le nostre aspettative e quindi il gioco si è rivelato più veloce e con una qualità grafica migliore.
Come effetto collaterale di sviluppo per le console, abbiamo scoperto molteplici percorsi di codice per le traiettorie di illuminazione tra cui scegliere. Ad esempio, abbiamo spostato un sacco del carico derivante dall'ombreggiatura per unità di texture su PS3 verso l'Xbox 360 tramite varie tabelle di conversione delle unità di aritmetica-logica girandole poi su PC. Ma in realtà siamo stati in grado di scalare quasi tutto, compresa l'IA e la fisica, la complessità geometrica e le ombreggiature, l'illuminazione e la post-elaborazione: un sacco di roba insomma.
"La linea di demarcazione tra ciò che si percepisce come bene o male realizzato quando si parla d'intelligenza artificiale è di solito molto, molto sottile"
E' molto più veloce da un punto di vista prettamente prestazionale, ma l'effetto è quello di mettere in crisi la banda passante come conseguenza anche se il nuovo Iris Pro con RAM integrata promette bene. Al momento non so come Intel/AMD risolveranno il problema della banda per le loro unità di calcolo accelerate: punteranno su DDR3 multicanale o useranno RAM GDDR5 aggiungendo un sacco di cache come ha fatto Intel?
Direi che si tratta della conseguenza diretta di miglioramenti del motore e di grandi artisti tecnici che hanno richiesto questi miglioramenti tecnici: penso il merito vada equamente suddiviso tra queste due entità.
Abbiamo cambiato completamente il modello d'illuminazione, aggiunto diversi tipi di luci e aggiunto un sacco di controlli. Anche il sistema dei materiali è stato potenziato in quanto materiali diversi riflettono la luce in maniera differente come ad esempio la pelle umana. Le riflessioni speculari sono spesso completamente irrealistiche da un punto di vista fisico ma consentono un controllo indispensabile sull'estetica complessiva della scena. I riflessi ambientali screen-space non sono ben gestiti dalla, ma riescono spesso ad essere un valido complemento al modello di illuminazione.
Le basi sono le stesse, perché la direzione intrapresa con Metro 2033 era quella giusta. La difficoltà è nei dettagli perché la linea di demarcazione tra quello che si percepisce come bene o male realizzato quando si parla d'intelligenza artificiale è di solito molto, molto sottile. Qualche tempo fa ho partecipato ad una sessione della GDC, dove uno dei ragazzi di Battlefield parlava dell'IA di un titolo realizzato qualche tempo prima cui era stata apportata una miglioria tecnicamente infinitesimale che aveva cambiato il tempo di sopravvivenza dei nemici.
Gli stessi recensori che avevano criticato l'IA del primo gioco, lodarono quella del secondo proprio in base a questo. Nel caso di Metro Last Light, i meriti derivano dall'eccezionale sinergia tra game e level designer, programmatori dell'intelligenza artificiale, guru dello scripting e animatori.
"Non si possono confrontare direttamente PC e console. Le console possono essere il doppio più performanti di un PC di pari livello a causa di hardware fisso e basso livello di accesso alle risorse."
A volte si, e il comportamento è stato spesso diverso tra Xbox 360 e PS3. Per risolvere alcuni di questi problemi abbiamo migliorato la logica del gioco in relazione all'IA e alle animazioni per fare in modo che tutte le entità fossero gestite in modo asincrono usando differenti processi. Con la PS3 è stato più facile visto che siamo stati in grado di spostare campo visivo, proiezione delle ombre, tracciatura dei suoni e altri task legati alla potenza di calcolo alle SPU del Cell, risolvendo il problema.
A parte gli esterni con elevate entità direi di no. Naturalmente, abbiamo fatto un sacco di piccole ottimizzazioni dell'illuminazione in relazione all'immagine e interventi su post-elaborazione e gradazione del colore. Anche le ombreggiature influenzate dal gameplay, la fisica, e le integrazioni con l'animazione sono state rivedute una per una, ma si tratta di argomenti piuttosto complessi di cui parlare nel dettaglio.
Sì, purtroppo la tessellazione ha significato più lavoro. La tecnologia potrebbe essere applicata a qualsiasi modello di tessellazione con continuità e senza la generazione di artefatti, ma non è questo il problema. Il problema è quello di applicarla solo quando e dove è necessaria per evitare i problemi derivanti dal posizionamento errato che causa un sacco di lavoro di rifinitura.
Questo perché noi usiamo una tecnica di rendering completamente differito e non una via di mezzo. Questo ci dà un sacco di vantaggi, ma uno in particolare che è quello di usare modelli semplici per le shadowmap senza che vengano generati artefatti: in questo modo la tessellazione viene applicata una sola volta. Tuttavia, il livello di dettaglio della tessellazione “molto alto" è probabilmente troppo esigente per la maggior parte dell'hardware attualmente in commercio.
"Il livello di dettaglio della tessellazione “molto alto" è probabilmente troppo esigente per la maggior parte dell'hardware attualmente in commercio"
Stiamo parlando della PS4, giusto? Sono molto entusiasta delle nuove CPU e GPU. Il Jaguar è una CPU capace di operazioni asincrone ben bilanciate e otto core direi che sono più che sufficienti. Ho sempre preferito più core a basse prestazioni rispetto a uno solo molto veloce perché è più facile da parallelizzare qualcosa invece di cambiare gli algoritmi o inseguire ogni ciclo di programmazione all'interno di un segmento di codice critico. Quando serve, possiamo farlo, ma molto spesso è possibile evitarlo.
Se avessimo avuto a disposizione più core ancora più lenti sarebbe stato perfetto, ma ci saremmo ritrovati senza una GPU! Per quanto riguarda il core grafico, è fantastico, semplicemente fantastico. E'un dispositivo di calcolo ad alte prestazioni con memoria unificata e con infinite possibilità di comunicazione CPU-GPU-CPU. Da quello che ho visto sarà possibile passare la gestione/pianificazione dei percorsi dell'IA dalla CPU al core grafico e viceversa.
La RAM è molto importante per i giochi, ma il quantitativo deve essere proporzionato alla larghezza di banda disponibile in relazione alla CPU e la latenza del dispositivo di memorizzazione esterno. Penso che abbiano messo un po' di più RAM del necessario, ma considerando la storia passata di Sony di sottrarre una percentuale significativa della RAM agli sviluppatori per le esigenze del sistema operativo, direi che può essere esattamente la giusta quantità!
Credo si tratterà di una transizione positiva, soprattutto per gli sviluppatori indipendenti. L'architettura x86 è molto facile per i principianti, almeno per il suo modello di memoria semplificato. Basta provare a descrivere a un novizio il concetto di barriera di memoria e dove e quando inserirla per vedere il poveretto bloccato in un loop infinito! Scherzi a parte, meno tempo viene perso in ottimizzazioni specifiche legate alla piattaforma, più ne rimane per concentrarsi sul gioco.
Non credo sia opportuno effettuare una comparazione diretta tra PC e console. Le console sono in grado di eseguire un numero di operazioni doppio rispetto a un PC equivalente per merito della piattaforma standard e dell'accesso a basso livello alle risorse dell'hardware.
Tornando alla domanda, sì, sì e sì. Ci sono alcune cose che si possono eseguire in modo più efficiente su dispositivi parallelizzati quali sono le GPU. Io penso che, almeno inizialmente, con titoli di lancio, la potenza di calcolo delle GPU sarà sottoutilizzata, ma durante il ciclo di vita di queste console vedremo giochi sempre più incredibili e innovativi esclusivamente grazie ad un uso non convenzionale del chip grafico.
L'SSAA si basa sul disaccoppiamento della risoluzione di rendering da quella di output. Quindi si, in un modo o nell'altro, tornerà utile, come del resto ogni forma di correzione antialias post-processo usata nel passato. Mi piacerebbe che i produttori di chip grafici si disinteressassero della correzione multisample e dedicassero lo spazio sui loro chip ad altri compiti che non la correzione antialias: quella dovrebbe essere materia di lavoro di programmatori di grafica.
In realtà nemmeno quella soluzione paventata da Epic era realmente illuminazione globale ma un algoritmo molto avanzato in grado di produrre risultati molto convincenti. L'uso di Voxel e Cone Tracing è molto costoso in termini di risorse anche per hardware di classe Titan.
Ho fatto un sacco di ricerche sull'illuminazione globale ma non siamo approdati a nulla di concreto. Il problema fondamentale è che quando un grafico smanetta con l'illuminazione globale su PC, di solito il porting su console è un disastro sulle console dell'attuale generazione, anche senza soluzioni di illuminazione globale. Le console della prossima generazione dovrebbero essere in grado di risolvere il problema per avere una qualità equiparabile tra le due piattaforme. Personalmente preferisco partire da un rendering Voxel grossolano su cui andare a lavorare con ottimizzazioni di vario genere per ottenere un buon risultato finale senza occupare troppe risorse del chip grafico.
Per quanto ci riguarda probabilmente passeremo alla next-gen prima di quanto sia accaduto in passato. Attualmente siamo concentrati su un altro aspetto importante dei nostri giochi, i personaggi. Nel senso che non stiamo lavorando solo sull'aspetto, ma sulla ricerca di un sistema di movimento credibile inteso come animazione. In poche parole, la simulazione fisica in tempo reale di tutto il corpo con una serie di animazioni generate sulla base di un modello di "stile" derivato dal motion capture. Questo è un processo molto esigente sul fronte del calcolo ma che si adatta alle caratteristiche dei moderni chip grafici e che può permettere di raggiungere ottimi risultati.
Questo è solo un esempio. L'intera industry negli ultimi anni ha dovuto fare i conti con console tecnicamente non più all'altezza della situazione che non hanno potuto mettere in mostra i veri progressi raggiunti dal software perché erano la fonte principale di reddito. Ora il minimo comune denominatore tecnico sarà dieci volte superiore: possiamo aspettarci qualche forma d'illuminazione globale diventare di uso comune. Sarà raro vedere oggetti privi di ombreggiature o effetti di penombra, ogni modello sarà adeguatamente gestito da texture a tessellazione e displacement map, mentre la trasparenze diventeranno una banalità e il fumo che non genera ombra diventerà un lontano ricordo. Ci aspettano anni molto interessanti dal punto di vista tecnico.
Non sto dicendo che risolveremo tutti i problemi in una volta o che il massimo risultato sarà disponibile in ogni gioco da subito e su ogni console; una base di calcolo dieci volte più potente si tradurrà comunque in ricerche e sviluppo di alto livello con infinite applicazioni per i titoli console. E non solo quelli: anche la grafica PC farà passi da gigante come conseguenza.
Traduzione a cura di Matteo "Elvin" Lorenzetti