Le Netcode de Call of Duty - Perspectives pour le développement de jeux multijoueurs

Le Netcode de Call of Duty - Perspectives pour le développement de jeux multijoueurs
Le Netcode de Call of Duty - Perspectives pour le développement de jeux multijoueurs
Le Netcode de Call of Duty - Perspectives pour le développement de jeux multijoueurs

Le code réseau est sans doute l'un des composants les plus critiques de tout jeu multijoueur.

Auparavant, nous avons couvert les informations applicables à tous les développeurs de jeux multijoueur dans le document blanc en profondeur sur le matchmaking basé sur les compétences de Call of Duty.

Dans cet article, nous aborderons les principales informations applicables à tous les développeurs de jeux multijoueur concernant l'un des jeux en ligne les plus populaires au monde, Call of Duty, et son code réseau. Ces informations proviennent de l'explication d'Activision de 2019, de Paul Hale, alors directeur de production chez Infinity Ward, et de Mitch Sanborn, alors directeur de l'ingénierie en ligne.

Les Fondations : Comprendre l'Architecture Client-Serveur

Modern Warfare fonctionne sur un modèle client-serveur où plusieurs clients interagissent avec un serveur central autoritaire. Chaque appareil de joueur fonctionne comme un client, envoyant en permanence des données d'entrée au serveur tout en recevant des mises à jour de l'état du monde en retour. Le serveur maintient l'autorité ultime sur l'état du jeu, traitant toutes les entrées des joueurs et diffusant les résultats à chaque client connecté.

Cette approche autoritaire garantit la cohérence entre tous les joueurs. Lorsque vous tirez une arme ou déplacez votre personnage, à la fois votre client et le serveur traitent cette entrée simultanément. Cependant, seule la version du serveur devient l'état de jeu officiel que tous les autres joueurs voient.

Qu'est-ce que le code réseau pour les jeux en ligne ?

Le code réseau englobe tous les systèmes de mise en réseau qui synchronisent les états de jeu entre plusieurs joueurs dans des expériences multijoueurs en temps réel. Il gère la transmission de données, les algorithmes de prédiction, la compensation de latence et la résolution de conflits lorsque différents clients rapportent des informations contradictoires.

Le code réseau moderne va bien au-delà d'un simple échange de données. Il inclut des systèmes de prédiction sophistiqués, des mécanismes de retour en arrière et des stratégies d'adaptation dynamique qui maintiennent des expériences jouables malgré les imperfections du réseau. Le terme décrivait à l'origine le code de mise en réseau au sein des moteurs de jeu, mais représente désormais tout l'écosystème de technologies permettant le jeu multijoueur en ligne.

Un code réseau efficace doit équilibrer plusieurs priorités concurrentes : réactivité, cohérence, équité et évolutivité.

Que fait le code réseau ?

Le code réseau effectue plusieurs fonctions critiques qui permettent les jeux multijoueurs. Il synchronise les positions des joueurs, les actions et les changements d'état du jeu entre tous les clients connectés tout en maintenant une cohérence malgré les retards réseau et la perte de données.

Le système prédit les futurs états de jeu en fonction des tendances actuelles, permettant aux jeux de continuer à fonctionner sans interruption même lorsque les paquets de données arrivent en retard ou dans le désordre. Lorsque les prédictions se révèlent incorrectes, les mécanismes de retour en arrière rétablissent l'état de jeu au point de divergence et rejouent les événements avec les bonnes informations.

Le code réseau met également en œuvre des techniques de compensation de latence qui tiennent compte des retards réseau lors de la détermination de l'enregistrement des coups et des interactions entre joueurs. Ces systèmes garantissent que les joueurs avec des qualités de connexion différentes peuvent concourir équitablement sans désavantages significatifs.

De plus, le code réseau moderne inclut des systèmes de détection et de validation de triche qui vérifient les données du client par rapport aux attentes du serveur. Cela empêche les joueurs malveillants de manipuler leur état de jeu local pour obtenir des avantages injustes.

Lorsque les réseaux échouent : Le défi de la perte de paquets

Les perturbations réseau se manifestent de deux manières principales. La première se produit lorsque les clients ne parviennent pas à recevoir les données du serveur, laissant les joueurs sans les informations cruciales de l'état du monde. Sans ce flux de données, les jeux clients ne savent littéralement pas quoi rendre ensuite.

Le deuxième scénario implique que le serveur oublie les données d'entrée du client. Les approches traditionnelles bloquent simplement le joueur affecté jusqu'à ce que les données arrivent, puis les téléportent instantanément à leur nouvelle position. Cela créait des artefacts visuels éprouvants qui rendaient les jeux injouables.

