Cette conférence a présenté les aspects techniques du travail des équipes de Star Citizen autour du passage à la Gen 12 et l'API Vulkan. Cette transition est nécessaire pour exploiter au mieux la technologie, et préserver des performances maximales malgré la complexification du jeu.
Introduction
Ali Brown présente les grandes lignes du travail de son équipe.
Méthode actuelle
A l'heure actuelle, les "meshes" (ensemble des polygones constituant les surfaces des objets à afficher) sont transmises au programme de rendu (le "renderer"), indifféremment de leur nature (transparente, opaque ou première ligne). Le programme doit ensuite les déchiffrer, les trier, et les interpréter avant de les afficher sur l'écran du joueur. Ce processus est gourmand en ressources et peu optimisé.
Gen 12
Avec la dernière génération, le moteur 3D communique en temps réel avec le renderer, ce qui soulage ce dernier, les meshes sont interprétés selon leur nature, puis transmises au code en arrière plan qui exécute plusieurs commandes simples avant l'affichage.
Gloablement, la Gen 12 doit permettre des avancées majeures comme l'exécution du code en multi-thread pour résoudre une grande partie des problèmes de goulot d'étranglement au niveau du CPU et du GPU. Avec ce changement, davantage d'informations seront transmises au joueur afin qu'il puisse identifier les problèmes de chute de performances.
Architecture
Christopher Bolte explique le renouvellement de l'architecture permettant l'usage de plusieurs cœurs graphiques. L'idée principale est que jusqu’à aujourd'hui, les différentes tâches étaient affectées à un unique thread, si l'un d'eux venait à terminer sa tâche avant l'autre, il créé un vide d'activité qui pourrait être comblé par d'autres tâches et donc optimiser le temps entre deux images. C'est ce que permet l'exécution multithread. Le thread principal prépare les éléments de code à exécuter, et peut les répartir entre lui-même ou le thread de rendu en fonction des ressources disponibles. De plus, leur implémentation permet à la phase d'exécution du code du driver d'interpréter les éléments transmis, ce qui optimise encore un peu plus le temps de calcul entre deux images.
Ce principe d'équilibrage des tâches entre les cœurs se nomme parallélisme. CIG a d'abord travaillé sur le parallélisme CPU avant de commencer le parallélisme GPU.
Vulkan
Vulkan est une API graphique, une interface qui interprète et traite des données côté développeur, indépendamment du driver du joueur, avant de les renvoyer au joueur. Vulkan participe à l'éradication des goulots d'étranglement au même titre que le changement d'architecture. Aujourd'hui, 98% des joueurs peuvent utiliser Vulkan.
Render Graph
Le render graph est un programme permettant de créer les images à une certaine fréquence avant leur traitement par la carte graphique, il se charge de valider toutes les informations de l'image avant affichage, et ce, en une seule instance, ce qui réduit le temps de travail. Son implémentation avec Vulkan permettra d'optimiser et soulager le travail du GPU.
Groupes de pixels
Le rate shading permet de rendre les pixels par groupe, plutôt qu'un par un pour les éléments les moins détaillés afin d'économiser de la ressource
Mémoire
Avec Vulkan, la mémoire vidéo peut être contrôlée en temps réel par les développeurs et par le joueur. Il pourra être limité et les fuites de mémoire seront plus souvent évitées. De nombreuses options seront disponibles pour les joueurs grâce à ce changement.
RoadMap
L'architecture est en place et la transition vers le nouveau système va pouvoir commencer dans cet ordre:
- Gen 12 sous DirectX11
- Gen 12 sous Vulkan
- Optimisation multicore