Ottimizzare Unreal Engine – Parte 2

Analisi delle performance e ottimizzazione di una scena in Unreal Engine – Parte 2

Software: Unreal Engine 4.19.2
Plug-in: RenderDoc (gratuito)
Hardware utilizzato: CPU Intel i7-6900K (8+8 core) | GPU GTX 1060 6GB

In questa seconda parte del tutorial impariamo come, una volta analizzato il problema, trovare una soluzione per risolverlo e quindi a migliorare le performance del nostro gioco.

Nella parte 1 del tutorial avevamo ottenuto i seguenti risultati:

  • Frame: 15.18 ms
  • Game: 1.76 ms
  • Draw: 0.09 ms
  • GPU: 15.17 ms

Uno dei problemi individuati erano le Planar Reflections utilizzate nella scena. Dopo una mirata ottimizzazione sulle Planar Reflections i nuovi risultati ottenuti sono i seguenti:

  • Frame: 11.44 ms
  • Game: 1.28 ms
  • Draw: 10.95 ms
  • GPU: 11.40 ms

Notiamo subito che il frame è cambiato da 15.18 ms (~ 66 FPS) a 11.44 ms (~ 87 FPS), il chè è un buon miglioramento. Prima di procedere all’ottimizzazione è bene spendere due parole sul valore di Draw.
Nella scena non ottimizzata il valore di Draw era di 0.09 ms (praticamente 0) mentre dopo l’ottimizzazione è salito fino a 10.95 ms. Perchè? Il valore di Draw tiene conto dei tempi di render della CPU; per ottimizzare la scena è stato introdotto un processo di Distance Culling nelle Planar Relfections che permette di non renderizzare elementi oltre una certa distanza. Tutti i processi di Culling (in Unreal ci sono principalmente quattro diversi tipi di culling) sono gestiti, e quindi calcolati, dalla CPU.

Veniamo ora a spiegare come sono state ottimizzate le Planar Reflections: si è agito esclusivamente dal pannello dei settaggi relativi al singolo elemento Planar Reflection. Di seguito potete vedere su che valori si è agito:

L’impatto maggiore è sicuramente dovuto a tre elementi:

  • togliere il check da Capture Every Frame, in questo modo il calcolo della riflessione non avviene in ogni frame ma solo quando l’utente si muove oppure quando avviene un movimento di oggetti che sono contenuti nell’immagine riflessa.
  • riduzione del valore di Screen Percentage da 50 a 10,quindi invece che renderizzare le riflessioni ad una risoluzione pari al 50% (default) della risoluzione del frame, vengono renderizzare ad una risoluzione pari al 10% di quella del frame.
  • valore di Max View Distance Override settato ad 800, calcola nella riflessione solo gli elementi entro la distanza che viene inserita in tale valore, in questo caso 800 (cm), ciò vuol dire che qualsiasi elemento oltre gli 8 metri non viene considerato nel calcolo.

Nell’immagine di destra vedete che fra i settaggi sono stati rimossi la maggior parte dei check sebbene molti degli elementi non fossero comunque presenti nella scena. Infatti elementi come Dynamic Shadows provenienti da alberi esterni all’ambiente se rimossi possono dare dei benefici.
Sotto potete confrontare la differenza nella qualità delle riflessioni sul piano dell’isola della cucina prima e dopo l’ottimizzazione.

Il tipo di ottimizzazione scelta in questo caso non è per forza la migliore o l’unica possibile. Questo tipo di processo dipende anche dall’obiettivo che si sta cercando di ottenere: se ad esempio si cerca la massima qualità oppure la migliore fluidità di gioco l’approccio può essere diverso.

Ad esempio se il nostro obiettivo è di avere la qualità massima possibile (sempre tenendo sott’occhio le performance) invece che cambiare i settaggi delle Planar Reflections indipendemente da dove ci si trova nella scena si potrebbe creare una Blueprint che permetta di sovrascrivere i settaggi. L’utilizzo delle Blueprint per quanto sia indubbiamente più lungo e laborioso torna utile nel caso in cui abbiamo bisogno di introdurre una scalabilità nel nostro progetto per poter controllare le performance a seconda dell’hardware su cui il gioco verrà usato.

Altrimenti si può semplicemente nascondere le Planar Reflections tramite volumi di trigger o le tracce (e quindi utilizzare le riflessioni di default in Unreal) a seconda della distanza tra noi e lo stesso oggetto Planar Reflection.
Nei casi in cui pur ottimizzando le Planar Reflection le nostre performance non sono ancora ottimali possiamo rimuovere completamente le Planar Reflections ed utilizzare solo le Sphere Captures. Nel test presentato in questo tutorial ha portato ad un ulteriore miglioramento di circa 4 ms nel valore di GPU, la qualità però ne risente notevolmente come è possibile vedere nella seguente immagine.

In questo tutorial non c’è purtroppo il tempo di trattare tutte queste soluzioni alternative per cui vi invitiamo ad unirvi a noi nel prossimo corso di Unreal Engine per approfondire assieme ottimizzazioni e molto altro.

Al prossimo tutorial,
Enrico

Per scoprire tutti i segreti di Unreal Engine, unisciti a noi nel prossimo corso disponibile.

 

Lascia un commento

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.