Com2uS utilizza Vulkan per migliorare la grafica

Screenshot del logo del titolo del gioco da Com2uS Chronicles.

Summoners War: Chronicles US(WW) e KR di Com2uS utilizzano esclusivamente Vulkan per il rendering su Android, con miglioramenti delle prestazioni fino al 30%.

Vulkan è una moderna API grafica 3D multipiattaforma progettata per ridurre al minimo l'astrazione tra l'hardware grafico del dispositivo e il tuo gioco. Vulkan ha un overhead della CPU inferiore rispetto a OpenGL ES e offre una gamma più ampia di funzionalità.

Figura 1. Screenshot in gioco.
Figura 2. Video in-game.

Funzionalità di rendering

Com2uS ha sviluppato funzionalità di rendering avanzate per Summoners War: Chronicles, tra cui:

  • Sistema di rendering differito personalizzato con light culling di pre-rendering e fino a sedici luci attive nel view frustum contemporaneamente
  • Metodo di istanza di rendering indiretto (chiamato Clay) per disegnare molti mesh, materiali e texture contemporaneamente
  • Ampio uso di mesh di computing per le attività di pre-rendering
  • Possibilità di regolare dinamicamente il rendering delle ombre e gli effetti di post-elaborazione in base al movimento della videocamera, alle opzioni grafiche e alle prestazioni di runtime

Sistemazione hardware mobile

Summoners War: Chronicles utilizza lo stesso renderer per dispositivi Android, personal computer e console per videogiochi dedicate. Per ottenere prestazioni ottimali sull'hardware mobile, le impostazioni di rendering ottimizzate di Com2uS, tra cui profondità e densità di disegno, Per supportare determinati dispositivi con Android 11 (livello API 30) e versioni precedenti, Com2uS ha creato versioni alternative di alcuni shabbyr e utilizzato un numero ridotto di istanze. Summoners War: Chronicles utilizza anche le funzionalità di prestazioni adattive su Android per regolare dinamicamente le opzioni grafiche in base alle condizioni termiche del dispositivo.

Motivazione solo per Vulkan

Com2uS ha utilizzato Vulkan esclusivamente per Summoners War: Chronicles per diversi motivi:

  • I requisiti minimi dei dispositivi hanno escluso i dispositivi meno recenti e meno potenti privi di supporto Vulkan
  • Personalizzazione del motore Unity Funzionalità richieste per la pipeline di rendering integrata (BiRP) disponibili solo nel backend Vulkan del gioco
  • L'implementazione di funzionalità di rendering tramite l'output di computing dello Shader e gli oggetti del buffer di archiviazione (SSBO) può essere eseguita su Vulkan, ma non su OpenGL.

Carichi di lavoro di computing

Summoners War: Chronicles esegue un notevole lavoro di threatr di computing per la produzione dei dati per il rendering. Gli Shaker di calcolo sono utilizzati per:

  • Eliminazione degli oggetti
  • Ispezione delle collisioni
  • Attività di animazione
  • Generazione dei dati di rendering indiretto

I dati di computing risultanti vengono scritti negli oggetti RWBuffer di Unity Engine. Per ottenere prestazioni ottimali, Summoners War: Chronicles esegue tutti i suoi job di calcolo con un singolo invio, il che richiede l'utilizzo di più RWBuffer contemporaneamente. Questo approccio è stato possibile utilizzando Vulkan, poiché il backend Unity BiRP OpenID ES supporta solo l'uso di un singolo RWBuffer alla volta.

I set di dati generati per il rendering sono spesso superiori ai limiti delle dimensioni del dispositivo per gli oggetti UBO (Uniform buffer Object). Summoners War: Chronicles utilizza invece Shader Storage buffer Object (SSBO), che hanno limiti di capacità maggiori. Tuttavia, l'associazione di SSBO a operazioni di fase Vertex richiede il supporto SSBO di sola lettura. OpenGL ES supporta solo SSBO di lettura/scrittura, mentre Vulkan può contrassegnare gli SSBO come sola lettura.

Rendering indiretto di istanze con Clay

Per Summoners War: Chronicles, Com2uS ha sviluppato un metodo per raggruppare più materiali, mesh e trame in un'unica chiamata di disegno. Com2uS fa riferimento a questo sistema come Clay. Clay migliora le prestazioni di gioco del 30% grazie alla riduzione significativa delle chiamate di estrazione.

L'argilla inizia durante la fase di eliminazione e collisione creando un elenco di oggetti di rendering visibili compatibili. Clay genera quindi le informazioni di rendering per ogni oggetto identificato negli SSBO. Questo processo viene eseguito con gli Shader di calcolo, che consentono l'utilizzo del rendering indiretto con istanza mediante la funzione DrawMeshInstancedIndirect di Unity. Con il rendering indiretto, le informazioni sulle istanze e i parametri di conteggio delle istanze vengono generati direttamente sulla GPU. Quando si disegna oggetti, invece di associare un mesh di oggetti tradizionale, l'argilla lega una rete conica come mostrato in figura:

Figura 3. Una maglia conica.

Clay trasforma quindi il mesh di coni nello Shadr Vertex utilizzando un SSBO associato di dati di trasformazione dei vertici generati dagli shardr di calcolo. Per associare gli SSBO alla fase del vertice è necessario usare Vulkan. Clay può usare più coni trasformati per il rendering di un singolo oggetto. La complessità dell'oggetto determina il numero di coni.

Figura 4. Come si trasforma la rete conica in albero.

I dati materiali per gli oggetti vengono raggruppati in un altro buffer generato dagli Shader di computing. Il buffer è associato allo Shader dei frammenti. Le texture degli oggetti disegnati sono configurate in un array di texture. Gli indici array per le texture di un oggetto sono inclusi nei dati materiali dell'oggetto. In circostanze ideali, Clay può eseguire il rendering con un massimo di sette chiamate di disegno:

  • Oggetti statici
  • Oggetti animati
  • Ombre (quattro iterazioni)
  • Stati d'animo

Unity più Vulkan

Summoners War: Chronicles dimostra che la potente combinazione del motore grafico Unity e dell'API grafica Vulkan consente agli sviluppatori di aggiungere grafica di qualità della console avanzata ai dispositivi Android.