Sélectionnez vos préférences en matière de cookies
Nous utilisons des cookies et d’autres outils similaires pour vous fournir nos services, comprendre comment nos clients utilisent nos services afin de les améliorer, et pour afficher des publicités.
Une erreur est survenue lors de la sauvegarde de vos préférences en matière de cookies.
Retour aux actualités

Les coulisses de Crucible : les performances

J Brian Smith

Bonjour tout le monde ! Je suis J Brian, et je suis à la tête de l'équipe qui travaille sur la technologie au cœur de Crucible. Notre équipe est notamment responsable des performances du jeu.

 

De manière générale, ce terme correspond à la réactivité et à la fluidité du jeu. Cependant, les soucis de performances peuvent prendre de nombreuses formes et avoir des origines diverses et variées. Commençons par décrire quelques composantes clés des performances d’un jeu et les points sur lesquels nous travaillons depuis mai. Nous vous parlerons ensuite des prochaines étapes de notre travail qui mènera à un avenir radieux et performant !

 



Fréquence d'images

Presque tous les joueurs savent que plus la fréquence d'images (nombre d'images par seconde) est élevée, mieux c’est.  Dans ce domaine, on peut rencontrer des problèmes de fréquence d'images continuellement basse, ou de « bégaiement » (une image reste nettement plus longtemps que les précédentes, ce qui donne une impression de saccade). Notre objectif est que sur les ordinateurs dotés de notre configuration système recommandée, avec le paramètre graphique « élevé » par défaut, Crucible fonctionne à 60 images par seconde de manière constante.  Sur du matériel très haut de gamme, la fréquence d'images devrait être encore meilleure, et sur un ordinateur fonctionnant avec la configuration minimale et le paramètre « bas » par défaut, la fréquence d'images devrait constamment être d’au moins 30 images par seconde. La fréquence d'images est actuellement de 60 images par seconde la plupart du temps avec la configuration recommandée, mais nous descendons encore trop fréquemment sous ce seuil de manière périodique ou le temps d’une image particulièrement longue.

 

Les développeurs s’intéressent souvent davantage à la durée de chaque image plutôt qu’au nombre d'images par seconde. Pour atteindre les 60 images par seconde, chaque image doit durer environ 16,5 millisecondes maximum. Notre travail consiste donc à réduire le temps nécessaire pour la simulation complète et le rendu de chaque image. Nous avons effectué plus d’une dizaine de micro-optimisations de la fréquence d'images. Cela nous a permis de la réduire globalement de plus de 15 % sur les machines dotées de la configuration recommandée depuis le lancement du jeu, et nous sommes descendus sous le seuil critique des 16,5 millisecondes pour la plupart des images. La plupart de ces améliorations ont été possibles en rendant plus efficaces les systèmes et le code moteur de base qui exécutent la logique et le rendu du jeu, ou en optimisant l’utilisation des cœurs du processeur dans les parties de notre code qui étaient inutilement configurées pour n’utiliser qu'un cœur à la fois.

 

Désynchronisation

 

Quand votre client (la copie du jeu qui tourne sur votre machine) et le serveur partagent exactement la même version du monde du jeu, on dit qu’ils sont « synchronisés » : ils sont « d’accord » sur l'état du monde du jeu. Une désynchronisation survient lorsque le client et le serveur ne sont pas d’accord sur l’état du monde à un moment donné. Dans ce cas, le serveur envoie une correction au client. Cela force ce dernier à adopter la version du serveur (qui fait toujours autorité en ce qui concerne l'état du monde). De votre point de vue, cette correction a pour conséquence une déformation étrange du monde. Un autre joueur ou vous-même pouvez vous faire « catapulter » à un autre endroit, une capacité peut être appliquée ou annulée, ou un autre aspect du jeu peut changer de manière surprenante. Les désynchronisations qui durent plusieurs images d’affilée font particulièrement mauvaise impression et peuvent causer des problèmes de fréquence d'images ou de bande passante.

 

Étant donné le trafic internet et les modèles de synchronisation réseau à faible latence, ces problèmes ne disparaîtront jamais totalement, mais nous pouvons les réduire au minimum. Nous avons constaté plusieurs situations où une seule désynchronisation provoquée par un paquet de données perdu ou une erreur logique avait eu pour conséquence des dizaines de désynchronisations à la chaîne. En réparant plusieurs de ces problèmes, nous avons réduit notre taux global de désynchronisation de plus de 50 % depuis le lancement du jeu.

 

Mémoire

Quand le jeu utilise presque toute la RAM du système ou la RAM vidéo de votre ordinateur, les performances en souffrent terriblement, surtout si d’autres programmes et systèmes utilisent aussi des ressources. Utiliser moins de mémoire nous permet d'éviter ce cas de figure, d’assurer des performances fluides et à terme, de faire fonctionner le jeu sur un éventail de machines plus large.

 

Notre objectif est de réduire l’utilisation de la mémoire de 3 Go (ce qui est énorme, étant donné que nos machines ont 8 Go de RAM !). Depuis notre version du 12 août, nous avons déjà réduit cela de 2,6 Go. Le plus difficile a été d’intégrer dans notre moteur un meilleur code de mesure et de signalement pour donner à nos développeurs des données précises sur les éléments gourmands en mémoire. Maintenant que nous avons ces informations, le code et le contenu de plusieurs domaines clés du jeu ont été améliorés pour utiliser nettement moins de mémoire sans faire de compromis sur l’expérience de jeu. Ce travail a permis d’améliorer grandement l’expérience de jeu sur les systèmes dans la tranche basse du matériel compatible.

 

Bande passante

