Materiali e tonalità

Segui queste best practice per ottimizzare l'uso di materiali e mesh nel tuo gioco Android.

I materiali e gli ombreggiatori sono gli elementi fondamentali dell'arte 3D moderna. I giochi 3D che funzionano bene sul maggior numero di dispositivi iniziano con la grafica 3D, progettata per sfruttare al meglio i processori grafici. Questa guida evidenzia le ottimizzazioni e le best practice per i materiali e gli handle per i dispositivi mobili al fine di migliorare le prestazioni del tuo gioco e ridurre al minimo il consumo energetico.

Alcune parti di questo articolo si basano sull'opera realizzata e protetta da copyright di Arm Limited.

Shader ottimizzati per dispositivi mobili del motore di gioco

I motori di gioco si differenziano per il modo in cui associano i materiali e gli handle. Il motore Unity può creare più tonalità, ma a ogni materiale può essere assegnato un solo ombreggiatore. Unreal Engine 4 può applicare diversi Shader a un materiale in base alla piattaforma di destinazione.

Per una definizione di "shaker" e "materiali", consulta le best practice per i materiali e i materiali per gli artisti.

Se usi un motore di gioco come Unity o Unreal Engine 4, usa gli Shader integrati progettati per l'hardware mobile. Questi ombreggiatori contengono implementazioni semplificate delle funzionalità per migliorare le prestazioni sui dispositivi mobili. Se possibile, disattiva le funzionalità che non utilizzi durante la configurazione dei materiali. Queste funzionalità possono essere, ad esempio, la colorazione dei colori o le mappe dettagliate. La disabilitazione delle funzionalità inutilizzate consente al motore di ometterle dal programma Shadr finale, con conseguente miglioramento delle prestazioni.

Unity

Unity include più motori di rendering. Per i giochi mobile moderni, l'opzione migliore è l'Universal Render Pipeline (URP). L'URP include un set standard di Shader che scala automaticamente la complessità a seconda della piattaforma di destinazione. Il renderer Unity legacy include una raccolta di mesh di dati progettati per le piattaforme mobile. Questi mesh sono raggruppati nella categoria Dispositivi mobili.

Unreal Engine 4

Unreal Engine sceglierà uno Shader mobile in base alla piattaforma di destinazione selezionata. L'output visivo degli Shader per dispositivi mobili può essere diverso da quello degli shardr predefiniti del Modello 5. Puoi modificare il livello di rendering dell'anteprima nell'editor Unreal per simulare l'output del rendering degli mesh per dispositivi mobili. Nonostante alcune differenze, Unreal utilizza lo stesso processo per i materiali su tutte le piattaforme, pertanto gli Shader per dispositivi mobili in genere hanno immagini e comportamenti simili a quelli predefiniti.

Impostazione del rendering dell'anteprima per dispositivi mobili nell'editor Unreal
Figura 1. Imposta il rendering dell'anteprima per dispositivi mobili nell'editor Unreal.

Riduci al minimo i campionamenti delle texture

I giochi destinati ai dispositivi mobili dovrebbero utilizzare il minor numero di texture possibile nei loro materiali. Ogni texture aggiunta richiede un ulteriore campionamento delle texture, che consuma larghezza di banda della memoria e aumenta il consumo energetico. Unreal Engine 4 consiglia un massimo di cinque texture di materiale durante l'esecuzione sui dispositivi mobili. Anche cinque campionatori di texture possono essere proibitivi per l'uso diffuso su molti dispositivi. Ecco alcune strategie per ridurre al minimo il numero dei campionamenti delle texture:

  • Utilizza il pacchettizzazione delle texture per combinare texture monocanale. Per ulteriori informazioni su questa tecnica, consulta la guida Texture.
  • Sostituisci i dati dei parametri come rugosità o metallico con una costante numerica anziché essere letti da una texture.
  • Utilizza gli oscuratori non illuminati o un semplice modello di illuminazione, in modo da omettere le texture necessarie per supportare i calcoli dell'illuminazione in modelli di illuminazione più complicati.

Disattiva l'illuminazione quando possibile

Illuminato e non illuminato è un divario comune tra gli ombrelli e i materiali. L'illuminazione in tempo reale richiede calcoli aggiuntivi nello ombreggiatore. A seconda del tipo di sistema di illuminazione implementato, potrebbero essere necessarie texture di materiale, che utilizzano più spazio di memoria e larghezza di banda. Per i giochi mobile, in particolare quelli che scelgono come target hardware meno potente, ridurre al minimo l'uso dell'illuminazione in tempo reale è importante per ottenere prestazioni ottimali. Dovresti valutare la possibilità di progettare la tua direzione artistica intorno a progetti che funzionino bene in assenza di un'illuminazione in tempo reale, ad esempio immagini stilizzate o dei cartoni animati.

Un confronto di un modello visualizzato con e senza illuminazione
Figura 2. Un esempio di modello visualizzato con illuminazione in tempo reale (a sinistra) e senza illuminazione in tempo reale (a destra).

Ridurre al minimo l'uso della trasparenza

Se possibile, utilizza materiali opachi. Il rendering di un oggetto in trasparenza è sempre più costoso di un oggetto opaco equivalente. Il design dell'hardware per la grafica mobile rende la trasparenza più costosa di rendering rispetto all'hardware grafico per computer o console per videogiochi. La presenza di molti oggetti trasparenti nel gioco, soprattutto se visualizzati uno sopra l'altro, influisce negativamente sul rendimento.

