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

Le netcode est sans doute l'un des composants les plus critiques de tout jeu multijoueur.
Auparavant, nous avons couvert les idées applicables à tous les développeurs de jeux multijoueurs dans le livre blanc détaillé sur le matchmaking basé sur le skill de Call of Duty.
Dans cet article, nous aborderons les idées clés qui sont applicables à tous les développeurs de jeux multijoueurs concernant l'un des jeux en ligne les plus populaires au monde, Call of Duty, et son netcode. Ces idées 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.
La base : Comprendre l'architecture client-serveur
Modern Warfare fonctionne sur un modèle client-serveur où plusieurs clients interagissent avec un serveur central et autoritaire. Chaque appareil de joueur fonctionne comme un client, envoyant constamment des données d'entrée au serveur tout en recevant des mises à jour de l'état du monde en retour. Le serveur garde l'autorité ultime sur l'état du jeu, traitant toutes les entrées des joueurs et diffusant les résultats à tous les clients connectés.
Cette approche autoritaire garantit la cohérence entre tous les joueurs. Lorsque vous tirez avec 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 officiel du jeu que tous les autres joueurs voient.

Qu'est-ce que le netcode pour les jeux en ligne ?
Le netcode 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 délai et la résolution de conflits lorsque différents clients rapportent des informations contradictoires.
Le netcode moderne va bien au-delà d'un simple échange de données. Il comprend 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 l'ensemble de l'écosystème des technologies permettant les jeux multijoueurs en ligne.
Un netcode efficace doit équilibrer plusieurs priorités concurrentes : réactivité, cohérence, équité et évolutivité.
Que fait le netcode ?
Le netcode remplit plusieurs fonctions critiques qui permettent le jeu multijoueur. Il synchronise les positions des joueurs, les actions et les changements d'état du jeu à travers tous les clients connectés tout en maintenant la cohérence malgré les délais et pertes de données du réseau.
Le système prédit les états futurs du jeu en fonction des tendances actuelles, permettant aux jeux de continuer à fonctionner sans heurts même lorsque des paquets de données arrivent en retard ou hors de l'ordre. Lorsque les prévisions s'avèrent incorrectes, les mécanismes de retour en arrière ramènent l'état du jeu au point de divergence et rejouent les événements avec les bonnes informations.
Le netcode met également en œuvre des techniques de compensation de délai qui tiennent compte des retards réseau lors de la détermination de l'enregistrement des tirs et des interactions entre joueurs. Ces systèmes garantissent que les joueurs ayant des qualités de connexion différentes peuvent rivaliser équitablement sans désavantages significatifs.
De plus, le netcode moderne comprend des systèmes de détection et de validation de triche qui vérifient les données des clients par rapport aux attentes du serveur. Cela empêche les joueurs malveillants de manipuler leur état de jeu local pour obtenir des avantages déloyaux.
Lorsque les réseaux échouent : Le défi de la perte de paquets
Les interruptions réseau se manifestent de deux manières principales. La première se produit lorsque les clients ne reçoivent pas de données du serveur, laissant les joueurs sans informations cruciales sur l'état du monde. Sans ce flux de données, les jeux du client ne savent littéralement pas quoi rendre ensuite.
Le deuxième scénario implique que le serveur manque de données d'entrée des clients. Les approches traditionnelles gelaient simplement le joueur affecté jusqu'à ce que les données arrivent, puis le téléportaient instantanément à sa nouvelle position. Cela créait des artefacts visuels troublants qui rendaient les jeux injouables.
Les interférences sans fil, la gestion du trafic par les FAI, les pics de CPU et le buffering des routeurs contribuent tous à la variance de la livraison des paquets. Ces facteurs créent des retards imprévisibles dans le temps qu'il faut 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 en fonction des 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 des accrocs visuels. Le système ajuste dynamiquement les taux de mise à jour des clients vers le haut ou 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 un mouvement constant mais peut causer des "pop" visuels lorsque les joueurs changent de direction brusquement.
Prédiction traite l'entrée extrapolée comme des données autoritaires 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 ces trois approches simultanément, combinant des stratégies basées sur 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 du "mourir derrière le couvert" expliqué
La frustration classique de mourir après avoir atteint le couvert illustre les principes du netcode en action. Lorsque vous êtes exposé et voyez l'éclat d'un fusil de sniper, votre décision de courir crée une chaîne complexe d'événements réseau.
Votre position exposée parvient au serveur, qui met à jour votre emplacement et le diffuse aux autres joueurs. Le sniper vous voit à découvert et tire, renvoyant cette action au serveur pour un traitement autoritaire. Le serveur vous renvoie ensuite le résultat de la mort.
La latence totale du système détermine combien de temps derrière le couvert vous apparaîtrez pour mourir. L'extrapolation peut réellement réduire cet effet en prédisant les positions des joueurs avant que les données réelles n'arrivent, battant efficacement les temps de boucle aller-retour lorsque les prévisions sont précises.
Optimisation basée sur les données
L'approche d'Infinity Ward va au-delà du développement initial vers une optimisation continue basée sur la collecte de données réelles. L'équipe surveille en permanence le comportement des serveurs et des clients, recueillant des télémétries à partir des expériences individuelles des joueurs 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 franchissements fréquents. Cette méthodologie basée sur les données se poursuit après le lancement à travers des tests réguliers avec les populations de joueurs en direct.
Conclusion
Le netcode de Call of Duty Modern Warfare représente des insights intéressants sur les contraintes techniques tout en maintenant des expériences jouables pour des millions de joueurs à travers le monde. L'approche sophistiquée du système en matière de buffering, de prédiction et de mélange dynamique des stratégies démontre comment les jeux multijoueurs modernes gèrent les défis inhérents au réseautage en temps réel.
Les idées de l'équipe d'ingénierie d'Infinity Ward révèlent qu'un excellent netcode 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 fondations solides à faible latence et à construire des systèmes de tolérance robustes fournit un plan pour maintenir la qualité même dans les environnements multijoueurs les plus exigeants. Un tel netcode 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 edge du monde - ce qui permet à votre multijoueur de déployer son serveur de jeu le plus proche des utilisateurs. Réduisant la latence de 58 % en moyenne et offrant 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 explicateur officiel. Tous les droits sur le contenu original appartiennent à leurs ayants droit respectifs.
Écrit par
l'équipe Edgegap









