Un utilisateur de Reddit a posé la question suivante à propos de Star Citizen : les sauts d'images réguliers sont ils dûs aux serveurs ou à la compilation des shaders ?
La réponse de Silvan-CIG a été rapide et concise.
Tout d'abord, les performances client ne sont pas affectées par celles du serveur, c'est une idée reçue. Les performances du joueur sont affectées lorsque beaucoup d'animation a lieu autour de lui puisque son jeu fait de plus nombreux appels au serveur par indice de temps, mais cela n'est pas directement lié aux performances du serveur en lui-même.
Concernant les shaders, peu de compilation est faite par la machine du joueur, voire aucune. Les shaders précompilés sont parties intégrantes du ficher .p4k (CIG appelle cette réserve le "shadercache"). Lorsqu'un shader est requis par le moteur, il est recherché dans cette base de données, et n'est compilé localement que s'il est manquant. Par ailleurs, la compilation est faite sur un thread à part, ce qui minimise l'impact sur les performances : une compilation ne bloque pas le rendu d'une image, même si elle peut affecter légèrement les performances pendant le temps de la compilation (quelques secondes au maximum).
Pour rappel, un shader est un microprogramme qui s'exécute sur la carte graphique. Il contient des informations sur la transformation à appliquer à un point donné de l'espace 3D pour affichage sur l'écran 2D.
Un shader est écrit dans un langage compréhensible pour l'humain, mais subit plusieurs transformations pour son exécution par la carte graphique (HLSL vers SPIR-V en l'occurrence) : c'est ce qu'on appelle la compilation. Lorsque la compilation est faite, le fichier sortant est stocké et n'a pas besoin d'être recompilé tant qu'il reste présent au même endroit sur la machine.