Cos’ha il Real-time di diverso e perché se ne parla tanto?

Architettura, cinema, prodotto e design: in qualunque campo in cui si faccia uso della computer grafica, la tecnologia del rendering in real time sta diventando sempre piú adottata. Ma cosa significa real time? Potrà sostituire il rendering tradizionale?

Architettura, cinema, prodotto e design: in qualunque campo in cui si faccia uso della computer grafica, la tecnologia del rendering in real time sta diventando sempre piú adottata, dando vita a nuove tecniche che cambiano persino pipeline consolidate e stabilite da tempo. Il software che piú fa parlare di sé in questo ambito sembra essere Unreal Engine, che a giorni alterni compare su titoli di notizie o di articoli dedicati. Ma cosa significa render in real time? Che cosa puó realmente fare, e come si differenzia dal rendering tradizionale? E, soprattutto, in cosa non puó sostituire quest’ultimo?
Sono Filippo Romani, freelancer CG artist ed insegnante del modulo di Unreal a Skyup Academy e se vi state ponendo anche solo una di queste domande, questo articolo é per voi.

Un frame da “Reflection tech demo”, realizzato da Epic in occasione della prima dimostrazione del raytracing in real time all’interno di Unreal Engine 4

Cosa significa real-time

Immaginiamoci due arcieri. Il primo é un perfezionista e prima di tirare si prende tutto il tempo che gli serve per valutare la direzione del vento, la sua velocitá, il moto parabolico della freccia, tutto in relazione alla distanza dal bersaglio. Solo allora scocca, e con grande precisione centra il suo bersaglio. Il secondo arciere non si preoccupa molto di calcolare tutto, é infatti piú interessato a colpire quante piú volte possibile il bersaglio che a farlo con precisione. Fa quindi un’analisi approssimativa della situazione e tira un gran numero di frecce molto velocemente. Se il bersaglio é lontano e richiede una grande precisione, il secondo arciere probabilmente fallirá, mentre il primo colpirá il centro. Ma per la maggioranza dei casi, cioé quelli in cui il bersaglio é piú vicino, il secondo arciere lo colpirá con molte piú frecce molto piú velocemente, mentre il primo se ne stará a calcolare tutto il necessario perdendo tempo.

Come avrete forse capito, il primo arciere é un algoritmo di rendering tradizionale (lo troviamo in VRay, Arnold, Cycles, Renderman, ecc.) mentre il secondo é un algoritmo che permette di renderizzare in real time (Unreal, Unity, Cryengine, ecc.). Dico “permette” riferendomi all’algoritmo perché real time non significa altro che questo: un gran numero di render in pochissimo tempo. Nello specifico parliamo di un’immagine, o frame, al secondo, o 60 al secondo, o 120 al secondo. Se prendessimo un motore di rendering come Vray e lo facessimo calcolare ad un supercomputer dalla potenza infinita, anche Vray si potrebbe definire “real time”.

La stessa scena renderizzata in real time (a sinistra, Unreal) e tramite rendering tradizionale (a destra, Octane), mostrata da Otoy in occasione dell’integrazione di Octane in Unreal.

Il concetto di real time non é nulla di nuovo in grafica 3D, anzi. Probabilmente ne siete stati anche consumatori molte volte in passato, dal momento che se avete giocato ad un qualunque videogioco che presentasse una grafica tridimensionale, avete visto il rendering in real time in azione. Non é un caso che Unreal engine richiami il nome di una celebre serie di giochi che alcuni di voi ricorderanno, Unreal tournament, e ne porti pure il logo: il primo Unreal engine fu sviluppato proprio per il primo Unreal tournament. Quando? I lavori iniziarono nel lontano 1995 e il gioco venne rilasciato nel 1998. Quindi, tecnicamente, Unreal engine é un software piú vecchio di Maya.