Pour la plupart des joueurs, la connexion internet fluctue au cours d’une partie. Quand le jeu doit envoyer et recevoir plus d’informations que ne peut le supporter votre connexion, cette information est perdue et votre jeu est désynchronisé et lent. Si nous réduisons la bande passante nécessaire pour le jeu, nous réduisons la fréquence de ces problèmes.

 

Pour le moment, une des principales améliorations dans ce domaine a été d’optimiser des systèmes clés qui utilisaient plus de bande passante que nécessaire pour synchroniser leurs données.


 


Suivre notre progression

Nous vous avons présenté quatre facteurs clés en matière de performances (la fréquence d'images, la désynchronisation, la mémoire et la bande passante), mais comment savoir si les modifications apportées fonctionnent ?

 

Si nous ne mesurons pas constamment ces caractéristiques de performances, difficile de constater d’éventuels progrès ! Nous suivons les performances de près pendant le développement, et nous continuons d’affûter nos capacités de compréhension des différents scénarios de performances possibles pendant une partie. Nous suivons les évolutions des performances selon trois axes principaux :

 

  • Nous avons amélioré l’automatisation de nos tests pour recueillir des données détaillées des dizaines de fois par jour, afin de rendre compte des performances de manière plus précise et cohérente. Ces données nous permettent de détecter plus rapidement les nouveaux problèmes et de vérifier l’efficacité de nos optimisations.

 

  • Les tests automatiques sont complétés par des tests de performance manuels quotidiens : notre équipe d’assurance qualité joue avec des outils spécifiques et un code qui enregistre les performances afin de recueillir des données de scénarios de jeu réels, que nos tests automatiques, conçus pour tester le jeu toujours dans les mêmes conditions, pourraient manquer.

 

  • Enfin, nous suivons via une page web interne des données très précises sur les performances dans les parties en conditions réelles afin de comparer les performances que constatent réellement les joueurs et nos attentes qui découlent des tests en interne.

 


La suite

Maintenant que nous avons présenté les quatre facteurs de qualité des performances et leur état actuel dans Crucible, ainsi que la façon dont nous les mesurons, il ne nous reste plus qu’à vous expliquer ce que nous prévoyons pour la suite. Voici ce sur quoi nous travaillons actuellement, pour chaque domaine :

 

Fréquence d'images

Lors de nos tests en interne sur des machines dotées de la configuration recommandée, nous constatons toujours qu’environ 10 % des images duraient 19 ms (pour rappel, nous visons 16,5 ms maximum), et que 1 % des images duraient environ 23 ms. À l’avenir, nous devrions utiliser davantage les cœurs de processeur supplémentaires, ce qui devrait réduire notre durée d'image de base, surtout sur les PC haut de gamme qui comptent plus de cœurs de processeur. Nous comptons également analyser plus en détail les situations qui donnent des images particulièrement longues afin de mieux nous attaquer à leurs causes. Enfin, nous allons essayer de mieux équilibrer la charge de travail nécessaire pour chaque image.

 

Notre objectif final est d’arriver à une fréquence d'images constante de 144 images par seconde sur les ordinateurs les plus haut de gamme. À court et moyen terme, nous cherchons tout d’abord à atteindre une fréquence d'images constante de 60 images par seconde sur les ordinateurs conformes à notre configuration recommandée. Les avancées pour ces systèmes contribueront immédiatement à des améliorations de la fréquence d'images pour le matériel haut de gamme.

 

Désynchronisation

Dans les mois à venir, nous chercherons à réduire le taux de désynchronisation actuel de plus de moitié. Elles devraient donc se faire plus rares, ce qui devrait avoir un impact notable sur l’expérience de jeu globale, surtout lors des combats intenses. Pour arriver à ces optimisations, nous devrons améliorer notre logique de prédiction dans les cas où la prédiction actuelle est nécessaire mais instable, ainsi que supprimer d’autres logiques de ce type.

 

Mémoire

Comme mentionné précédemment, nous nous sommes fixé comme objectif de réduire l’utilisation de mémoire de Crucible de 3 Go, et nous avons déjà atteint une baisse de 2,6 Go. Grâce à quelques optimisations prévues en ce qui concerne le code et le contenu (plus particulièrement la manière dont nous chargeons la géométrie dans la mémoire), nous pensons pouvoir atteindre notre objectif dans le mois qui arrive.

 

Bande passante

Dans la prochaine version que nous mettrons à disposition, nous utiliserons une technologie de compression rapide afin de réduire encore notre utilisation de bande passante de 30 %. Ainsi, nous serons toujours conformes à notre but d’utiliser moins de 300 kbit/seconde de bande passante entrante (et nous en utiliserons nettement moins la plupart du temps).

 

Ensuite, nos efforts en matière de bande passante se concentreront sur l’amélioration de la bande passante sortante utilisée par le jeu. Nous utilisons moins de bande passante sortante qu’entrante, mais les connexions de certains joueurs sont davantage limitées en débit sortant qu’entrant, et il peut donc être intéressant d’optimiser ce point si nous en avons l’occasion.


 


Merci beaucoup d’avoir lu cet article et de jouer à Crucible ! Nous savons que les performances sont critiques pour l’expérience d’un jeu de tir multijoueur compétitif. Nous ne nous reposerons jamais sur nos lauriers et chercherons toujours de nouvelles manières d’améliorer les performances dans le jeu. Si ce sujet vous intéresse et si vous avez remarqué des situations précises dans le jeu qui semblent problématiques en la matière, n’hésitez pas à nous en parler : le salon « #bugg reports » dans Discord est l’endroit parfait pour cela.


V2