PS5 e Unreal Engine 5: cosa cambia tra rendering in-engine e real time?

PS5 e Unreal Engine 5: cosa cambia tra rendering in-engine e real time?
di

Il mondo della grafica 3D fatica a trovare terminologie e definizioni univoche, e spesso ogni software house, motore grafico o casa di produzione usa le proprie denominazioni per indicare specifiche situazioni di rendering.

Si genera così molta confusione, e non è sempre facile leggere e interpretare le dichiarazioni dei team si sviluppo: tra un "gira in real time" e una inspiegabile negatività nei confronti delle scene "scriptate", spesso nelle discussioni scoppia il caos. Proviamo allora a fare chiarezza su questi termini, specificando meglio cosa significano parole come in-engine, pre-renderizzato, real time. E, visto che ci siamo, parliamo anche dei Bullshot.

Che significa real time?

Quella di real time è una definizione un po' insidiosa, perché può variare molto in base agli ambienti di utilizzo. Si intende real time un flusso video generato, appunto, in tempo reale, calcolato fisicamente dall'hardware nel momento in cui il flusso video viene mostrato. Solitamente (ma non è strettamente necessario), è possibile che il software garantisca un certo grado di interattività, per esempio lasciando al giocatore la possibilità di esplorare l'ambiente, di muovere un avatar o anche solo la telecamera. In verità non si tratta di un requisito strettamente necessario: l'hardware può calcolare in tempo reale anche una sequenza che non prevede interazione, ma ovviamente la possibilità di interagire aggiunge più forza all'idea che il flusso video venga calcolato in quello specifico momento. Un video non real time riproduce invece una sequenza di frame calcolati in precedenza, una serie di istantanee ferme nel tempo e non modificabili dal giocatore.

Qualche appunto anche sulla fluidità: un fattore importante per valutare l'impatto e l'efficacia del rendering in real time. Soprattutto quando si guarda un software particolarmente "pesante" sul fronte della mole poligonale, del dettaglio o degli effetti speciali e di illuminazione, la difficoltà per l'hardware sta tutta nel calcolare e generare, secondo per secondo, tutti i frame che servono per rendere il flusso video fluido e appagante. Nei videogiochi lo standard minimo sono i 30 frame per secondo. Quando si scende a 15-20 fps il flusso video viene percepito come "scattoso". Questo perché l'occhio umano identifica una sequenza di immagini come "fluida" solo quando il frame rate supera stabilmente i 20-24 fps. Più basso è il frame rate, per altro, minore sarà la reattività ai comandi del giocatore, e peggiore diventerà quindi l'esperienza di gioco. Un frame rate più elevato non è solo visivamente più appagante, ma fondamentale anche per ottenere la migliore esperienza dal punto di vista ludico.

Come dicevamo, la difficoltà che un hardware potrebbe incontrare, calcolando un flusso video in real time, è quella di generare, appunto, 30 o più fotogrammi nello spazio di un secondo. Significa che per ognuno di questi fotogrammi il motore di rendering deve idealmente calcolare le geometrie dei poligoni, gli effetti di luce, le interazioni fisiche, e poi generare un'immagine sulla base di queste informazioni. Un hardware che non calcola il video in tempo reale potrebbe invece avere tutto il tempo del mondo: anche un'intera settimana per generare un singolo frame (servirebbero quindi 30 settimane per un secondo di video a 30fps). È esattamente quello che succede per i film in computer grafica, per esempio.

Se in qualche videogioco vedere una cut-scene in cui viene utilizzata una versione base dell'avatar, che non tiene conto di eventuali modifiche estetiche che avete apportato al modello, quello potrebbe essere un indizio del fatto che la scena non è calcolata in tempo reale, ma che è stata renderizzata in precedenza. Ricordate comunque che anche un flusso video a 5 frame per secondo, se interattivo e liberamente esplorabile, è a tutti gli effetti generato in real time.

Cosa significa che il filmato è realizzato in-engine?