Perché allora se ne sente parlare cosí tanto solo oggi, e solo oggi comincia ad essere utilizzato al di fuori del mondo videoludico? Facciamo un breve salto indietro nel tempo, perché come sempre bisogna sapere da dove si viene per comprendere dove si é e dove si sta andando.

Il primo Unreal Engine, nel lontano 1998. Un miracolo grafico ai tempi.

Breve storia di Unreal e dell’adozione del real-time

É il 2009. Avatar esce nelle sale, e tutti ci lustriamo gli occhi ammirando l’impressionante livello di fotorealismo alla quale Hollywood é riuscita ad arrivare. Al contempo, Playstation 3 di Sony e Xbox360 di Microsoft non sono ancora a metá del loro ciclo vitale (che terminerà nel 2013 con l’uscita di Playstation 4 e Xbox one) e Uncharted 2 viene incoronato come game of the year e lascia sbalorditi per il dettaglio grafico che riesce a raggiungere. Per darvi un’idea, ecco due frame tratti dalle due opere:

Avatar (2009)
Uncharted 2: Among thieves (2009)

Non serve essere grandi esperti di CG per notare la differenza grafica tra i due. E se anche già allora aveste avuto il desiderio di renderizzare la casa del vostro cliente in real time, buona fortuna a trovare un engine la cui licenza non vi costasse milioni di dollari. Unreal engine 3 non era disponibile al pubblico (se non sottoforma di UDK, Unreal Development Kit, che imponeva peró alcune limitazioni), Unity esisteva da appena 4 anni ed era ancora troppo acerbo, ed entrambi non erano abbastanza potenti per permettere ad un team di una sola persona (o di poche persone) di avvicinarsi alla qualitá grafica anche solo di Naughty Dog, figuriamoci al fotorealismo. Semplicemente il rendering in real time era favoloso se visto con un controller in mano, ma avrebbe lasciato l’amaro in bocca se inserito in un contesto fotorealistico.

Facciamo un salto in avanti, al 2015: al premio di game of the year concorrono The Witcher 3, Fallout 4, Bloodborne, Metal gear V, agli Oscar abbiamo pellicole come Il pianeta delle scimmie, Guardians of the galaxy, Interstellar… Confrontando la qualitá grafica dei due media a quel tempo, notiamo ancora una notevole discrepanza che li divide. Nel 2015 succede peró anche un’altra cosa importante: Unreal Engine 4 diventa gratuito. Nella nostra storia per comprendere il real time e la sua adozione in molti campi al di fuori dei videogiochi, questo é un momento estremamente importante. Una persona in particolare, koooolalala (questo il suo nome su youtube) realizza pochi, semplici shot architettonici utilizzando Unreal. Quello che nessuno si aspettava era la resa visiva che questi shot riuscivano a presentare.

Alcuni frame presi dai video di koola.

Fu una piccola rivoluzione, sufficiente a far capire a tutti (Epic games, l’azienda che sviluppa Unreal, compresa) che la grafica raster era oramai in grado di raggiungere il fotorealismo

Dal 2017, anno in cui ho cominciato ad utilzzare Unreal Engine, ad oggi, Epic ha sviluppato moltissimo il suo motore di rendering per accomodare tutti i campi che stanno adottando il real time. L’esempio piú recente é l’incredibile lavoro svolto con Weta Digital sul corto di animazione “Meekat”, dove sono state messe alla prova numerose tecnologie sperimentali come il real time fur in un ambiente di produzione reale.

Come funziona il rendering in real-time

Ora che sappiamo da dove viene, possiamo finalmente rispondere alle domande “ma come funziona il rendering in real time? E dov’é la fregatura?”

Sappiamo che nulla é veramente gratis in questo mondo (tranne Blender), e sebbene renderizzare 60 frame al secondo può sembrare il sogno di qualunque render artist, farlo non é cosí semplice e diretto. Tanto per cominciare, c’é una parola chiave che non viene mai nominata abbastanza per quanto mi riguarda: ottimizzazione

