Implémentation du lissage du réseau


13

Nous faisons un jeu de tir à la première personne multiplicateur. Le client envoie sa position au serveur à un taux fixe (actuellement à 10 Hz). Le serveur envoie un seul message contenant toutes les positions des joueurs à tous les joueurs au même rythme (10 Hz).

Comme prévu, le mouvement est assez saccadé puisque le jeu à 60 images par seconde ne reçoit des mises à jour que 10 fois par seconde. Quelle est la meilleure façon de lisser ce mouvement? La façon la plus évidente serait d'interpoler entre les deux derniers paquets, afin que l'interpolation se termine lorsque nous recevons un nouveau paquet. Mais cela ajoute un délai instantané de 100 ms pour tous les joueurs.

L'autre façon serait d'utiliser la vitesse et l'accélération déduites des derniers paquets pour prédire où se trouve le joueur avant l'arrivée du prochain paquet, mais si la prédiction est fausse, le joueur aurait tendance à sauter dès qu'un nouveau paquet est reçu .

Est-ce que quelqu'un sait comment les titres AAA résolvent ce problème?

Réponses:


9

Ils font exactement ce que vous venez de dire - soit l'une de ces deux approches, soit un compromis entre elles. (par exemple, acceptez un petit délai et interpolez si possible, et extrapolez lorsque le ping dépasse ce délai.) Au lieu de sauter (également appelé «accrochage») vers une position corrigée, vous effectuez généralement une sorte d'interpolation entre la mauvaise prédiction et la valeur corrigée, en la lissant, si possible. Vous gérez également les corrections dans le passé pour réduire la quantité de correction que vous devez appliquer.

Il s'agit d'une question fréquemment posée et il existe plusieurs liens canoniques que vous trouverez probablement ailleurs sur gamedev.stackexchange.com si vous effectuez une recherche, et ils comprennent les éléments suivants:

Ce que chaque programmeur doit savoir sur la mise en réseau de jeux (cela résume les choses dans les deux liens suivants)

Réseau multijoueur source

Architecture de réseau irréelle

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.