La compilation de shader pourrait bientôt être une chose du passé
Totalement injouable: Unreal Engine est l'une des solutions middleware les plus populaires pour le développement de jeux et d'autres expériences interactives, en particulier sur PC et Mac. Créé par Epic Games, il est également connu pour le bégaiement et les problèmes de performances graphiques. Cependant, les développeurs travaillent activement à résoudre ces problèmes une fois pour toutes.
Si vous avez joué un jeu sorti au cours des dernières années, vous connaissez probablement l'expérience frustrante du bégaiement de compilation de shader. Les shaders sont de petits programmes exécutés directement par le GPU pour gérer diverses tâches requises pour rendre des graphiques 3D complexes complexes riches en fonctionnalités. Lorsqu'un moteur de rendu doit compiler un nouveau shader juste avant de dessiner une scène à l'écran, tout s'arrête pendant que le pilote GPU termine la tâche, entraînant l'effet de bégaiement infâme que de nombreux jeux modernes souffrent.
Le bégaiement de shader est devenu si répandu qu'Epic Games fonctionne maintenant pour éliminer ce fléau multiplateforme de graphiques en temps réel. Les développeurs travaillant sur le moteur Unreal ont récemment expliqué l'importance de la compilation du shader et les causes profondes du bégaiement. Kenzo ter Elst, Daniele Vettorel et d'autres ingénieurs de jeux épiques ont développé un nouveau système appelé PSO Precaching, qui, en théorie, pourrait faire du bégaiement de shaders une chose du passé.
Les objets d'état de pipeline (PSO) sont une méthode utilisée par les GPU modernes pour regrouper les shaders et autres paramètres graphiques pour une demande de dessin dans une seule « unité », expliquée EPIC, expliquant, ce qui leur permet d'être exécuté plus efficacement. Ces PSO peuvent être construites à tout moment et, théoriquement, à motif pour optimiser la compilation du shader, empêchant le bégaiement pendant le rendu.
Avant Unreal Engine 5.2, EPIC a recommandé que les développeurs regroupent les PSO les plus courants dans un cache, permettant aux jeux de précompiler la plupart du code du shader pendant les écrans de chargement. Cependant, la conversion des shaders bytecode en code binaire spécifique au GPU reste exigeant par calcul, et le cache nécessite souvent des mises à jour fréquentes dans les environnements en constante évolution des jeux modernes.
Selon les développeurs de moteurs Unreal, le précalage PSO pourrait éliminer le bégaiement causé par ce problème. Le moteur analyserait un objet récemment chargé et sélectionnerait un « sous-ensemble » spécifique de toutes les PSO possibles nécessaires pour le rendre. Bien que ce sous-ensemble soit encore plus grand que les PSO réels utilisés pour le rendu, il serait beaucoup plus petit que les millions de combinaisons de rendu possibles.
Avec la précachement PSO, la précompilation serait beaucoup plus rapide, n'introduire qu'un petit retard imperceptible de quelques cadres. Les développeurs EPIC affirment que ce système peut « éliminer » le bégaiement de compilation PSO pour les matériaux et travailler de manière transparente avec le contenu généré par l'utilisateur. Cependant, les shaders mondiaux non associés à des matériaux – tels que ceux utilisés pour les effets de post-traitement comme le flou de mouvement – pourraient encore provoquer de rares cas de bégaiement la première fois qu'ils sont compilés. Les ingénieurs d'Unreal Engine travaillent également à résoudre ce problème.