Lunediscord #2: Death Stranding, prima parte

Alla GDC 2018 (Game Developers Conference), NVIDIA annunciò finalmente RTX. Tecnologia per il ray tracing nei videogiochi, mette a disposizione degli sviluppatori il rendering di livello cinematografico in tempo reale. Ed è stato divertente osservare come tutti i profili social dei più blasonati game engine non proprietari furono inondati da post inerenti al ray tracing, che ne garantivano il supporto immediato. A tale vista ogni sviluppatore minimamente abituato a utilizzare un motore di rendering in real time, avrà sicuramente provato un piccolo moto di derisione, dati i mille problemi molto più pratici che son soliti affliggere tali piattaforme da tempo immemore. Ma tutto ciò era inevitabile visto il clamore mediatico che tale tecnologia stava avendo da qualche tempo e che continua ad avere tutt’ora. Sul web sono ricercatissimi i video di Minecraft o di Battlefield con attivo il ray tracing, e nelle ultime settimane tale argomento è tornato alla ribalta con la conferma del suo supporto da parte di PS5.

Il ray tracing sembra essere la tecnologia del momento, l’ago della bilancia sulla scelta della scheda video da acquistare. Un’innovazione incredibile che tutti noi stavamo aspettando. Di sicuro lo è, ma se vi dicessi che le sue radici affondano già negli anni ’80? Che ormai da tempo sistemi di render offline, come Renderman della Pixar e gli stessi game engine in parte, supportano tale tecnologia? Partiamo dalle basi…

La luce al giorno d’oggi

Prendiamo ad esempio Unity, una delle piattoforme per lo sviluppo videoludico non proprietaria più diffusa al mondo. Tale ambiente permette agli sviluppatori di gestire l’illuminazione ambientale attraverso due principali tecniche, ovvero realtime lighting e baked lightmaps. La prima gestisce l’illuminazione diretta in tempo reale, ovvero il comportamento del materiale e dell’ombra di un oggetto 3D colpito direttamente da una fonte luminosa. Questa fonte può essere:

Non sono minuzie da sviluppatori...

Ognuna di queste luci presenti in scena, se gestita solamente attraverso il realtime lighting, fornisce agli oggetti e ai materiali le sole informazioni dirette, come intensità, colore, raggio, inclinazione eccetera. Dirette significa che non viene tenuto conto del comportamento fisico della luce, ovvero il fatto che i fotoni rimbalzino tra una superficie e l’altra, cambiando così ogni volta direzione, colore e intensità. E questo cosa significa? Significa che se un bicchiere viene appoggiato sopra a un tavolo di colore rosso, anche il bicchiere prenderà un leggera sfumatura di rosso, nonostante il materiale sia di vetro trasparente. Senza queste informazioni, che sembrano minuzie ma che in realtà non lo sono, non si potrebbe mai avere una resa fotorealistica. Il problema è che il calcolo dell’effettivo comportamento fisico della luce in tempo reale è(era) impossibile, poiché richiede(va) troppa potenza di calcolo. Come fare allora? Utilizzando le baked lightmaps.

Esempio di ray tracing nei videogiochi attraverso l'operazione di baking.
L’immagine più a sinistra mostra il risulato di un render senza la procedura di baking. E’ possibile notare come l’immagine sia completamente irreale, priva di contesto e profondità. Ma se si aggiungono le lightmaps prodotte dal baking il risultato cambia radicalmente.

Attraverso la procedura di baking, è possibile calcolare l’effettivo comportamento fisico della luce, indicando quali luci e oggetti coinvolgere. Ovviamente questa procedura non avviene in realtime, ma è precalcolata. Come per il rendering offline (il redering cinematografico per intenderci), l’operazione di baking impiega diverso tempo, durante il quale lo sviluppatore di turno può tranquillamente giocare a QuakeJS online, senza che il proprio capo gli possa dire alcunché. Una volta conclusasi la procedura, vengono generate delle mappe di luce, contenenti riflessi, sfumature e ombre, le quali verranno renderizzate in realtime sopra le texture dei vari oggetti. Ciò permette di aumentare di molto la qualità e il fotorealismo dell’intera scena.

