Skip to main content

Intervista Tecnica: Halo Reach

Bungie spiega la creazione del gioco.

Digital FoundryA proposito, avete optato per l'abbandono del multi-sampling anti-aliasing hardware (MSAA), in favore di una soluzione temporal che talvolta aggiunge un artefatto di ghosting, comunque molto ridotto rispetto alla beta. Abbiamo visto MLAA, DLAA, edge detect/blur; qual è l'idea dietro questa soluzione temporal, e cosa avete affinato dopo la beta?
Chris Tchou

L'idea dietro il nostro temporal anti-aliasing è piuttosto semplice: la roba che renderizzi in un determinato frame ha un'alta probabilità di essere molto simile a quella del frame precedente, quindi perché non utilizzare tutto il lavoro svoltoxc nel creare il frame precedente per migliorare quello attuale? Il nostro approccio particolare crea uno spostamento di mezzo pixel nella matrice proiettata ad ogni frame alterno, ed effettua un blend selettivo con Quincunx tra i due ultimi frame.

Tutto ciò è studiato per eliminare il frame blending per-pixel, basato sul movimento a video calcolato. Insomma, se il pixel non si muove facciamo un blending, e se si muove non facciamo il blending. Sulle parti statiche di una scena è molto più efficace di un normale MSAA 2x perché effettuiamo un blending con correzione di gamma, che ha un aspetto molto migliore del blending impiegato nelle soluzioni hardware, ed inoltre utilizziamo anche il pattern Quincunx.

Il rovescio della medaglia è che il movimento lo disattiva, ed anche se l'aliasing si avverte meno quando ci si muove, è ancora visibile. Un altro svantaggio è che non può gestire livelli multipli di trasparenza in cui alcuni strati sono fermi ed altri si muovono. Quindi ogni trasparenza deve decidere se sovrascrivere il movimento dei pixel o meno, a seconda di quanto sono opachi. Il grosso vantaggio del temporal anti-aliasing è che non grava quasi per nulla sulle prestazioni; molto meno del comune MSAA con tiling.

L'artefatto di ghosting nella beta era causato dai poligoni della visuale in prima persona (le braccia e l'arma del giocatore) che non facevano calcolare a dovere il movimento degli elementi a video, quindi non facevano disattivare il frame blending durante il movimento. Abbiamo semplicemente sistemato quel bug ed ora funziona come si deve.

L'anti-aliasing temporale usa informazioni ricavate dall'ultimo frame, fondendole in quello successivo. Nel caso di elementi statici lo smussamento dei vertici è superiore rispetto al tradizionale MSAA, ma su oggetti grandi e in movimento vicino alla telecamera l'effetto può essere controproducente.
Digital FoundryLo screen-space ambient occlusion (SSAO) sembra aver giustamente preso il posto delle shadowmap per gli oggetti lontani contrapposti agli oggetti più vicini allo schermo. È una scelta intenzionale, una coincidenza, o semplicemente parte dell'algoritmo?
Chris Tchou

L'AO che rimpiazza le shadowmap è solo una fortunata coincidenza, ma ne abbiamo preso vantaggio, che fosse intenzionale o meno. L'algoritmo è in realtà una forma pesantemente modificata ed ottimizzata di HDAO, quindi ovviamente è un effetto che avviene solo nello spazio visivo a video: le ombre dell'ambiente hanno una grandezza costante in termini di pixel a video, non importa quanto si sia distanti. Questo significa che gli oggetti lontani sembrano avere delle grandi ombre AO, mentre quelli vicini hanno solo una lieve ombra di contatto vicino alla base. Gli artisti hanno preferito privilegiare l'aspetto piuttosto che delle ombre più realistiche, e ciò è risultato anche un sistema più efficiente. In poche parole abbiamo preso due piccioni con una fava.

Digital FoundryIl motion blur accrescere notevolmente la fluidità di gioco. C'era già in Halo 3 ma sembra che sia stata migliorata in maniera significativa. A cosa puntavate facendo questo, e quali sono stati i traguardi chiave raggiunti con il prodotto finito?
Chris Tchou

In realtà è quasi lo stesso algoritmo di Halo 3, ma l'aspetto è stato migliorato grazie a diverse modifiche. Quando calcolavamo la direzione dei pixel in motion blur in Halo 3, li delimitavamo in un quadrato; ora li delimitiamo in un cerchio. Col sistema quadrato, il problema è che i movimenti veloci finiscono sempre agli angoli, risultando in blur diagonali che non seguono la vera direzione del movimento. Oltre a questo, la stima del movimento dei pixel per il temporal anti-aliasing è stata d'aiuto, dando migliori risultati anche nel motion blur. Infine, il motion blur non subisce più la correzione della gamma, il che lo rende meno accurato fisicamente ma anche più veloce e più semplice da percepire.