"In Engine" significa che il video è stato renderizzato (il termine grafico per indicare i calcoli che portano alla generazione di un'immagine) utilizzando il motore grafico del gioco.

In linea di massima un motore grafico per videogiochi è pensato per essere abbastanza snello e veloce da generare almeno 30 frame al secondo, perché appunto i prodotti dovranno poi essere utilizzati in tempo reale dagli utenti. Per ottenere questo risultato deve però scendere ad un certo numero di compromessi, sia dal punto di vista della complessità grafica che della risoluzione.

Se il motore grafico non viene utilizzato "sul momento", ma viene sfruttato invece come strumento per generare un video, si ricade nella casistica accennata sopra: l'engine può impiegare anche ore per generare un singolo frame, e non deve quindi limitare le sue capacità. I singoli frame, calcolati spingendo al massimo sul fronte degli effetti, dell'illuminazione, delle texture, verranno poi inseriti in un'unica sequenza per generare il video.

Dati i progressi in termini di qualità dei motori grafici (si pensi appunto ad Unreal Engine 4.3) sempre più spesso i team di sviluppo decidono di usarli, spinti al massimo delle loro capacità, per generare trailer o cut scene: si alza al massimo la risoluzione, si spinge al massimo la qualità di anti-aliasing, ombre, riflessi, motion blur, sfocatura di campo, e si lancia il motore di gioco. Il frame rate può scendere anche ad 1 frame al secondo, ma in questo scenario non sarà un problema: ogni frame sarà infatti salvato su hard disk e poi unito a tutti gli altri per creare un filmato "renderizzato in-engine".

"In engine" significa insomma che shader, modelli e animazioni sono tutti gestiti dal motore del gioco, ma non è automatico che quando il motore dovrà calcolare il video in tempo reale sia possibile mantenere la stessa qualità. Se si realizza un trailer per la "next gen" con questa tecnica di solito è per mostrare la visione del team per il futuro della loro produzione, per evidenziare la direzione artistica e dare un assaggio della capacità del motore grafico.

Un giorno, tra migliorie ai motori grafici e avanzamenti dell'hardware, quella stessa scena potrà magari girare in "real time", ma non è detto che possa farlo nel momento dell'uscita del gioco.

Cosa è un Bullshot?

Il concetto di bullshot non è molto distante da quello di "in-engine" e si riferisce agli screenshot di un gioco, di solito diffusi dalle software house. Queste immagini sono tratte dal gioco, ma vengono migliorate in post produzione, ad esempio, alzando al massimo la qualità dell'anti-alising, delle texture o del motion blur.

Il termine ha assunto una connotazione negativa in quanto, pur riferendosi ad immagini realizzate a scopo promozionale, queste vengono spesso vengono distribuite senza nessuna specifica, facendo credere che il gioco "sia proprio come nello screenshot", quando in realtà poi risoluzione o anti-aliasing reali saranno molto inferiori.

Cosa si intende per scriptato?

Per scriptate si intendono situazioni di gioco che procedono in automatico, innescate magari da una precisa azione del giocatore, e che seguono appunto uno script: un "copione". Scriptate sono tutte le cut-scene di un gioco, scriptata può essere la reazione di un nemico ad un pugno del giocatore. Anche durante il rendering in real time di un videogioco si verificano continuamente azioni "scriptate", e in qualche caso è pure facile individuarle: ad esempio, se lo script che gestisce una specifica animazione è solo uno, allora quest'ultima si ripeterà in modo identico ogni volta che il giocatore la attiverà.

Scripato e real time sono due definizioni che non hanno nessuna relazione l'una con l'altra. Chiaramente un video non realizzato in real time sarà integralmente scriptato, in quanto seguirà un copione predefinito, ma non è assolutamente vero il contrario: ci sono sequenze "automatizzate" che vengono calcolate sul momento dall'engine, e il fatto che la scena sia scriptata non toglie nulla all'eventuale eccellenza tecnica di un engine che riesce a renderizzarla in tempo reale.

Quanto è interessante?
11