Dentro l'Unreal Engine 5: come funziona il salto generazionale di Epic
Uno sguardo ravvicinato a Nanite e Lumen.
Il video dell'Unreal Engine 5 in tempo reale su PlayStation 5 è stato tra gli eventi più importanti dell'anno videoludico, e il primo vero assaggio di next-gen. Un salto generazionale in termini di dettaglio insieme alla totale eliminazione del pop-in dei dettagli basato sulla distanza degli oggetti. L'UE5 di Epic Games adotta un approccio radicalmente nuovo alla gestione delle geometrie, combinato a una tecnologia avanzata di illuminazione globale. Il risultato finale è qualcosa di piuttosto inedito, ma come funziona esattamente il tutto? E ci sono anche aspetti negativi?
Le reazioni online sono state fonte di domande interessanti, ma anche di buffe teorie. Quando la protagonista del video si infila in una fessura nella roccia, per esempio, è per una scelta artistica, non certo per dare tempo alla console di caricare più dati. La risoluzione dinamica mediamente sui 1440p, poi, ha sollevato non poche preoccupazioni, ma noi abbiamo esaminato una ventina di immagini non compresse prese direttamente dal trailer e possiamo dire che le nostre tecniche di conteggio dei pixel non sembrano adatte a valutarle. Quando l'immagine è così bella, dettagliata, e solida (priva di shimmering o flickering), la risoluzione perde importanza, e del resto è una tendenza che abbiamo visto già fare capolino a metà di questa generazione. Lo abbiamo detto quasi due anni fa: la next-gen non deve puntare sul vero 4k quando sembra ovvio che la GPU sia meglio spesa a fare altre cose.
Tra le obiezioni ce ne sono anche di stimolanti, ovviamente. Quell'idea di generare un triangolo per pixel è stata dimostrata a 30fps, quindi ci si chiede come funzioni al doppio del framerate. Oppure ci si chiede come funzioni questo nuovo approccio con geometrie dinamiche, o trasparenze come capelli o fogliame. Anche la gestione della memoria è importante: la presentazione dell'UE5 ha sottolineato come sia possibile caricare asset senza compressione o ottimizzazione, ma come funziona? La banda per il caricamento degli asset deve essere ampia, e sappiamo che la PlayStation 5 è pensata apposta, ma quanto è messa in difficoltà dalla demo Lumen in the Land of Nanite? Speriamo di scoprirlo presto.
Al cuore dell'innovativo Unreal Engine 5 troviamo il sistema di rendering micro-poligonale Nanite e il suo livello di dettaglio senza precedenti. L'idea alla base di Nanite non è nuova, però, visto che già nella CGI dell'industria cinematografica è utilizzata. Il punto di partenza è lo stesso, ma nei giochi funziona diversamente: se una volta si preparavano più modelli dello stesso oggetto con diversi livelli di dettaglio, con Nanite è possibile caricare sempre il più dettagliato e lasciare che sia il motore a modificarne la geometria a seconda delle esigenze. Alcuni membri dello staff di Epic Games ci hanno aiutato a capire esattamente come funziona.
"Con Nanite non dobbiamo più adattare a un asset a bassa risoluzione il normal mapping di un modello ad alta, possiamo importare direttamente quest'ultimo nel motore grafico. Unreal Engine supporta il virtual texturing, che vuol dire caricare su ogni modello diverse texture 8K senza pesare troppo sulla GPU," ci ha detto Jerome Platteaux, l'art director dei progetti speciali di Epic. Ci ha spiegato che ogni asset ha una texture 8K per il colore, un'altra texture 8K per le imperfezioni e il metallizzato, e un'ultima texture 8K con la normal map. La differenza dal solito è che non si tratta di una normal map tradizionale che serve a simulare per approssimazione un livello di dettaglio più alto.
"Prendiamo come esempio la statua del guerriero che si vede nel tempio: è fatta da otto pezzi (testa, torso, braccia, gambe, eccetera). Ogni pezzo ha le tre texture applicate (colore, metallo/imperfezioni e normal map per i graffi), così in totale abbiamo 24 texture a 8K per una sola statua.
Siccome il livello di dettaglio è legato al numero di pixel sullo schermo, non c'è più un confine netto, o un pop-in del dettaglio come succede oggi. Non ci saranno nemmeno quegli effetti di texture "in ebollizione" come capita su certi terreni in giochi quali Star Wars Battlefront (che comunque è un gran vedere ancora oggi). Inoltre, ora è possibile aumentare o diminuire la qualità degli oggetti in maniera decisamente molto più naturale. Insomma, questa tecnica a base di micro-poligoni riduce parecchio le risorse necessarie alla creazione di asset, visto che ora non è più necessario un intervento manuale nella rifinitura delle normal map e dei modelli generati con dettaglio minore. Quanto costi in termini di memoria caricare solo i modelli al massimo della definizione, però, non lo sappiamo.
Un altro punto importante è quello delle ombre, essenziali per inserire ogni dettaglio all'interno del mondo di gioco per un look realistico. È il motivo per cui i piccoli dettagli funzionano così bene in giochi come l'ultimo Call of Duty Modern Warfare, dove le shadow map standard hanno risoluzione troppo bassa per garantirne il realismo, al contrario del ray tracing che li prende in considerazione. Invece di continuare lungo la strada aperta dal ray tracing, la demo dell'UE5 su PlayStation 5 usa i riflessi screen-space come si fa nei giochi attuali per i dettagli più piccoli, e li combina con una shadow map virtualizzata.
"La finestra per effettuare i calcoli sulle superfici ed evitare artefatti nelle ombre è molto breve," spiega Brian Karis. "Si chiamano effetti Peter Pan, nel senso che le ombre non sembrano attaccate all'oggetto che dovrebbe generarle e sono leggermente spostate nella direzione opposta, tanto che alcune superfici iniziano a essere coperte dalla loro stessa ombra, magari a puntini o strisce. Evitiamo questi artefatti con il nostro filtro che sfrutta appunto una finestra molto breve per il tracciamento degli oggetti, oltre ad altri trucchetti."
"In realtà, il motivo per cui si vede un balzo così netto nella fedeltà dell'immagine è da ricercarsi nelle virtual shadow map. Si tratta di texture virtuali per le shadow map. Nanite ci permette di fare cose che prima erano impossibili, come per esempio il rendering di shadow map virtualizzate in modo molto efficiente. Scegliamo la risoluzione della virtual shadow map per ogni pixel così i texel hanno la dimensione di un pixel, più o meno, dandoci ombre nettissime. Così facendo abbiamo circa sedicimila shadow map per ogni luce nella demo, quando in passato arrivavamo al massimo a duemila. L'alta risoluzione è fantastica, ma vogliamo ombre morbide e credibili, così abbiamo preso il lavoro fatto sulle ombre generate dal ray tracing e l'abbiamo utilizzato per filtrare le shadow map e ottenere quelle belle sfumature d'ombra."
Eravamo anche molto curiosi di sapere come sono processate le geometrie. Forse Nanite usa un approccio completamente basato sul software (che funzionerebbe bene su diversi sistemi, incluse quelle GPU che non supportano le DirectX 12 Ultimate)? O magari Epic usa mesh shader (o primitive shader come li chiama Sony su PlayStation 5)? La risposta a questa domanda è interessante.
"La stragrande maggioranza dei triangoli è rasterizzata via software grazie a shader super ottimizzati e realizzati specificamente per sfruttare i vantaggi del nostro sistema," spiega Brian Karis. "Così facendo abbiamo potuto lasciarci alle spalle il rastering hardware. Sfruttare il software per compiti del genere è tra i punti forti di Nanite, ma non sempre può essere la soluzione quindi capita di passare al rastering hardware quando è più veloce. Su PlayStation 5 lo usiamo per i primitive shader, che sono decisamente più rapidi così che con il nostro vecchio processo per i vertex shader."
L'altra tecnologia fondamentale che ha debuttato nella prima demo dell'Unreal Engine 5 è Lumen, la risposta di Epic alla perenne ricerca di un'illuminazione globale in tempo reale. Lumen, praticamente, distribuisce la luce nella scena dopo che ha colpito per la prima volta una superficie, come una specie di ray tracing. Nella demo il sole colpisce una roccia, il sistema calcola come dovrebbero propagarsi i raggi e che tipo di colore dovrebbero avere. La demo dimostra come l'illuminazione in tempo reale possa radicalmente modificare una scena, tanto che c'è persino una sezione dedicata a mostrarcela con e senza l'effetto.
Oggi, la maggior parte dei giochi calcola in anticipo l'illuminazione globale approssimandola con un sistema chiamato light map, generato in anticipo e appiccicato nella scena via texture. Con questo sistema l'illuminazione è sì globale, ma immobile, e le luci e gli oggetti sono completamente statici. L'illuminazione è di fatto attaccata alle superfici degli oggetti in scena. Inoltre, questo light mapping funziona solo per le luci diffuse, quindi i riflessi (come quelli di metallo e acqua) devono essere generati in altre maniere.
Metro Exodus di 4A Games prova a trovare una soluzione con il ray tracing via accelerazione hardware, ma a un costo notevole come spesso succede ogni volta che si usa il ray tracing. Lumen è una versione più leggera e in tempo reale del light mapping di cui parlavamo, con aggiunte alcune tecniche di tracciamento per migliorare la qualità del risultato. Lumen calcola diversi rimbalzi della luce indiretta del sole nella demo, e fa lo stesso anche per la "torcia" della protagonista.
"Lumen usa il ray tracing per l'illuminazione indiretta, ma non il ray tracing basato sui triangoli", spiega Daniel Wright, technical director of graphics di Epic. "Lumen traccia i raggi su una rappresentazione della scena formata da voxel e campi di lunghezze e altezze, e così facendo non ha bisogno di hardware dedicato."
Per ottenere un'illuminazione globale completamente dinamica, Lumen segue una specifica gerarchia. "Lumen usa una combinazione di diverse tecniche per tracciare i raggi," continua Wright. "Lo screen-space tracing serve per i dettagli minori, distance fields servono per le luci di medio livello e i voxel tracciano luci su larga scala."
È questo mix a fare la differenza: per calcolare il rimbalzo delle luci su oggetti e superfici di grandi dimensioni mette da parte i triangoli in favore dei voxel, che sono rappresentazioni grossolane delle geometrie in scena. Per gli oggetti di medie dimensioni usa i distance field, che sono anch'essi rappresentazioni grossolane, per capirci. E da ultimo, i dettagli più piccoli sono tracciati via screen-space, un po' come succede nella demo di Gears of War 5 su Xbox Series X. Con questi diversi livelli di dettaglio, Lumen risparmia le risorse della GPU, se paragonato al ray tracing dei triangoli via hardware.
Un'altra tecnica fondamentale per mantenere le prestazioni è l'uso della temporal accumulation: il tracciamento dei movimenti della luce viene fatto da un frame all'altro. Per esempio, quando la luce si muove all'inizio della demo, se guardate attentamente potete vedere che la frequenza di aggiornamento della luce riflessa è inferiore a quella della luce diretta. Epic Games parla di rimbalzi infiniti, una tecnica per tenere la luce attaccata a una geometria nel tempo, un feedback loop che permette di avere molti rimbalzi di luce diffusa, ma col rischio di mostrare una certa latenza quando la luce si muove rapidamente.
Lumen è affascinante e la qualità dei risultati parla da sé, così come per Nanite, e abbiamo davvero apprezzato la trasparenza di questa tech demo. L'impatto è spiazzante, ma quando si va a scavare si inizia a capire come Epic sia riuscita a raggiungere questo livello di fedeltà. L'azienda è stata molto aperta nel raccontare i suoi metodi e da subito ha mostrato rendering in tempo reale anche evidenziando alcuni limiti prestazionali. È l'approccio migliore per un'azienda che sviluppa strumenti così cruciali per l'industria dei videogiochi, e non solo.
Anche la natura dell'Unreal Engine contribuisce però, non ci si può nascondere visto che tra poco il codice sorgente sarà completamente disponibile. Ci sono limitazioni innate in questa nuova tecnologia? Se è così lo scopriremo presto, magari anche prima del lancio, ma per ora sembra improbabile che Epic non raggiunga il risultato. Ricordiamoci di cosa stiamo parlando: l'Unreal Engine è uno strumento versatile che permette agli sviluppatori di creare praticamente ogni tipo di gioco, e questa flessibilità non può andare persa. Ciò detto, lasciarsi alle spalle le tecniche utilizzate per i modelli e passare ai Megascan non è un passo da poco, come è stato fatto notare.
Ovviamente, poi, mancano circa sei mesi all'uscita delle nuove console, mentre Unreal Engine 5 sarà disponibile solo nei primi mesi del 2021. Immaginiamo ci sia ancora un bel po' di lavoro da fare, anche se presto, dice Brian Karis, scopriremo più dettagli su Lumen, Nanite e la creazione della tech demo di UE5. Noi non vediamo l'ora.