Il rendering degli effetti atmosferici e l'utilizzo dell'alpha in generale, rappresentano un notevole progresso rispetto a quanto visto negli Halo precedenti, aggiungendo vera profondità alla scena e offrendo i risultati migliori con una maggiore lunghezza di campo.
Digital FoundryAvete già parlato di molte vostre soluzioni prima, al SIGGRAPH o al GDC, ma non abbiamo mai sentito molto a proposito dell'engine che gestisce l'acqua. Ovviamente è stato migliorato parecchio in Reach. Da cosa è dipeso? Avete ad esempio utilizzato il tesselator della 360?
Chris Tchou

È un argomento piuttosto complesso, ma in breve calcola le onde in una texture fuori dallo schermo, così come la sovrapposizione di varie particelle relative a schizzi ed onde. Usa il tesselator della GPU per convertire il tutto in una mesh su schermo, e fa partire uno shader custom di rifrazione/riflessi/nebbia/schiuma per renderizzarlo. In Reach abbiamo speso un sacco di tempo per ottimizzarlo al massimo, così da poterlo utilizzare su scala molto più grande. Abbiamo velocizzato lo shader parecchie volte, eliminando cose come la rifrazione in punti troppo distanti, e fermando l'animazione quando non è inquadrata. I miglioramenti visivi sono principalmente frutto di un lavoro più rifinito nel settare gli shader.

Digital FoundryAvevate già raggiunto un'impressionante distanza visiva in Halo 3, ma con Reach l'avete portata ad un nuovo livello. Quali sono stati i vostri principali traguardi in questo senso?
Chris Tchou

Il fattore più importante è che il nostro nuovo sistema genera automaticamente una versione a basso LOD (livello di dettaglio) di ogni oggetto e di ogni parte poligonale del livello. Questo sistema verrà illustrato da Xi Wang alla GDC. In breve, ricostruisce automaticamente una versione vertex shaded con pochi poligoni di ciascun oggetto e parte di livello. Questi modelli LOD vengono calcolati in maniera estremamente veloce, possono essere trattati in blocco, e hanno un aspetto quasi identico agli originali nella distanza. E visto che si tratta di un processo automatico, non abbiamo dovuto impiegare il tempo dei nostri artisti. Abbiamo anche migliorato i nostri algoritmi di visibilità culling e fatto uso di query occlusive della GPU ammortizzate per ridurre la quantità di elementi da gestire ad ogni frame.

Digital FoundryUno degli aspetti più evidenti del nuovo engine è l'abbondante uso di alpha e un superbo rendering atmosferico. Ne avete parlato un po' al SIGGRAPH 09, ma potete dirci di più?
Chris Tchou

Grazie! Anche alla prossima GDC presenterò questo argomento. Abbiamo creato una soluzione di rendering trasparente a bassa risoluzione per aggirare il "collo di bottiglia" del fill-rate e dell'overdraw, così da renderizzare molti più strati trasparenti. Non utilizziamo il trucco del fill-rate MSAA della 360, quindi è più dispendioso, ma così non otteniamo bordi compressi o artefatti in up-sampling. Ho anche tagliato circa il 70% del calcolo relativo al nostro sistema di nebbia, il che ha dato possibilità agli artisti di usarlo ovunque volessero; penso che l'unica area che non ne faccia uso è la seconda metà di Long Night of Solace, in cui si vola in giro nello spazio.

Digital FoundryI kit di sviluppo aggiornati con 1 GB di RAM sono stati utili? Una delle vecchie presentazioni di Bungie alla GDC parlava di memoria non utilizzata in Halo 3...
Chris Tchou

Sì, i dev-kit da 1GB sono stati piuttosto utili: ci hanno consentito di far girare delle versioni debug del gioco quasi integrali, anche se i maggiori beneficiari sono stati gli artisti ed i designer, che potevano caricare i livelli in modalità editing ma con le texture ad alta risoluzione del gioco completo.

Inoltre credo che tu stia parlando del back-buffer utilizzato dall'UI della 360, che penso fosse di circa 3 megabyte. Quando lanci un gioco si mantiene il back-buffer della precedente applicazione in giro per un frame, così, volendo, si può effettuare un bel fade o una transizione. La versione originale di Halo 3 non aveva questa memoria libera, il che significava che si avevano 3 megabyte in meno di memoria disponibile per incanalare le texture ad alta risoluzione. Ma uno degli aggiornamenti di Halo 3 ha sistemato questo problema, quindi ora quella memoria è disponibile per il gioco. Tale miglioria era quindi inclusa in ODST e in Reach fin dall'inizio.