L'interférence sans fil, la gestion du trafic ISP, les pics de CPU et le tamponnement du routeur contribuent tous à la variabilité de la livraison des paquets. Ces facteurs créent des retards imprévisibles dans le temps nécessaire pour que les données voyagent entre les clients et les serveurs.

Stratégie de solution en trois volets

Infinity Ward emploie trois stratégies distinctes selon les conditions réseau.

  • Buffering analyse les taux de livraison des paquets en temps réel, positionnant les clients aussi près que possible des dernières données du serveur sans risquer de hitches visuels. Le système régule dynamiquement les taux de mise à jour des clients vers le haut ou vers le bas pour maintenir cet équilibre précis.

  • Extrapolation prend la dernière entrée reçue et suppose que le joueur continue la même action jusqu'à l'arrivée de nouvelles données. Cela fonctionne bien pour des mouvements cohérents mais peut provoquer un "pop" visuel lorsque les joueurs changent soudainement de direction.

  • Prédiction traite les entrées extrapolées comme des données autorisées du serveur, créant un mouvement fluide pour tous les joueurs. Cependant, trop de prédiction rend le jeu injouable pour les clients rencontrant des problèmes de réseau.

Le moteur de Modern Warfare prend en charge les trois approches simultanément, mélangeant les stratégies en fonction de l'analyse réseau en temps réel pour chaque client individuel. Cela empêche les joueurs uniques avec de mauvaises connexions de dégrader l'ensemble des matchs.

Le phénomène "mourir derrière une couverture" expliqué

La frustration classique de mourir après avoir atteint une couverture illustre les principes du code réseau en action. Lorsque vous êtes exposé et voyez l'éclat d'un tireur d'élite, votre décision de courir crée une chaîne complexe d'événements réseau.

Votre position exposée est transmise au serveur, qui met à jour votre emplacement et le diffuse à d'autres joueurs. Le tireur d'élite vous voit à découvert et tire, renvoyant cette action au serveur pour traitement autoritaire. Le serveur vous renvoie ensuite le résultat du tir.

La latence totale du système détermine à quel point vous apparaîtrez comme si vous mourriez derrière la couverture. L'extrapolation peut en fait réduire cet effet en prédisant les positions des joueurs avant les données réelles, battant efficacement les temps de latence aller-retour lorsque les prédictions se révèlent exactes.

Optimisation basée sur les données

L'approche d'Infinity Ward va au-delà du développement initial pour une optimisation continue basée sur la collecte de données du monde réel. L'équipe surveille en permanence le comportement des serveurs et des clients, recueillant des télémetries à partir des expériences de joueurs individuels pour identifier les opportunités d'amélioration.

Les données des tests bêta ont confirmé l'efficacité de leur approche de buffering, le système fonctionnant constamment à des seuils optimaux sans fréquentes erreurs. Cette méthodologie basée sur les données se poursuit après le lancement grâce à des tests réguliers avec des populations de joueurs en direct.

Conclusion

Le code réseau de Call of Duty Modern Warfare représente des informations intéressantes sur les contraintes techniques tout en maintenant des expériences jouables pour des millions de joueurs dans le monde. L'approche sophistiquée du système en matière de buffering, de prédiction et de mélange de stratégies dynamiques démontre comment les jeux multijoueurs modernes gèrent les défis inhérents à la mise en réseau en temps réel.

Les informations de l'équipe d'ingénierie d'Infinity Ward révèlent qu'un excellent code réseau ne consiste pas à éliminer les problèmes de réseau, mais plutôt à les gérer avec grâce lorsqu'ils surviennent inévitablement.

Leur approche consistant à partir de bases solides à faible latence et à construire des systèmes de tolérance robustes par-dessus offre un modèle pour maintenir la qualité même dans les environnements multijoueurs les plus exigeants. Un tel code réseau a été construit sur mesure, le rendant indisponible pour la plupart des développeurs.

Heureusement, le système de matchmaking d'Edgegap est le seul système de matchmaking largement disponible avec des règles de latence intégrées. Étant entièrement intégré dans l'orchestrateur d'Edgegap, il s'appuie également sur le plus grand réseau de périphérie au monde - ce qui permet à votre multijoueur de déployer son serveur de jeu le plus près des utilisateurs. Réduisant la latence de 58 % en moyenne et fournissant une latence inférieure à 50 ms à 78 % de votre base de joueurs.

---

Cet article est basé sur et cite l'article original d'Activision sur leur explication officielle. Tous les droits sur le contenu original sont la propriété de leurs propriétaires respectifs.

Écrit par

l'équipe Edgegap