Rapport #83 : Masquer la latence

Qu'est ce qu'est la latence ?
En multijoueur Factorio semble plus lent dans les commandes: c'est la latence. A chaque fois que vous faites une action, que vous faites un click, que vous appuyez sur une touche, que vous lancez un crafting, etc. factorio vous impose ce temps de latence le temps d'envoyer l'information aux autres joueurs, avant d'éxécuter cette commande chez tous les joueurs simultannements, ce qui permet d'éviter les désynchronisations, c'est a dire que tous les joueurs voient la même partie en même temps.

Ce temps de latence est encore plus important si vous jouez avec d'autres joueurs via internet, en particulier si vos amis se trouvent loin de vous, dans un autre pays, ou dans une zone avec une mauvaise connextion internet: ce temps correspond au temps que met l'information a faire un aller/retour entre chaque joueur. Pire, afin d'éviter toute désynchronisation, Factorio choisit comme temps de latence le double de la plus mauvaise latence réel entre les joueurs, ce temps est appliqué à tous les joueurs d'une même partie.

Masquer la latence
Dans la plupart des jeux sur un modèle client-serveur (Quake, Doom, etc.) le problème de la latence est simple a résoudre: chaque joueur joue sa partie individuellement, et le serveur renvoie régulièrement le nouvel état réel. Le client se resynchronise automatiquement avec le serveur régulièrement. Cela fonctionne bien car il y a très peu de donner a synchroniser (la position du joueur, des monstres, etc.). Dans factorio la quantité de donnée est beaucoup plus importante: il suffit de voir le nombre d'objet qu'il peut y avoir sur les tapis roulant. Le problème est donc moins simple a résoudre. D'autant plus que Le multijoueur de factorio fonctionne sur un réseau P2P, c'est a dire que chaque joueur communique avec tous les autres joueurs en même temps, sans avoir besoin d'un serveur central.

Mais cette latence est très génante, c'est pourquoi Tomas a travaillé pour essayer de minimiser cette durée: c'est le masquage de la latence. Dans la grande majorité des cas, il n'y a aucun conflit dans l'ordre d'éxécution d'une commande: Si le joueur 1 place un batiement 1 à l'emplacement A pendant que le joueur 2 place un batiement 2 à l'emplacement B, peut importe l'ordre de placement, ça fonctionnement toujours. C'est pourquoi le jeu partira du principe que l'action peut être executé localement, et continuera la commande sans attendre. Toutes les actions ne seront pas géré, pour l'instant voici la liste des actions prises en charges par le masquage de la latence:
  • Déplacement des joueurs
  • Sélection des entités
  • Ouverture et fermeture des interfaces graphiques
  • Construire/remplacer des batiments
  • Miner des ressources
  • Détruire des batiments
  • Pointer des éléments avec la souris
Tomas espère également pouvoir ajouter la prise en charge de la conduite des voitures (mais c'est plus compliquer a cause de la gestion des colisions).

État de latence
Techniquement cela est géré en ajoutant dans Factorio un 2ème monde virtuel, l'état de latence, qui est identique au monde normal. Ce monde est celui que le joueur voit sur son écran, mais ce n'est pas le monde réél que les autres joueurs voient (avec la latence). Factorio travail sur le monde synchronisé uniquement, et copie ce monde sur l'état de latence que le joueur vois. Ainsi le joueur peut jouer de façon fluide (sans attendre la latence), tout en concervant un monde en permance synchronisé avec les autres joueurs (grâce aux réplications régulières). Par exemple, si un joueur avance pendant qu'un autre joueur place un batiement au même endroit. Le joueur qui se déplace ne verra pas tout de suite le batiement et donc sur son état de latence il croira avancer. Mais puisque sur le monde synchronisé le batiement sera contruit, lors de la réplication le joueur réculera automatiquement à sa position précédente avant le batiement.

Amélioration à venir
En général, plus une action a d'impact/de dépendance, plus il sera difficile de masquer sa latence. C'est pourquoi il n'est pas prévu de masquer la latence pour l'ensemble des actions (nottament pour les intéractions avec les autres entités ou les combats). Cela serait trop compliqué à faire pour le moment.

À l'avenir l'équipe s'éfforcera de jouer leur test avec de gros temps de latence, afin de mieux détecter les actions pour lesquelles la latence est la plus contraignante.

De nouvelles optimisations sont prévu concernant le fonctionnement du multijoueur également:
  • Réduction de la taille des données enchangés (la plupart des communications sont vide (aucune action), mais contiennent pourtant une structure de donnée qui ne sert à rien. Cela sera amélioré pour la version 0.12 de Factorio.
  • Ajout d'un serveur sur le réseau. Avec le fonctionnement en P2P, si il y a une mauvaise communication entre 2 joueurs, tous les autres joueurs seront impacté. Factorio prévoit l'ajout d'un serveur dédié qui centralisera les informations pour les renvoyer à l'ensemble des joueurs, ce qui pourra améliorer grandement la latence globale si le serveur à une bonne connexion internet, mais aussi réduire le traffic de chaque joueur. Cela ne sera probablement pas implémenté pour la version 0.12, mais c'est en priorité haute sur la liste des choses à faire.

Pour finir, voici une présentation en vidéo de cette nouvelle fonctionnalité de masquage de la lantece: à gauche le joueur avec le masquage de lantence, à droite ce que voient les autres joueurs (avec la latence):


Posté par Tronics, le 27/04/2015 à 2:41.Source
Validé par Tronics.
Commentaires de la news Factorio
Rapport #83 : Masquer la latence :

Vous devez être connecté pour laisser un commentaire.