I nostri pc non sono diventati improvvisamente delle astronavi e gli sviluppatori di Unreal (mi hanno detto) non utilizzano magia nera per realizzare il loro software di rendering. Pertanto ogni scena che vedete girare in real time ha un numero di poligoni contati (dimenticate quindi subdiv o turbosmooth a manetta sui vostri modelli), texture pensate per essere quanto piú leggere possibili (niente modelli con texture in 8k e multi-udim) e si impiegano una serie di tecniche per ottenere risultati di alta qualitá risparmiando dove possibile (LODs, istanze, luce precalcolata per dirne alcuni).

Pochi poligoni, LOD, bake… Ció che permette al real time di essere tale é alla base un lavoro di ottimizzazione di tutto ció che va in scena (The last of us, Naughty dog (2013). Immagine presa da Polycount)

L’arciere che abbiamo citato ad inizio articolo ci illustra poi la seconda “fregatura”, se cosí vogliamo chiamarla: per tirare molte frecce in poco tempo deve saltare tutti i calcoli accurati che l’altro arciere fa. Per ottenere un buon risultato e colpire comunque il bersaglio, deve quindi approssimare. Traducendo questo in un contesto grafico non avremo quindi luci dinamiche e morbide allo stesso tempo, o una illuminazione globale dinamica minimamente accurata, i riflessi dovranno essere finti con cubemaps, effetti come la rifrazione o il subsurface scattering saranno poco piú di effetti visivi che altro, e certe cose, come le simulazioni della fisica dei tessuti, non potranno essere impiegate per cose molto piú complesse di bandiere o oggetti penzolanti. Nonostante tutto questo peró ricordate che i lavori che vedete su artstation, sui forum o sui gruppi facebook sono comunque reali, e si possono ottenere risultati strabilianti in real time, ma solo con una solida conoscenza di base del software e di come funziona. Se le approssimazioni possono essere limitanti infatti, le si puó anche sfruttare per lavorare creativamente ed ottenere in altri modi il risultato che desideriamo, dal momento che abbiamo molto piú controllo sull’output visivo rispetto al render tradizionale. Basta conoscere le opzioni a nostra disposizione.

Il futuro del real-time

Cosa riserva il futuro di questa tecnologia? Il passo fondamentale probabilmente lo fará ancora una volta Epic games con Unreal Engine 5, prossimo ad uscire. Secondo quanto promesso in questo video, potremo caricare in scena miliardi di poligoni, avere un’illuminazione globale dinamica in tempo reale, cioé senza bisogno di precalcoli come é ora, e numerose features ora sperimentali che saranno implementate come “production ready”. L’obiettivo di Epic sembra essere abbattere le limitazioni di Unreal engine per renderlo utilizzabile in contesti in cui il numero di frame al secondo é di minore importanza rispetto alla qualitá visiva. Questo, combinato alle tecnologie di Nvidia e AMD per ottenere il raytracing in real-time (un argomento per un’altra volta) permetterá di avvicinare sempre di più il rendering real-time al rendering tradizionale.

“Lumen in the land of Nanite” é il titolo della tech demo sviluppata da Epic su Unreal Engine 5. Miliardi di poligoni in scena contemporaneamente, illuminazione globale in real time, nuovo sistema di fisica ed FX… Sull’hardware di una Playstation 5. Un miracolo grafico, come 23 anni fa.

Il rendering in real time sembra quindi essere il futuro della computer grafica. Certo, perché diventi il presente ci vorrá ancora un po’di tempo, e su molte cose ancora non puó tenere testa al rendering tradizionale, ma in molti ne hanno giá compreso le potenzialitá e l’utilitá. Del resto, un video di 5 minuti che impiega 5 minuti a renderizzare, a chi non farebbe gola?

 

Filippo Romani

Ti interessa Skyup Academy?

Registrazione confermata!