Rapport #82: Factorio 0.12: Les optimisations du jeu

Kovarex l'avait promis, la version 0.12 améliorera les performances de factorio. Il nous propose de faire un point sur les améliorations à attendre.

Le but est de permettre de créer des usines toujours plus grandes, ce besoin étant renforcer avec l'ajout du mode multijoueur qui néccessite au moteur du jeu de gérer encore plus d'élèments qu'auparavent.

La plupart du temps, le point faible dans le moteur du jeu est les tapis roulants. Il y en a en général beaucoup dans une usine, et leur fonctionnement est simple, mais très mal optimisé. Chaque objet sur le tapis roulant est une entité à lui seul, et doit gérer sa propre zone de collision. Lorsque que l'objet doit avancer sur le tapis roulant, il doit comparer sa position à l'ensemble des objets présents autour de lui (dans une zone de 2 x 2 cases) afin de vérifier les éventuelles colisions. Il peut y avoir beaucoups d'objets autour de lui, encore plus lorsqu'il y a 2 tapis cote à cote:

Ici chaque objet (encadré en rouge) dans le cadre noir doivent comparer leur position avec chacun des autres objets, soit 18 x 18 = 324 comparaisons, dans une zone de seulement 2 x 2 cases.

Pour la version 0.12 Kovarex a complètement réécrit le fonctionnement des tapis roulant (ainsi que les entités similaires: Tapis roulantsTapis souterrainsRépartiteurs). Les objets transportés ne sont plus des entités, mais de simples structures internes qui circulent sur des "rails" invisibles. Lorsqu'un objet sur le tapis roulant doit avance, il ne tester que la distance avec l'objet devant lui, soit un gain de performance considérable:


L'autre avantage de ce changement est qu'il sera plus facile de gérer et modifier les distances entre les objets sur le tapis, et de corriger ce genre de bug:

Sur l'image de gauche, une plaque de fer bloque l'arrivé de nouvelles plaques, ce bloquage se produit systématiquement au bout de quelques minutes dans cette configuration des tapis. Sur l'image de droite, avec l'ajout d'un coude sur les tapis, ce bug ne se produit plus.

Le gain de performance apporté par cette amélioration atteint 20% sur la map de test. En ajoutant toutes les autres amélioration déjà effectué, le gain de performance par rapport à la version 0.11 atteint 28%. L'objectif visé étant un gain de 50% par rapport à la version 0.11, ce qui permettrait de doubler la taille des usines. Malheureusement il est de plus en plus difficile d'optimiser le moteur du jeu. Mais cela est un beau défit qui est plutot motivant pour l'équipe :-)

Pour finir voici un aperçu de la répartition des temps de calcul pour les différents mécanismes du jeu:
Posté par Tronics, le 18/04/2015 à 4:20.Source
Dernière modification par Tronics le 18/04/2015 à 4:24.
Commentaires de la news Factorio
Rapport #82: Factorio 0.12: Les optimisations du jeu :
Ministoud
le 20/04/2015 à 17:05
Super, je joue avec un ami en Multi, et on a parfois des petits lags, ce qui ne m'étonne pas trop vu ce qu'on a fait, alors si en plus, les lags sont réduis c'est énorme :O

Je dois dire gg aux développeurs, ils font un énorme travail =)

Vous devez être connecté pour laisser un commentaire.