Unreal Engine 4: come costruirsi il proprio videogioco
Con questo articolo vogliamo capire insieme a voi come funziona una tecnologia grafica evoluta come Unreal Engine 4. Andiamo a vedere tutti gli strumenti, le modalità di funzionamento e i risultati che è possibile ottenere con un SDK sempre più alla portata dell'utente comune. L'articolo è diviso in due parti: ci occuperemo prossimamente, infatti, di Matinee, Blueprint Visual Script, SpeedTree, PhysX e molto altro ancora.
di Rosario Grasso pubblicato il 24 Luglio 2015 nel canale VideogamesEpic
Engine Features
Il sistema di rendering usato da Unreal Engine 4 si basa su una pipeline DirectX 11 completamente nuova che include shading differito, illuminazione globale, traslucenze illuminate, post-processing e simulazione delle particelle tramite la GPU utilizzando campi vettoriali. A differenza di Unreal Engine 3, che usava la più abituale tecnica di forward-rendering, con Ue4 abbiamo un algoritmo di shading completamente diverso, appunto di tipo differito.
Mentre normalmente l'illuminazione viene calcolata durante il rendering della scena tridimensionale, l'algoritmo di shading differito va a considerare la natura di tutte le texture e applica l'illuminazione solo quando effettivamente necessario. L'illuminazione viene processata dopo aver considerato le proprietà dei materiali su una base per-pixel, con riflessioni che dunque tengono conto di tutti questi dati e della natura dei materiali.
Gli autori di videogiochi possono scegliere se usare un sistema completamente dinamico, uno completamente statico o uno ibrido e modificare tutta una serie di parametri relativamente a qualità, performance e mutabilità in-game. Gli effetti di traslucenza vengono illuminati e ombreggiati in un singolo passaggio in modo da garantire una corretta interconnessione con gli altri effetti di traslucenza che ci sono nella scena, il che non è possibile con le tecniche di rendering dell'illuminazione multi-passaggio.
Le traslucenze dell'Unreal Engine 4 possono proiettare ombre sul mondo, su sé stesse e anche su altre traslucenze. I materiali, inoltre, hanno adesso un nuovo modello di shading definito MLM_Subsurface, che sta alla base dell'effetto visivo conosciuto anche come Sub-Surface Shading. È pensato per quei materiali piuttosto opachi come la cera o la giada, ma non sufficientemente per non far filtrare la luce. Ue4 supporta poi la simulazione delle particelle tramite GPU, il che consente di gestire, renderizzare efficacemente e ombreggiare un numero di particelle nettamente più alto rispetto a quello che sarebbe in grado di gestire la sola CPU.
La cosa più interessante delle particelle gestite tramite GPU, a parte l'efficienza nel rendering, riguarda i campi vettoriali. Un campo vettoriale è una griglia uniforme di vettori che determina il moto delle particelle. Il motore considera i campi vettoriali alla stregua di attori, e per questo possono essere spostati, ruotati e ridimensionati come qualsiasi degli altri Actors. Nel momento in cui una particella si trova all'interno del campo vettoriale il suo moto è influenzato da quest'ultimo, ma quando fuoriesce dal campo svanisce.
Unreal Engine 4 mette a disposizione vari tipi di effetti in post-processing che consentono agli artisti e ai designer di modificare l'aspetto esteriore e il senso stesso delle scene. Abbiamo HDR blooming sugli oggetti luminosi, occlusione ambientale, tone mapping, e molti altri ancora.
L'implementazione standard dell'occlusione ambientale in Ue4 è del tipo SSAO (Screen Space Ambient Occlusion) e si basa unicamente sul depth buffer. Questo significa che le normal map o altre applicazioni di questo tipo non hanno nessun effetto sull'implementazione dell'occlusione ambientale.
L'effetto di Ambient Cubemap serve a gestire l'illuminazione dell'intera scena tramite una texture di tipo cubemap. Una cubemap è una texture non piana ma a forma di cubo e viene di solito utilizzata per descrivere l’ambiente circostante ad un oggetto, ad esempio per mostrare cosa l’oggetto riflette. Le cubemap di solito contengono una deformazione prospettica che permette di usare le sei facce del cubo come fossero una sfera. Questo sistema tiene in conto la posizione dell'osservatore, la rugosità dei materiali per gestire gli effetti speculari e il tipo di superficie del materiale.
L'effetto di Bloom si può verificare quando si guardano oggetti molto luminosi che si stagliano rispetto a uno sfondo più scuro. Più tali oggetti sono brillanti e più probabilità ci sono che vengano generati altri effetti, come lens flare. I monitor di oggi non supportano usualmente l'HDR e questo vuol dire che non possono visualizzare oggetti molto brillanti. Per questo in grafica tridimensionale bisogna simulare l'effetto di Bloom per come dovrebbe presentarsi all'occhio dello spettatore. Bloom potrebbe non essere sempre fisicamente accurato, ma aiuta lo spettatore a intuire il livello di luminosità emanato da certi oggetti.
Bloom Dirt Mask viene usato per estendere l'effetto di Bloom a vaste aree della telecamera e può essere utilizzato per simulare imperfezioni alla videocamera o per ricreare un effetto di HDR più spettacolare. Eye Adaptation è invece un altro effetto di simulazione con cui si cerca di restituire l'idea su ciò che avviene nel caso l'occhio umano si ritrovi a passare repentinamente da una condizione di illuminazione all'altra.
Tone Mapping permette di alterare la scena finale modificando i colori dei vari oggetti in essa presenti. Può essere usato per abilitare filtri come l'effetto seppia o effetti spettacolari come un lampo rosso.
Vignette, invece, riduce la luminosità dell'immagine man mano che ci si allontana dal centro.
Fra le tipologie di ombre gestibili in Unreal Engine 4 una fra le più difficili da elaborare è quella che viene individuata con il nome di Ray Traced Distance Field Soft Shadows. In questo caso si parte dal punto in cui l'ombra è applicata e si risale fino alla fonte di illuminazione. Per abilitare questo tipo di ombre bisogna recarsi nel menù Rendering e cercare la voce Generate Mesh Distance Fields.
Le ombre basate sul principio del Ray Tracing si oppongono alle più classiche ombre basate sul principo Cascaded Shadow Map, che vengono tipicamente utilizzate per determinare l'ombreggiatura dinamica generata da una luce direzionale. Le prime vengono utilizzate soprattutto per gestire l'ombreggiatura sulle lunghe distanze visto che svolgono il lavoro di ombreggiatura solo per i punti effettivamente visibili.