Intervista Tecnica: Halo Reach
Bungie spiega la creazione del gioco.
Quella che vi apprestate a leggere è un'intervista tecnica che il team di sviluppo di Bungie ha rilasciato al nostro Digital Foundry nelle scorse settimane. Gli argomenti trattati sono abbastanza ostici all'inizio, poi diventano di più facile comprensione, passando a temi come animazioni, intelligenza artificiale e bilanciamento del gioco.
Hanno partecipato all'intervista il graphic engineer Chris Tchou, il character designer Chris Opdahl, il community/writer Eric Osborne, il senior animation lead Richard Lico e il character engineer Max Dyckhoff.
Chiunque sia interessato a comprendere ciò che sta dietro a un videogame dovrebbe dedicare qualche minuto a questo articolo, che soprattutto nelle fasi finali lascia ben capire cosa separi una buona produzione da un tripla A capace di rinverdire ancora una volta i fasti di una delle saghe di maggiore successo dell'industria videoludica.
Halo 3 ed Halo 3: ODST utilizzavano un approccio "semi-deferred" a due passaggi, tranne per piccoli oggetti decorativi come erba e ciottoli che venivano renderizzati a singolo passaggio per una questione di velocità. Il semi-deferred rendering ci permetteva di applicare facilmente le decals, ma non l'abbiamo usato per l'illuminazione: quest'ultima veniva applicata nel secondo passaggio sui poligoni, così da ottenere delle lightmap complesse e dei bei riflessi di luce sui metalli (meglio del phong shading speculare). Per Halo Reach, abbiamo ricostruito i buffer deferred in maniera che potessero approssimare meglio i nostri modelli speculari, che ci hanno permesso di utilizzare delle veloci luci dinamiche deferred dovunque, senza perdere la lucentezza dei riflessi.
Inoltre abbiamo anche creato un sistema per determinare quando gli oggetti non si avvalgono del canale deferred (es. quando non hanno decals o complesse luci deferred che li toccano) e assegnare al volo tali oggetti al più veloce rendering diretto a singolo passaggio. Yaohua Hu ha anche speso molto tempo per ricercare una miglior rappresentazione delle lightmap (migliore delle armoniche sferiche studiate dalla meccanica quantistica!) che ci desse lo stesso supporto per le fonti di luce spaziali, contrasto migliorato, meno artefatti, un consumo di memoria inferiore e una performance nettamente superiore. Questo ci ha aiutati a risparmiare parecchio tempo di renderizzazione della GPU da usare per l'illuminazione dinamica deferred ed altre chicche grafiche.
Abbiamo creato un sistema particellare per gestire i casi specifici in cui ci sono numerose piccole particelle momentanee: in sostanza frammenti di roccia, nuvole di fumo, gocce di pioggia, schizzi, scintille e questo genere di cose. Lo esporrò più dettagliatamente alla prossima GDC, ma la parte migliore è che può gestire decine di migliaia di collisioni/rimbalzi ad ogni frame leggendo il buffer di profondità ed il normal buffer, e impiega meno di 0.3ms (circa 1/100esimo di un frame); il che è decisamente buono paragonato alle sette (7) collisioni standard permesse dal budget degli effetti standard.
Il nuovo sistema particellare permette agli artisti addetti agli effetti di usare un enorme quantitativo di queste piccole particelle che si scontrano durante gli effetti, senza preoccuparsi affatto della performance. E viene impiegato anche per la pioggia: se osservate la pioggia a rallentatore nel theatre mode potrete seguire ogni singola goccia mentre cade, finché non si infrange contro qualcosa!
Abbiamo utilizzato un singolo buffer 7e3 per il rendering finale di Reach. Il risultato è un HDR più limitato (circa 8x oltre il punto di bianco, invece del 128x di Halo 3) ma è molto più veloce nelle trasparenze e nel post-processing. In pratica, la differenza tra HDR 8x e 128x è lieve: la cosa principale che salta all'occhio è che il bloom attorno alle aree luminose perde colore più spesso, desaturandosi in bianco.
Inoltre confermiamo che un singolo buffer 7e3 ci dà più EDRAM disponibile per il lighting pass finale, ma la risoluzione del renderer è ancora limitata dai tre buffer utilizzati nel deferred pass principale. La risoluzione di Halo 3 era più limitata perché riservavamo un po' di EDRAM per le ombre dinamiche durante il lighting pass, insieme ai due buffer HDR ed al buffer di profondità. Invece con un singolo buffer 7e3, abbiamo un sacco di spazio disponibile per le ombre, ed è limitato solo dai tre buffer utilizzati durante il deferred pass.
Il tiling multiplo è problematico: o aggiunge troppa latenza al controller (perché il tiling rallenta la partenza della GPU), o risulta in troppi passaggi sui poligoni, consumando una gran quantità di risorse della CPU (in pratica tutto viene renderizzato due volte). Un altro fattore è nella DAC della 360, che ha un filtro fantastico in grado di nascondere gli artefatti: in realtà abbiamo eseguito vari test con degli utenti a risoluzioni diverse e nessuno riusciva a vedere la differenza! Quindi abbiamo deciso di optare per la performance migliore e per una latenza dei controlli ridotta, piuttosto che per un aumento di risoluzione quasi impercettibile che potesse minare il gameplay.