Com2uS utilise Vulkan pour de meilleurs graphismes

Capture d'écran du logo du titre du jeu de Com2uS Chronicles.

Summoners War: Chronicles US(WW) et KR de Com2uS utilise exclusivement Vulkan pour le rendu sur Android, avec un gain de performances allant jusqu'à 30 %.

Vulkan est une API graphique 3D multiplate-forme moderne conçue pour minimiser l'abstraction entre le matériel graphique de l'appareil et votre jeu. Vulkan présente des frais généraux de processeur inférieurs à ceux d'OpenGL ES et offre un plus grand nombre de fonctionnalités.

Figure 1. Capture d'écran du jeu.
Figure 2 Vidéo de jeu.

Fonctionnalités de rendu

Com2uS a développé des fonctionnalités de rendu avancées pour Summoners War: Chronicles, y compris les suivantes:

  • Système de rendu différé personnalisé avec suppression de la lumière avant le rendu et jusqu'à seize lumières actives dans le frustum de vue simultanément
  • Méthode d'instanciation de rendu indirect (appelée Clay) pour dessiner plusieurs maillages, matériaux et textures à la fois
  • Utilisation intensive de nuanceurs de calcul pour les tâches de pré-rendu
  • Possibilité d'ajuster de manière dynamique le rendu des ombres actives et les effets de post-traitement en fonction du mouvement de la caméra, des options graphiques et des performances d'exécution

Adaptations matérielles pour les appareils mobiles

Summoners War: Chronicles utilise le même moteur de rendu pour les appareils Android, les ordinateurs personnels et les consoles de jeu dédiées. Pour obtenir des performances optimales sur le matériel mobile, Com2uS a affiné les paramètres de rendu, y compris la profondeur et la densité de dessin. Pour prendre en charge certains appareils exécutant Android 11 (niveau d'API 30) ou version antérieure, Com2uS a créé des versions alternatives de certains nuanceurs et a utilisé un nombre d'instances réduit. Summoners War: Chronicles utilise également les fonctionnalités de performances adaptatives sur Android pour ajuster dynamiquement les options graphiques en fonction des conditions thermiques de l'appareil.

Justification pour Vulkan uniquement

Com2uS a utilisé Vulkan exclusivement pour Summoners War: Chronicles pour plusieurs raisons:

  • La configuration matérielle minimale requise excluait les appareils plus anciens et moins puissants qui ne sont pas compatibles avec Vulkan.
  • Personnalisation des fonctionnalités requises du pipeline de rendu intégré (BiRP) du moteur Unity uniquement disponibles dans le backend Vulkan du jeu
  • L'implémentation de fonctionnalités de rendu utilisant la sortie de nuanceur de calcul et les objets de tampon de stockage de nuanceur (SSBO) peut être effectuée sur Vulkan, mais pas sur OpenGL ES.

Charges de travail de calcul

Summoners War: Chronicles effectue un travail important avec les nuanceurs de calcul pour produire des données de rendu. Les nuanceurs de calcul sont utilisés pour:

  • Élimination d'objets
  • Inspection de collision
  • Tâches d'animation
  • Génération de données de rendu indirect

Les données de calcul résultantes sont écrites dans les objets RWBuffer du moteur Unity. Pour obtenir des performances optimales, Summoners War: Chronicles exécute toutes ses tâches de calcul avec une seule distribution, ce qui nécessite l'utilisation de plusieurs RWBuffers simultanément. Cette approche n'était possible qu'avec Vulkan, car le backend OpenGL ES BiRP d'Unity n'accepte que l'utilisation d'un seul RWBuffer à la fois.

Les ensembles de données générés pour le rendu sont souvent plus volumineux que les limites de taille de l'appareil pour les objets de tampon uniforme (UBOs). Summoners War: Chronicles utilise plutôt des objets de tampon de stockage de nuanceurs (SSBOs), qui ont des limites de capacité plus élevées. Toutefois, la liaison des SSBO aux opérations de l'étape de vertex nécessite la prise en charge des SSBO en lecture seule. OpenGL ES n'est compatible qu'avec les SSBO en lecture-écriture, tandis que Vulkan peut marquer les SSBO en lecture seule.

Rendu instancié indirect avec Clay

Pour Summoners War: Chronicles, Com2uS a développé une méthode permettant de regrouper plusieurs matériaux, maillages et textures dans un seul appel de dessin. Com2uS appelle ce système Clay. Clay améliore les performances de jeu de 30% grâce à une réduction significative des appels de dessin.

Clay commence pendant la phase d'élagage et de collision en créant une liste d'objets compatibles visibles et pouvant être affichés. Clay génère ensuite des informations de rendu pour chaque objet identifié dans des SSBO. Ce processus est effectué avec des nuanceurs de calcul, qui permettent d'utiliser le rendu instancié indirect à l'aide de la fonction DrawMeshInstancedIndirect du renduur Unity. Avec le rendu indirect, les informations sur les instances et les paramètres de nombre d'instances sont générés directement sur le GPU. Lorsque vous dessinez des objets, au lieu de lier un maillage d'objet traditionnel, Clay lie un maillage de cône, comme illustré ci-dessous:

Figure 3. Maillage en cône.

Clay transforme ensuite le maillage du cône dans le nuanceur de sommet à l'aide d'un SSBO lié de données de transformation de sommet générées par les nuanceurs de calcul. L'association de SSBO à l'étape de vertex nécessite l'utilisation de Vulkan. Clay peut utiliser plusieurs cônes transformés pour afficher un seul objet. La complexité de l'objet détermine le nombre de cônes.

Figure 4. Comment le maillage de cône est transformé en arbre.

Les données de matériau des objets sont groupées dans un autre tampon généré par les nuanceurs de calcul. Le tampon est lié au nuanceur de fragments. Les textures des objets dessinés sont configurées dans un tableau de textures. Les indices de tableau des textures d'un objet sont inclus dans les données de matériau de l'objet. Dans l'idéal, Clay peut effectuer un rendu avec sept appels de dessin au maximum:

  • Objets statiques
  • Objets animés
  • Ombres (quatre itérations)
  • Humeur

Unity et Vulkan

Summoners War: Chronicles montre que la combinaison puissante du moteur de jeu Unity et de l'API graphique Vulkan permet aux développeurs de proposer des graphismes de qualité console avancés sur les appareils Android.