Equipe
R&D
En octobre, l'équipe R&D a travaillé sur des optimisations du moteur qui seront finalement intégrées au PU. Par exemple, la décompression des champs de bits des données clés d'animation a été optimisée à l'aide du jeu d'instructions SSE du CPU. La reconstruction tangentielle a également été optimisée afin de réduire les besoins en allocations d'exécution et d'accélérer l'exécution. Les chaînes intégrées dans les en-têtes d'animation des modèles ont été remplacées par des entrées de table de noms afin de permettre des copies peu coûteuses et peu profondes qui ne déclenchent pas d'allocations d'exécution excessives.
Pour le rendu, le traitement de mise à jour constante des matériaux a été amélioré, tandis que les structures internes associées ont été optimisées afin de réduire le coût en mémoire, ce qui a permis d'économiser plusieurs dizaines de Mo de mémoire système. Les mises à jour de la lumière des nuages de gaz ont été refactorisées afin de supprimer le besoin d'allocations de mémoire temporaires, qui provoquaient souvent des saccades intermittentes, et d'optimiser considérablement le coût de traitement du CPU.
Plusieurs optimisations clés ont été mises en oeuvre pour réduire le nombre d'appels de dessin ainsi que le nombre de sommets envoyés au shader de sommets à chaque image, ce qui a permis d'obtenir des triangles en dehors de la fenêtre d'affichage actuelle. La première série de mises à jour concerne la soumission des projecteurs dans les passes de rendu de la carte d'ombres. Cela permettra de générer une coque plus efficace pour éliminer les projecteurs d'ombres solaires pendant le rendu de la carte d'ombres. Cela contribue à réduire le coût du rendu des ombres sur les planètes, en éliminant des centaines d'appels de dessin inutiles à un niveau élevé et en évitant le rendu de millions de triangles non pertinents.
Le culling de coque a également été implémenté pour les projecteurs d'ombres de points, de projecteurs et de lumières de zone. Comme ci-dessus, cela aide les zones intérieures avec de nombreuses lumières locales, réduisant à la fois le coût de traitement du CPU et du GPU.
L'équipe a également ajouté la prise en charge du culling de coque dans les passes de génération de cube map et de shadow map statique. Elle a également implémenté un estimateur de zone de pixels projetés pour éliminer les objets si la zone projetée de leurs limites est inférieure à un seuil de pixels configurable.
La deuxième série d'optimisations concerne le culling des sous-objets des maillages complexes afin de réduire le nombre d'appels de dessin et le nombre de polygones en général et dans les passes d'ombres. Auparavant, le moteur visait à fusionner autant que possible les maillages complexes, en tenant compte des limites des matériaux. Cela permettait de réduire considérablement le nombre d'appels de dessin, mais impliquait également que de nombreuses sous-parties étaient traitées par le GPU, même si elles se trouvaient en dehors de la fenêtre d'affichage actuelle. La nouvelle approche teste d'abord la visibilité des sous-parties, puis utilise une approche heuristique pour décider s'il faut rendre le maillage fusionné ou ses sous-parties individuelles. Bien que cela augmente légèrement le nombre d'appels de dessin, cela permet d'économiser le traitement de dizaines de millions de triangles par le GPU lorsque de nombreuses lumières projetant des ombres sont actives dans des scènes denses, telles que les intérieurs.
Enfin, 4 Mo de mémoire vidéo ont été économisés pour la cible de rendu de la carte d'altitude du terrain de la planète. Certaines de ces optimisations ont été ajoutées aux streams alpha de Star Citizen et seront disponibles dans la version PU. D'autres apparaîtront dans la prochaine intégration de SQ42 à Star Citizen. Diverses optimisations mineures ont également été mises en oeuvre pour améliorer les performances d'exécution, l'utilisation de la mémoire et les temps de chargement.