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 roulants, Tapis souterrains, Ré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:
- Bras robotisé: 18.01% ==> Optimisation en précalculent les étapes de l'animation du bras
- Tapis Roulant: 12.44% ==> Optimisation via l'amélioration du système de cache, et via la création d'un système d'activation/désactivation des tapis
- Fumée (Train, Turbine, etc.): 9.66% ==> Optimisation en réduisant la taille des nuages et en simplifiant le système de mouvement des fumées.
- Machine de crafting (four, Machine d'assemblage, Usine chimique, Raffinerie): 6.97% ==> Optimisation via la création d'un système d'activation et de désactivation des usines.
- Panneau solaire: 4.11% ==> Optimisation via la fusion des panneaux solaires au sains d'une seul entité formant l'ensemble de tous les panneaux solaires sur le même réseau électrique.
- Circulation des fluides: 3.68%
- Foreuses: 3.40%
- Mobs: 3.33%
- Tapis sousterrain: 2.80%
- Robots logistiques: 2.60%
- Répartiteurs: 2.31%
- Accumulateurs: 1.58%
- Lampes: 1.47%
- Hangar à robots: 1.21%
- Chaudières: 0.47%
- Particules: 0.40%
- Véhicules (Train, Voitures, Tank): 0.31%
- Générateur: 0.28%
Posté par Tronics, le 18/04/2015 à 4:20.Source
Dernière modification par Tronics le 18/04/2015 à 4:24.
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 :
Rapport #82: Factorio 0.12: Les optimisations du jeu :
Ministoud
le 20/04/2015 à 17:05
Vous devez être connecté pour laisser un commentaire.
Je dois dire gg aux développeurs, ils font un énorme travail =)