Ecco come The Crew è stato portato su PS4 - articolo
…e perché il PC sarà essenziale per la next-gen.
Ubisoft Reflections ha trascorso il secondo giorno della Developer conference appena conclusa tenendo un seminario assolutamente intrigante intitolato: "Trucchi e consigli sulle procedure di porting della Next-Gen". Per noi del Digital Foundry si trattava di una presentazione da non perdere assolutamente perchè la stragrande maggioranza, se non la quasi totalità dei titoli che giocheremo nei prossimi anni su Xbox One e PlayStation 4 deriveranno quasi sicuramente da un codice PC, presupponendo, in diversa misura, l'implementazione di nuove procedure di porting da un hardware all'altro.
Si tratta di un argomento intrigante dal punto di vista "politico" in quando cambiano i paradigmi di sviluppo in relazione alla piattaforma, in particolare se siete giocatori PC dotati di un computer ragionevolmente carrozzato. In precedenza la vostra piattaforma era lo step finale dello sviluppo di un gioco, spesso destinataria di porting non particolarmente ottimizzati. In questo preciso momento storico si conferma invece la piattaforma di riferimento per chi vuole sviluppare sulla prossima generazione di console per due motivi ben precisi. Il primo è la limitatissima disponibilità di console in versione debug che possano permettere agli studi di appoggiarsi a versioni modificate com'era pratica diffusa con le console dell'attuale generazione.
La seconda riguarda l'architettura x86 molto simile adottata da Sony e Microsoft che favorisce porting diretti da un codice originario PC sviluppato su macchine di potenza paragonabile. Si tratta di una situazione destinata a non cambiare almeno per qualche tempo visto che giochi di una certa complessità richiedono almeno due anni di sviluppo; è quindi è piuttosto probabile che almeno per il resto del 2013 e buona parte del 2014, il caro vecchio home computer farà da ventre materno per i titoli crossplatform più ambiziosi degli sviluppatori di terze parti che decideranno di imbarcarsi immediatamente nello sviluppo di giochi next-gen.
Il gioco di guida di Ubisoft intitolato The Crew è decisamente promettente ed è stato presentato allo scorso E3 grazie a una demo che girava su hardware PC. Si tratta di un progetto completamente nuovo realizzato da un gruppo di reduci dello sviluppo di Test Drive Unlimited ora conosciuti come Ivory Tower. Al momento stanno sviluppando la versione PC del gioco e con ogni probabilità quella Xbox One ma non sono i soli coinvolti su questo progetto visto che Ubisoft Reflections (gli autori della serie Driver, non proprio dei pivelli sul fronte dei giochi di guida) si sono fatti carico della versione PS4. Il compito che attende il team di Newcastle è quantomai arduo, visto hanno dovuto mettere mano a un codice molto vasto generato da uno studio separato e compilarlo sull'hardware di Sony prima di arrivare ad ottenere le prime immagini su schermo.
"Abbiamo iniziato con una base del codice molto ampia di circa 12000 file su Windows 64-bit usando una versione del motore grafico adattata alle D3D11" ci ha spiegato il programmatore di Reflections Chris Jenner. "Bisogna per forza iniziare con una versione del codice a 64-Bit perchè l'hardware PS4 è già a 64-bit ed è opportuno liberarsi dei problemi di compatibilità 32-bit/64-bit ancora prima di iniziare a pensare alle specifiche delle piattaforme su cui si lavora. Lo scopo iniziale del nostro progetto era quello di rendere la versione PS4 identica sotto il profilo dei contenuti a quella Windows."
Sony ha largamente pubblicizzato la facilità d'utilizzo dell'hardware PS4, una qualità che dipende in buona parte dalla bontà dei tool di sviluppo forniti per creare codice compilato di alto livello. Per gli sviluppatori PS4, l'uso del consueto Visual Studio è ormai affermato e il modo in cui Sony ha riconosciuto queste necessità supportando gli sviluppatori è evidente. All'interno dei compilatori di Sony sono infatti già presenti opzioni pensate specificatamente per aumentare la compatibilità con quelli Microsoft usati per realizzare giochi DirectX 11.
"Uno degli aspetti che ci hanno aiutato maggiormente nella realizzazione della versione PS4 di The Crew è dovuta al fatto che il motore usa un sacco di middleware. I supporter dei middleware sono stati sempre molti attivi su PS4, quindi ci sono versioni dei compiler di tutti i middleware possibili già disponibili. Ci vuole parecchio lavoro per integrare i Software Developement Kit (SDK) mentre questi si aggiornano e ottenere nuove versioni dei middleware che servono può diventare un impegno gravoso. Man mano che la piattaforma si assesta o i cambiamenti agli SDK diventano meno significativi, sviluppare un gioco a ridosso del lancio diventa generalmente più facile."
"Ci vuole parecchio lavoro per integrare i Software Developement Kit (SDK) mentre questi si aggiornano e ottenere nuove versioni dei middleware che servono può diventare un impegno gravoso"
Più importante è l'utilizzo degli 8GB di RAM installati sulla PlayStation 4. Questo pool di memoria unificato è un vantaggio significativo rispetto al PC stesso o alla vecchia PS3, due piattaforme caratterizzate da due bacini di RAM dedicati per usi completamente diversi della RAM, ovvero di sistema e video. La PS4 unifica queste risorse e le mette a disposizione dei giochi in un'unica soluzione ma su bus separati.
Jenner ci ha spiegato che "il primo bus è chiamato "Onion" mentre il secondo è "Garlic": il primo si occupa della cache della CPU mentre il secondo è caratterizzato da una banda molto elevata pensata per portare una grande quantità di dati verso la GPU."
Jenner non è andato troppo in dettaglio sui livelli di banda disponibili per ogni bus dati a causa di accordi precisi di non divulgazione stipulati con Sony, ma stando alle nostre informazioni il processore grafico ha a disposizione 176GB/s di banda sulla RAM GDDR5 tramite il bus Garlic, mentre Onion si attesta a un ammontare significativamente inferiore, nell'ordine dei 20GB/s dedicati alla CPU (a tal proposito, quest'analisi di ExtremeTech della APU di PS4 è una lettura decisamente interessante). Anche se Jenner non ha specificato la larghezza di banda del bus legato alla CPU, ci ha confermato che è più che sufficiente a svolgere il lavoro richiesto: la vera difficoltà risiedeva altrove, ovvero decidere quali dati avrebbero preso la strada della CPU e quali del processore video. Una scelta basilare per arrivare alla migliore ottimizzazione del codice da compilare.
"Le prime difficoltà le abbiamo incontrate nell'allocare la memoria correttamente: l'Onion bus è ottimo per la memoria di sistema, mentre il Garlic per quella di rendering. Tuttavia, ci siamo resi conto di come alcuni shader fossero allocati su quest'ultimo ma contenessero a loro volta delle informazioni che avrebbero dovuto essere scritte sul codice che doveva attingere agli shader stessi. Poiché questi dati non erano progettati per passare attraverso il bus della CPU, i rallentamenti avrebbero potuto essere molto consistenti se non li avessimo affrontati subito: ci siamo quindi resi conto immediatamente che l'allocazione corretta delle informazioni è essenziale per mantenere la consistenza nella velocità di esecuzione dei calcoli. "
Quindi, elementi come il codice principale contenente tutte le variabili del gioco, dati degli shader essenziali e collisioni relative agli elementi tridimensionali transitano per il bus Onion, mentre gli elementi grafici come dati di vertex e le texture, gli shader e la maggioranza dei target di rendering vengono gestiti dal bus Garlic, caratterizzato da una banda infinitamente maggiore.
Un altro problema di cruciale importanza riguarda il fatto che gli SDK della PS4 sono molto simili a quelli usati dagli sviluppatori PC: Simon O'Connor di Reflections ci ha spiegato che la nuova console Sony non usa però le Direct X e quindi Sony ha realizzato de API specificamente pensate per questo. Quelle grafiche sono completamente nuove è quindi molto pulite, ben concepite e si adattano all'hardware molto bene. Al livello più basso si trova un'API chiamata GNM che dà all'utente un controllo quasi completo di quello che fa la GPU, al prezzo di tempi di sviluppo più lunghi e un sacco di lavoro supplementare.
Sony ha già parlato delle sue API di basso livello alla scorsa GDC ma non ne ha rivelato il nome, quindi sappiamo che si tratta delle equivalenti GCM presenti su PS3. Ma per quanto riguarda il codice fornito da Sony che dovrebbe rendere lo sviluppo più semplice?
"La maggior parte degli sviluppatori ha iniziato a lavorare su PS4 usando le API GNMX che impacchettano i più complessi dati della GPU per renderli più facilmente gestibili a chi è abituato a lavorare su piattaforme D3D11. Anche noi abbiamo iniziato con le API di alto livello ma poi abbiamo deciso di usare quelle di basso livello perchè si adattavano meglio alle nostre necessità. Le GNMX sono facili da usare, ma rimuovono la maggior parte delle possibilità di accesso personalizzato alla GPU della PS4 e questo può tradursi in un impatto considerevole sulle prestazioni del processore centrale.
Un sacco di lavoro è stato quindi investito nel codificare il rendering a basso livello usando le API GNM: in questo contesto i programmatori hanno capito l'ammontare del lavoro svolto dietro le quinte dalle DirectX di Microsoft in termini di allocazione della memoria e gestione delle risorse. Lavorare su PS4 a basso livello significa implementare a mano tutta una serie di operazioni che normalmente lasciate alle API: Il vantaggio è tuttavia quello di avere un controllo quasi totale del sistema, con quello che ne consegue in termini di ottimizzazione delle risorse.
Un'altra area cruciale nello sviluppo di The Crew su PS4 ha riguardato la possibilità di programmare i pixel shader del gioco: l'esperienza accumulata dai Reflections in questo campo suggerisce che il PlayStation Shader Language (PSSL) è in realtà molto simile allo standard HLSL delle DirectX 11 con solo alcune sottili differenze eliminate con la compilazione di macro preconfezionate e altri algoritmi di sostituzione che i programmatori chiamano "regex search and replace" per le differenze di codice più marcate.
"Un'altra area cruciale dello sviluppo di The Crew riguardava la possibilità di programmare i pixel shader del gioco."
All'evento di Ubisoft dello scorso E3 la versione PC di The Crew girava a 30 frame al secondo ma il primo port del gioco su PS4 non era altrettanto efficiente in quanto superava a fatica i 10fps. In effetti, sempre Chris Jenner ci ha spiegato che buona parte della fase di ottimizzazione è dipesa da un interessante tool di sviluppo messo a disposizione da Sony chiamato Razer. Questo applicativo permette di analizzare il codice e indicare agli sviluppatori dove si vengono a creare i colli di bottiglia per eliminarli più velocemente.
"Il nostro gioco è architettato per far girare in simultanea due processi: uno gestisce la simulazione (velocità, fisica, intelligenza artificiale, modello di guida) mentre il secondo si preoccupa del rendering della scena ed entrambi girano in parallelo. Questi processi possono essere suddivisi tra le varie unità di calcolo permettendo di parallelizzare un sacco di compiti che il gioco chiede quindi a CPU/GPU di eseguire simultaneamente."
Non sorprende che sia stato il render grafico ad essere fatto oggetto del maggior numero di problemi, in particolare per quanto riguarda i pixel shader programmabili. Si tratta dei "Constant", in gergo tecnico i dati forniti agli shader che non sono vertici o texture: per capirci la posizione dell'oggetto, il modo in cui la luce di sole si riflette sullo stesso o l'esatta posizione delle ossa in un personaggio animato scheletricamente. Uno shader in genere necessita di un numero elevato di questi dati che può spaziare dalle dozzine alle centinaia: considerato l'ammontare del numero di shader presente in un gioco moderno, è facile capire come un numero elevato di questi si possa rapidamente possa penalizzare terribilmente le prestazioni.
"Abbiamo trovato un paio di soluzioni per risolvere questo problema: una è stata di ridurre il tempo speso ad impostare i Constant nel processo di rendering mentre l'altro è andato nella direzione di bilanciare il carico di lavoro attraverso diversi core effettuando una suddivisione dei buffer di comando" è stata la spiegazione di Chris Jenner, precisando anche che è stato molto più semplice ottenere questo genere di ottimizzazione rispetto alla PS3 in quanto tutti i core della CPU di PS4 hanno un accesso diretto alla memoria principale.
"L'altra operazione che abbiamo compiuto è stata quella di capire come la console gestisse i Constant in relazione alle capacità del tool di sviluppo. L'interfaccia del motore grafico si chiama GNMX e dispone di una componente chiamata "Constant Update Engine" che normalmente gestisce il flusso di questi dati verso il processore grafico. Questo engine era tuttavia più lento di quello che ci aspettavamo e, anche se in seguito Sony ne ha migliorato le prestazioni, abbiamo deciso di approntare una soluzione fatta in casa in virtù della conoscenza che abbiamo del nostro engine. Sappiamo come il nostro motore accede ai dati e quando questi devono essere aggiornati più efficientemente rispetto alla soluzione fornita di serie da Sony."
In generale, da una prospettiva di pura performance, sembra che i tool di sviluppo di Sony siano già sufficientemente maturi e in grado di sfruttare al meglio il potenziale della nuova console per supportare la produzione di titoli di qualità. Microsoft sembra invece ancora impegnata a comprendere il reale potenziale dell'Xbox One per riuscire a spremere il massimo dalla GPU. Abbiamo chiesto ai Reflections se si aspettano che i loro sforzi di ottimizzazione vengano premiati da nuove versioni dell'ambiente di sviluppo. In sintesi: i "driver" della GPU saranno ulteriormente ottimizzati?
"L'SDK si evolve continuamente, ma a un ritmo meno frequente di quanto non accadesse sei mesi fa", è stata la spiegazione di Chris Jenner. "Ci stiamo avvicinando alla versione definitiva e quindi non ci aspettiamo enormi miglioramenti sul fronte della performance, solo piccole finalizzazioni e modifiche non radicali. La stabilità era ottima già da qualche tempo a questa parte e in questo senso non abbiamo dovuto apportare cambiamenti significativi."
La conversione del codice di base è stata ultimata; ora il team di sviluppo di Ubisoft Reflections sta potenziando il suo staff per riuscire a completare la versione PS4 del gioco in tempo per una pubblicazione prevista intorno al primo quarto del 2014. In realtà, il grosso della procedura di adattamento del codice principale è stata eseguita in sei mesi da un team di tre persone: l'impressione, confermata da Reflections, è che il processo di porting sia stato quindi piuttosto semplice e diretto. Non abbiamo avuto conferme sulla versione Xbox One, ma, come abbiamo accennato poc'anzi, la sensazione è che se ne stiano occupando direttamente gli Ivory Tower in virtù della stretta parentela con la versione OC dovuta all'uso delle DirectX 11.
Simon O'Connor ha concluso la presentazione precisando che i Reflections considerino il lavoro svolto sulla versione PS4 di The Crew come molto di più di una semplice conversione. Si tratta di un'opportunità di esplorare le capacità dell'hardware Sony e l'impressione è che, almeno inizialmente, nessuno riuscirà a spingere al massimo il potenziale grafico di CPU e GPU.
"La GPU della PS4 è molto programmabile: c'è un sacco di potenza nascosta tra le pieghe di RAM e processori che non stiamo ancora utilizzando: avremmo potuto trovare soluzioni di rendering inedite per adattarle al nostro motore grafico, ma si tratta pur sempre di un gioco crossplatform e quindi non possiamo esagerare con le personalizzazioni tecniche studiate espressamente per sfruttare a fondo l'hardware proprietario di PS4."
Quest'affermazione in chiusura è piuttosto chiara: se all'inizio dell'era Xbox 360/PS3 si trattava di individuare una piattaforma di riferimento e poi rimuovere dalle versioni secondarie eventuali caratteristiche o accettare la perdita di prestazioni, ora lo scenario è invertito. Almeno in questa fase iniziale, entrambe le console saranno la destinazione finale del processo di porting con il PC a fare da punto di riferimento: il fatto è che gli sviluppatori si stanno accorgendo dei benefici derivanti dalle caratteristiche tecniche intrinseche del loro hardware e che molti vantaggi in termini di prestazioni si potranno ottenere solo spremendo al massimo le caratteristiche peculiari di Xbox One e PS4. Se i Reflections riusciranno ad ottenere una parità di prestazioni con la versione PC e poi adattare il codice alle potenzialità dell'architettura superspinta PC ideata da Mark Cerny, The Crew sarà un gioco da tenere veramente d'occhio.