Disegnare più volte sullo stesso pixel è un problema noto come overdraw. Evita di sovrapporre più livelli di trasparenza. Molti giochi dispongono di strumenti di diagnostica che consentono di visualizzare il overdraw e di individuarlo ed eliminarlo. Usa questi strumenti per migliorare le prestazioni del tuo gioco e identificare le aree problematiche che riducono la frequenza frame.

Esempio dello strumento di visualizzazione overdraw nell'editor Unity
Figura 3. Un esempio dello strumento di visualizzazione overdraw nell'editor Unity.
Esempio dello strumento di visualizzazione overdraw nell'editor Unreal
Figura 4. Un esempio dello strumento di visualizzazione overdraw nell'editor Unreal.

Utilizzare il metodo alpha appropriato

I metodi più comuni per l'implementazione della trasparenza sono la combinazione alfa e l'alpha test.

Gli alpha test faranno sembrare il materiale dell'oggetto 100% opaco o 100% trasparente. Puoi configurare la soglia del valore alfa per questo limite. In Unity questo tipo di trasparenza è chiamato Cutout. In Unreal Engine 4 è chiamata modalità di fusione Masked.

La combinazione alfa consente al materiale dell'oggetto di avere un intervallo di trasparenza e può far sembrare un oggetto parzialmente trasparente. Unity chiama questo tipo di trasparenza Trasparente. In Unreal Engine 4 è chiamata modalità di fusione Translucent.

Confronto tra combinazione tra alpha e alpha test
Figura 5. Un'immagine di esempio (a sinistra) visualizzata utilizzando la combinazione alfa (al centro) e l'alpha test (a destra).

In genere, la combinazione Alpha ottiene un aspetto visivo superiore rispetto agli alpha test. Tuttavia, per alcuni tipi di mesh, come il fogliame, la combinazione alfa può sembrare strana quando la mesh viene visualizzata in movimento. Ciò è causato dalla percezione che le foglie e i rami vengono visualizzati nell'ordine sbagliato. L'alpha test riduce al minimo questo effetto, a discapito di aliasing e di bordi taglienti su foglie e rami.

La combinazione Alpha e l'alpha test possono richiedere un periodo di tempo diverso per il rendering dello stesso mesh. Per i mesh in cui una delle due modalità genera un output visivo accettabile, dovresti eseguire il benchmark per vedere se un metodo ha un rendimento migliore dell'altro.

Complessità dello strumento di identificazione del profilo

Le funzionalità di rendering, come i campionamenti delle texture, l'illuminazione e la trasparenza, si aggiungono alla complessità dello scheduler e ne riducono le prestazioni. Puoi usare gli strumenti integrati nei motori di gioco, nonché gli strumenti grafici esterni, per valutare la complessità del tuo scalatore.

Unreal Engine 4 include una modalità di visualizzazione Complessità dell'ombreggiatura che fornisce stime dei costi per gli oggetti nella scena.

La modalità di visualizzazione Complessità dell'ombreggiatura nell'editor Unreal
Figura 6. La modalità di visualizzazione Complessità dell'ombreggiatura nell'editor Unreale.

Inoltre, puoi utilizzare la funzionalità Statistiche sui materiali di Unreal per profilare il costo dei materiali man mano che li crei.

Le statistiche sul materiale vengono visualizzate nell'editor Unreal
Figura 7. Le statistiche materiali vengono visualizzate nell'editor Unreal.

Calcola in Vertex Shader

I calcoli di Shader del rendering in genere sono suddivisi tra Vertex Shader e uno Shaker di Frammenti (noto anche come pixel). Il numero di frammenti sottoposti a rendering di solito è maggiore del numero di vertici. Se in Vertex Shader è possibile eseguire un calcolo costoso, questo verrà eseguito con minore frequenza rispetto a quando

Tuttavia, se questi dati vengono consumati dallo Shader frammenti, devono essere trasmessi da Vertex Shader. Se la quantità di dati da trasferire è eccessiva, l'esecuzione dei calcoli nello strumento di identificazione dei frammenti potrebbe offrire prestazioni più elevate. Puoi utilizzare gli strumenti di profilazione per valutare l'utilizzo dei riquadri in modo da determinare la posizione ottimale dello mesh per un insieme di calcoli. Unreal Engine 4 dispone di una funzionalità UV personalizzati che può essere d'aiuto per questa profilazione.

Evita costose operazioni matematiche

Le operazioni matematiche vengono utilizzate nei programmi Shader per controllare il comportamento e l'aspetto dell'output dello Shader. Le operazioni comuni includono aritmetica di base, potenza, livello minimo, logaritmo e così via. I costi di calcolo delle operazioni matematiche sono diversi. Uno shardr che esegue operazioni costose sarà più lento, soprattutto sui dispositivi meno recenti. Esempi di operazioni relativamente economiche includono:

  • Aggiunta
  • Sottrazione
  • Moltiplicazione

Le operazioni più costose includono:

  • Divisione
  • Trascendenti (sin, cos, power, log, tan)

Profilo spesso il rendimento

I colli di bottiglia del rendimento potrebbero non essere sempre evidenti. Evita di presumere dove si trovano le tue aree problematiche e utilizza strumenti di profilazione per valutare le prestazioni di rendering. Assicurati di eseguire prima e dopo i test con qualsiasi ottimizzazione per valutarne con precisione l'impatto.