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 illustra le ottimizzazioni e le best practice per le risorse 3D sui dispositivi mobili al fine di migliorare le prestazioni del tuo gioco e ridurre al minimo il consumo energetico.
Definizione della geometria
La geometria, o mesh poligonali, è una raccolta di vertici, bordi e facce che formano un oggetto tridimensionale. Può essere un'auto, un'arma, un ambiente, un personaggio o una risorsa visiva di un gioco.
Figura 1. I vertici, gli spigoli e i triangoli di un cubo.
La geometria è composta dalle seguenti parti:
Vertici:il nome plurale del vertice. Questi punti definiscono la struttura di un oggetto nello spazio 3D.
Edge:due vertici collegati da una linea retta.
Triangolo: tre vertici collegati tra loro da tre lati creano un triangolo. Talvolta è definito poligono o faccia. Nei software 3D come 3ds Max, Maya o Frullatore, in genere si lavora con i quad. I quad sono un poligono a quattro lati ed è più facile da modificare e utilizzare. Una volta visualizzati, i poligoni vengono visualizzati sullo schermo come triangoli.
Consulta le seguenti sezioni per scoprire di più sulla geometria:
Utilizzo di triangolo e poligoni
La sezione illustra le best practice per l'uso di triangoli e poligoni. Sono inclusi i seguenti consigli:
- Ridurre il numero di triangoli
- Utilizzare i triangoli nelle aree importanti
- Rimuovere i microtriangoli
- Evita triangoli lunghi e sottili
Riduci il numero di triangoli
Se includi troppi triangoli, le prestazioni del gioco ne risentiranno.
Utilizza il minor numero possibile di triangoli. Ti consigliamo di utilizzarne solo il giusto per ottenere la qualità desiderata. Considera l'impatto sulle prestazioni quando crei contenuti per un gioco mobile. È costoso elaborare i vertici. Minore è il numero di vertici, migliore sarà il rendimento complessivo del gioco. Inoltre, minore è il numero di triangoli utilizzati, maggiore è il numero di dispositivi su cui è possibile eseguire il gioco senza una potente GPU.
L'immagine seguente mostra che puoi mantenere la qualità con meno triangoli:
Figura 2. Confronto di due oggetti con conteggi di triangoli diversi che hanno lo stesso aspetto in modalità ombreggiata. Nell'oggetto a sinistra sono stati rimossi i bordi che non contribuiscono alla silhouette.
Sulle piattaforme per dispositivi mobili, il numero massimo comune di vertici per un singolo mesh è pari a 65.535. Per garantire la massima compatibilità, devi rimanere al di sotto di questo numero.
Il motivo di questo limite è che tutte le GPU garantiscono il supporto solo per indici a 16 bit, che possono rappresentare un intervallo da 0 a 65.535 vertici. La maggior parte delle GPU moderne supporta indici a 32 bit, che rappresentano un intervallo da 0 a 4.294.967.295 vertici. Se superi l'intervallo supportato quando utilizzi indici a 16 bit, la geometria risulta mancante o visualizzata in modo errato.
Visualizza e testa sempre il gioco su tutti i dispositivi su cui intendi rilasciarlo anziché sul monitor di un PC. Alcuni modelli con un livello di dettaglio elevato potrebbero non essere visualizzati correttamente o addirittura non essere visibili su un dispositivo mobile.
Ti consigliamo di utilizzare più triangoli sugli oggetti in primo piano e meno oggetti sullo sfondo. Ciò è più utile per i giochi con un punto di vista della videocamera statico (POV). L'esempio seguente mostra un utilizzo appropriato dei dettagli in oggetti diversi.
Figura 3. Questo esempio mostra l'elevato livello di dettaglio degli oggetti in primo piano rispetto agli oggetti sullo sfondo.
Il numero massimo di triangoli da utilizzare per un modello varia in base al dispositivo e ai contenuti. Se sullo schermo sono visualizzati più oggetti, utilizza meno triangoli per ciascun modello. Se sono visualizzati solo due o tre oggetti, questi possono includere più triangoli.
L'esempio seguente mostra due modelli di demo diverse. La demo di Circuit VR ha un solo personaggio robot. Poiché c'è un solo oggetto, il modello robot ha un conteggio di triangoli più alto. L'altro modello è quello della demo dell'esercito. Questa demo ha centinaia di soldati in ogni frame, quindi ogni soldato ha meno triangoli.
Figura 4. Confronto del numero di triangolari per due diversi casi d'uso. A sinistra, il robot CircuitVR ha 11.000 triangoli. A destra, il Soldato dell'esercito ha 360 triangoli.
Esempio di utilizzo dei triangoli
La figura che segue è un esempio di numero di triangoli utilizzati nella demo tecnologica dell'esercito.
Nella demo di Armies, ovvero una demo di tecnologia mobile a 64 bit realizzata in Unity, la videocamera è statica e contiene molti personaggi animati. In totale, ogni frame esegue circa 210.000 triangoli. Questo conteggio consente di eseguire la demo in modo stabile a circa 30 frame al secondo (f/s).
Figura 5. Rendering di esempio della demo tecnologica di The Armies che mostra il numero di triangoli utilizzati.
Gli oggetti più grandi nella scena, le torri di cannoni, sono circa 3000 triangoli perché occupano una grande porzione dello schermo.
I caratteri utilizzano circa 360 triangoli ciascuno. Poiché ce ne sono così tanti e sono visibili solo da lontano, non usano molti triangoli. Dalla sagoma della videocamera, sembrano adatti.
Figura 6. Vista dei soldati a triangolo basso nella demo tecnologica dell'esercito.
Utilizza i triangoli nelle aree importanti
I vertici sono molto costosi sulle piattaforme mobili. Per evitare sprechi del budget di elaborazione, posiziona i vertici nelle aree che contribuiscono alla qualità visiva del gioco. Piccoli dettagli su un oggetto 3D potrebbero non essere visibili sulla schermata finale del gioco. I piccoli dettagli potrebbero essere impossibili da vedere a causa delle dimensioni ridotte degli schermi e del posizionamento degli oggetti 3D.
Invece dei piccoli dettagli, concentrati sulle forme grandi che contribuiscono alla silhouette. L'immagine seguente è un esempio di messa a fuoco sulla silhouette:
Figura 7. La linea rossa intorno al robot rappresenta la sua sagoma.
Ti consigliamo di usare meno triangoli in aree non inquadrate molto spesso dal punto di vista della fotocamera. Ad esempio, la parte inferiore di un'auto o il retro di un guardaroba. Se una parte di un oggetto non verrà mai rilevata, elimina quella parte dell'oggetto.
L'eliminazione di una parte di un oggetto deve essere eseguita con cautela e potrebbe limitare la riusabilità dell'oggetto. Ad esempio, se elimini la parte inferiore di un mesh di tabelle, l'utente noterà la sezione eliminata se la tabella viene posizionata al contrario.
Non modellare i piccoli dettagli con mesh triangolari ad alta densità. Usa texture e mappe normali per ottenere più dettagli. L'esempio seguente mostra lo stesso mesh con e senza una mappa normale.
Figura 8. Confronto di un modello con e senza una mappa normale applicata.
Rimuovi i microtriangoli
I microtriangoli sono piccoli triangoli che non contribuiscono alle immagini finali di una scena.
Tutti gli oggetti 3D con numero elevato di poligoni presentano problemi di microtriangoli quando vengono allontanati dalla fotocamera. Non esiste una definizione standard del settore per i micro triangoli, ma in genere i microtriangoli sono intesi come triangoli di dimensioni inferiori a 1-10 pixel nell'immagine finale. I microtriangoli sono pessimi perché la GPU deve elaborare tutti i triangoli, anche se non contribuiscono all'immagine finale.
I microtriangoli sono causati da due fattori:
- Dettagli troppo piccoli e costituiti da molti triangoli.
- Oggetti più lontani dalla fotocamera con tanti triangoli.
Figura 9. Effetto della distanza sui microtriangoli.
Nella Figura 9, il robot in primo piano non presenta microtriangoli. Il robot in background lo fa, perché ogni triangolo ha una dimensione di soli 1-10 pixel.
Figura 10. Confronto di microtriangoli su modelli altamente dettagliati. La maggior parte dei triangoli nell'area evidenziata è troppo piccola per essere visualizzata sugli schermi dei telefoni.
Per un oggetto più lontano dalla fotocamera, utilizza il livello di dettaglio (LOD). Questo riduce la complessità di un oggetto e lo rende più semplice. Il risultato è un oggetto meno denso di triangoli.
Non modellare i dettagli con molti triangoli. Usa texture e mappe normali per questo tipo di dettaglio. Puoi unire vertici e dettagli dei triangoli che sono troppo piccoli e non contribuiscono all'immagine finale.
È importante ridurre il numero di microtriangoli perché possono influire sulla larghezza di banda della memoria. Più triangoli generano più dati inviati alla GPU. Su un dispositivo mobile, questa impostazione può influire sulla durata della batteria. Un maggiore consumo di energia può causare una limitazione termica, che limita le prestazioni massime della GPU.
Evita triangoli lunghi e sottili
Si tratta di triangoli che, quando vengono visualizzati nell'immagine finale, hanno dimensioni inferiori a 10 pixel e si estendono su tutto lo schermo. I triangoli lunghi e sottili sono generalmente più costosi da elaborare rispetto agli altri.
Nell'immagine seguente, la smussatura sul pilastro, vista da lontano, presenta un triangolo lungo e sottile. Queste smussature non sono un problema se viste da vicino.
Figura 11. La smussatura sul pilastro è un triangolo lungo e sottile.
Ti consigliamo di rimuovere i triangoli lunghi e sottili da tutti gli oggetti, se possibile.
Nel caso di oggetti lucidi, triangoli lunghi e sottili potrebbero causare uno sfarfallio della luce durante il movimento della videocamera. LOD può aiutarti a rimuovere i triangoli lunghi e sottili quando un oggetto è lontano dalla fotocamera.
Se possibile, cerca di mantenere tutti i triangoli vicini all'equilatero. In questo modo i triangoli avranno più area e meno bordi. I triangoli lunghi e sottili hanno un rendimento peggio rispetto ai triangoli più grandi in generale. Per saperne di più sull'area del triangolo, leggi la pagina Triangolare.
Livello di dettaglio
Il livello di dettaglio (LOD) è una tecnica che riduce la complessità man mano che gli oggetti si allontanano dal visualizzatore. La forma più comune di LOD prevede più versioni di un mesh, con un numero progressivamente inferiore di vertici. Il LOD non solo riduce il numero di vertici da elaborare, ma evita anche il problema dei microtriangoli. Inoltre, ha un aspetto migliore per gli oggetti che si trovano più lontano nella scena.
Ti consigliamo di utilizzare il livello di dettaglio ogni volta che puoi. Concentrati sulla sagoma dell'oggetto. È meglio concentrarsi sulle aree piatte da scegliere come target per la riduzione del vertice. L'immagine seguente mostra l'utilizzo del LOD applicato al modello di robot.
Figura 12. Confronto del numero di vertici utilizzati come modifiche al livello di dettaglio.
Nella Figura 12 è difficile vedere la differenza tra lo stesso oggetto, che è composto da 200 triangoli o da 2000 triangoli distanti. Un oggetto con più triangoli comporta un costo elevato per le risorse ma non ne migliora l'aspetto se visualizzato da lontano.
Figura 13. Confronto di modelli distanti con conteggi di triangoli diversi.
Il livello di dettaglio (LOD) può essere applicato anche alla complessità e alla risoluzione delle texture. Con un livello di dettaglio inferiore, è possibile utilizzare materiali diversi con Shader più semplici e meno texture. Devi inoltre assicurarti che le texture abbiano delle mipmap, in modo che agli oggetti lontani vengano applicati livelli di texture con una risoluzione più bassa. Queste misure miglioreranno il rendimento, ma devi comunque aumentare le dimensioni dei dati.
Il livello di carica non è consigliato per i giochi in cui la fotocamera e gli oggetti sono statici. Il maggiore vantaggio del livello di dettaglio è che gli oggetti che si avvicinano e si allontanano dalla videocamera. Gli oggetti statici non si spostano, quindi non c'è alcun vantaggio per il livello di dettaglio.
Figura 14. Una scena con una videocamera statica della demo tecnologica dell'esercito che non usa LOD.
Proporzioni del tempo di visualizzazione (LOD)
Utilizza un rapporto coerente quando riduci il numero di triangoli per il livello di dettaglio. Ti consigliamo di ridurre i triangoli del 50% per ogni livello.
Non utilizzare il livello di dettaglio su oggetti semplici. Gli oggetti già con un numero ridotto di triangolari non beneficiano del livello di dettaglio. L'esempio seguente, tratto dalla demo tecnologica di The Armies, mostra l'aspetto del gioco con un'immagine statica e oggetti triangolari bassi.
Figura 15. Confronto tra i modelli alla diminuzione del LOD.
Verifica che i livelli del livello di dettaglio cambino alle corrette distanze dalla videocamera. Basa la tua analisi sul modo in cui vengono utilizzati nel gioco.
Figura 16. Confronto tra l'aspetto di un modello LOD 3 in primo piano e alla distanza prevista.
Non c'è un numero fisso di quanto LOD sia ragionevole per un oggetto. Dipende dalle dimensioni dell'oggetto e da quanto è importante. Ad esempio, un personaggio di un gioco d'azione o un'auto in un gioco di corse potrebbe avere più livelli LOD rispetto a piccoli oggetti sullo sfondo, come un albero.
Tieni presente che un LOD eccessivo costa le risorse della CPU. È necessaria una maggiore potenza di elaborazione per consentire alla CPU di decidere quale LOD visualizzare. I LOD costano anche la memoria, che aumenta le dimensioni dei file e l'utilizzo della VRAM. Inoltre, la creazione e la verifica dei modelli LOD richiede più tempo.
Esistono due modi per creare mesh LOD: manualmente e automaticamente.
- Puoi creare manualmente mesh LOD con qualsiasi software 3D.
- Per farlo, rimuovi i loop di spigoli o riduci il numero di vertici dell'oggetto 3D.
- In questo modo, l'artista ha il massimo controllo sul prodotto finale, ma potrebbe richiedere più tempo.
- I mesh LOD possono essere creati automaticamente.
- Puoi utilizzare un modificatore all'interno di un pacchetto 3D, come ProOptimizer, in 3ds Max o Genera mesh LOD all'interno di Maya.
- Puoi utilizzare software per la generazione di LOD come Simplygon o InstaLOD.
- Alcuni motori di gioco dispongono di una funzionalità di generazione automatica dei LOD che consente di creare e applicare mesh LOD.
Best practice
Esistono ulteriori tecniche per ridurre le risorse necessarie al gioco e mantenere anche la fedeltà grafica.
Gruppi di arrotondamento o normali vertici personalizzate
Utilizza i gruppi di arrotondamento o le normali normali del vertice personalizzate per definire la durezza di un bordo e modificare l'aspetto di un modello. Un gruppo di levigatura consente di creare ombreggiature migliori in una direzione artistica low poly. Un gruppo di levigatura influisce anche sulla suddivisione delle isole UV e sulla qualità delle normali mappe durante la cottura.
Figura 17. Confronto di un modello con e senza un gruppo di livellamento.
Se implementi un gruppo di livellamento su un modello 3D, questo deve essere esportato dal software 3D e importato nel motore.
Topologia mesh
Quando crei un nuovo asset 3D, assicurati che abbia una topologia ordinata. Una topologia chiara è essenziale per i personaggi e altri oggetti che si animano e cambiano. La topologia non deve essere necessariamente perfetta. Tieni presente che gli utenti finali non vedranno il Wireframe e che texture e materiali avranno un maggiore impatto sull'aspetto del modello.
Figura 18. La topologia, il reticolo e la versione finale di una roccia della demo tecnologica di armies.
Esagerazione delle forme
Puoi esagerare alcune forme per rendere i tuoi modelli più facili da interpretare. Dipende molto dal tipo e dallo stile del gioco. Poiché gli schermi dei dispositivi mobili sono piccoli, può essere difficile riuscire a tracciare certe forme molto piccole. L'esagerazione di queste forme può aiutare gli utenti a vederla anche da lontano.
Ad esempio, puoi creare personaggi con mani più grandi in modo che siano più facili da vedere.
Figura 19. Un modello di esempio che mostra proporzioni esagerate per una migliore visibilità.