Una mera questione di potenza

Ma se la procedura di baking già precalcola il comportamento esatto della luce, a che diamine serve il ray tracing? Come accennato sopra, l’algoritmo di calcolo del percorso fatto dalla luce, seguendone i raggi attraverso l’interazione con le superfici, è da tempo in mano agli sviluppatori. Da anni ormai le produzioni cinematografiche ne fanno ampio utilizzo, e anche i videogiochi non sono da meno. O quasi. Sì, perchè purtroppo la procedura di baking funziona solamente per gli oggetti statici, ovvero per l’environment privo di qualsiasi animazione. Se per esempio il nostro personaggio cammina sopra ad una pozzanghera, essa non potrà riflettere naturalmente il nostro aspetto (a meno di qualche barbatrucco dei programmatori).

Questo perché il nostro personaggio non è statico e non può essere incluso nel baking. Ed è proprio qui che si infila il ray tracing in tempo reale. Gli algoritmi di ray tracing nei videogiochi, ottimizzati per funzionare in real time, calcolano frame dopo frame la riflessione, la rifrazione e l’ombra che i raggi di luce generano quando colpiscono un oggetto, seguendone l’intero percorso, sia statico che in movimento. Questo per tutte le luci e per tutti gli oggetti in scena, sessanta volte al secondo. Dunque era solamente una questione di tempo. Tempo per permettere ai produttori di schede video di costruire architetture abbastanza potenti, in grado di processare quell’immane mole di calcoli, aiutate ovviamente da driver e algoritmi appositamente ottimizzati per il real time. Come è successo per la Realtà Virtuale.

Gli algoritmi di ray tracing calcolano la riflessione, la rifrazione e l'ombra che i raggi di luce generano quando colpiscono un oggetto, sia statico che in movimento

L’elemento che tutto lega

Con l’avvento del ray tracing in tempo reale nei videogiochi, la luce sta avendo finalmente la considerazione che gli spetta di diritto. Siamo sempre stati attenti alla qualità dei modelli e delle texture, delle animazioni e dei sistemi particellari, ma è la luce che lega il tutto per donare all’ambiente l’atmosfera desiderata. E’ la luce a rendere i materiali e le texture brillanti o opache; è la luce che, insinuandosi nelle piccole pieghe e cavità, esalta la definizione dei modelli. Non ce ne siamo forse mai accorti, ma essa è sempre stata lì ad emozionarci, a volte diventando essa stessa protagonista indiscussa. Pensate ad Inside per esempio. Durante il gioco, un occhio attento noterà subito che la qualità dei modelli e delle texture è molto buona, ma nulla a che vedere con una produzione AAA. Molti dei materiali sono privi di texture e i modelli dell’environment risultanto abbastanza squadrati.

La luce ha un incredibile potere emotivo...

Eppure è graficamente un gioco eccelso, che riesce a emozionarci come pochi. Questo perchè l’illuminazione da sola esalta tutti i componenti grafici, creando paesaggi dal fortissimo impatto emotivo. Come la cupa penombra del bosco nel quale silenti ci nascondiano, squarciata solamente dai fari luminosi della jeep dei nostri inseguitori. Le lunghe ombre degli schiavi deambulanti, che a ritmo di marcia si stagliano rigide tra un edificio e l’altro. Il bianco chiarore sfumato che dall’alto ci invita a raggiungerlo, per uscire dall’oscura pozza d’acqua nella quale ci siamo immersi così profondamente. Inside è un ottimo esempio di come la luce abbia avuto da sempre un incredibile potere emotivo, senza necessariamente dover scomodare complessi algoritmi di simulazione e potenze di calcolo di livello Titan. Ora, con l’arrivo del ray tracing nei videogiochi, essa non conoscerà più alcun confine. Maggiormente consapevoli della sua importanza, prepariamoci dunque a un luminoso rinascimento videoludico.

Screenshot del gioco Inside