2.0 Mon épopée pour optimiser le chargement des maps

Inscrit
10 Octobre 2016
Messages
12
Reactions
41
#1
Salut, il y'a quelques mois j'avais le projet d'optimiser le chargement des maps, je vais vous expliquer mon approche et du résultat final (?).

> Mais pourquoi ?
L'idée c'est de faire à peu près comme le chargement de maps sur Dofus-Touch, on charge une image pour le sol et en suite on charge normalement le reste des calques,
Il faut savoir que le client officiel de Dofus pèse maintenant 4go, dont 2go sont uniquement dédié aux tiles des maps, maintenant imaginons qu'on enlève toute les tiles de sols du jeu et qu'on charge tout le sol via une requete http, dans la théorie on pourrait gagner beaucoup d'espace, le jeu prendrait probablement moins de RAM et serait globalement plus rapide.

Sans parler du fait qu'avoir ce genre d'image peut être utile pour un fan-site et autres sans avoir à reproduire tout le process de chargement de maps du jeu

> Déjà, de quoi je parle exactement ?
Je parle de ça https://ground.ether-game.eu/95420420/0.jpg
Vous pouvez retrouver la liste des 13 973 maps ici https://ground.ether-game.eu
Ça correspond a un fichier jpg qui contient le background + background color + toute les tiles du calque 0

> Comment je m'y suis pris pour avoir tout ça ?
A la base j'aurais pu juste faire un genre de tools qui charge toute les maps au format DLM et sauvegarder une image, sauf que c'est assez compliqué de gérer la color correction de flash, les shadow etc..
J'ai donc préféré modifier un DofusInvoker 2.51, en y ajoutant une fonction pour passer à travers toute les maps du jeu, en y chargeant uniquement les sols et le background et y prendre une capture de map. D'après moi c'est la meilleure façon d'avoir un bon résultat,
Le process prend environs 4h si mes souvenirs sont bons, le dossier final fait 3.5go
(il faut savoir que j'ai essayé de récupérer les autres calques séparément, et ça fait 80go :sue:)

> Quel est le résultat ?
J'ai donc modifié mon DofusInvoker pour y ajouter tout le chargement du sol via des requêtes, et pour le moment j'en suis pas vraiment satisfait; le temps de chargement des maps est quasi identique à la normal, j'ai l'impression que mes images sont bien trop lourde ou que mon serveur web est trop lent (?), et que donc ça prend trop de temps à charger, faute d'un résultat significatif par rapport au temps de travail que ça demande, je m'en suis donc arreté là,

Tout ça pour dire que si vous avez idées pour optimiser tout ça je suis prenneur et que si ça marche bien le résultat sera open-source
 
Inscrit
10 Octobre 2016
Messages
12
Reactions
41
#2
Un peu de benchmark pour completer mon propos,

Les chargements basiques sont effectué avec le cache du jeu désactivé
Le chargement en HTTP est varié selon le cache du serveur web, dans l'idée si il y'a deux fois la même requêtes dans un moyen/court interval, la deuxième requête sera plus rapide à charger

> MapId: 88085777
1) Chargement basique:​
- Map GFX loaded in 132 ms​
- Layer 0 in 75 ms​
- Layer 2 in 10 ms​

2) Chargement via HTTP:​
a) 1ère requête​
[HTTP] Ground loaded in 182 ms​
Map GFX loaded in 26 ms​
Layer 0 in 5 ms​
Layer 2 in 9 ms​
b) 2ème requête​
[HTTP] Ground loaded in 59 ms​
Map GFX loaded in 35 ms​
Layer 0 in 5 ms​
Layer 2 in 11 ms​
> MapId: 88086289
1) Chargement basique:​
- Map GFX loaded in 40 ms​
- Layer 0 in 117 ms​
- Layer 2 in 8 ms​
2) Chargement via HTTP:​
a) 1ère requête​
[HTTP] Ground loaded in 169 ms​
Map GFX loaded in 24 ms​
Layer 0 in 5 ms​
Layer 2 in 8 ms​
b) 2ème requête​
[HTTP] Ground loaded in 45 ms​
Map GFX loaded in 22 ms​
Layer 0 in 5 ms​
Layer 2 in 7 ms​


Par contre, j'ai la fibre et un très bon PC toutes ces valeurs peuvent grandement changer selon la connexion et la PC de la personne qui fait le test, pour moi les deux façons sont assez égales voir un peu mieux pour la version HTTP,

La seconde étape va être de quantifier l'espace disque gagné en retirant toute les tiles dont on ne se sert plus
 
Dernière édition:
Inscrit
10 Octobre 2016
Messages
12
Reactions
41
#3
https://i.gyazo.com/bd192cde2afc1b2104bd346b0d720adf.gif

Au final le plus long reste de recevoir les infos du MapComplementaryInformationsDataMessage pour afficher les elements interactifs et les joueurs, à voir comment ça pourrait s'optimiser, peut être demander l'information de la map avant que la map soit chargé si c'est pas déjà le cas

Pour le moment en supprimant une partie des tiles non utilisé on gagne 1go d'espace disque mais je suis presque sûr qu'on peut en supprimer bien plus, j'ai aussi l'impression d'avoir gagné pas mal de RAM, mais j'ai pas encore trop pousser ce sujet
 
Inscrit
28 Decembre 2020
Messages
6
Reactions
2
#4
Plop !

Je suis pas du tout dans le domaine, mais si tu faisais en sorte de recive le MapComplementaryInformationsDataMessage au moment du clic pour aller sur la prochaine map (au moment du clic tu identifie la futur mapid sur laquelle tu arrive)
Comme ça au moment ou t'arrive vraiment sur l'autre map tes infos sont déjà reçu.

En soit, le temps du trajet du personnage permet de charger les infos pour la map d'après.

J'ai aucune idée si ça fonctionne comme ça et si c'est possible. Juste une idée comme ça :)

Bon courage !
 
Inscrit
6 Avril 2016
Messages
85
Reactions
40
#5
Salut, il y'a quelques mois j'avais le projet d'optimiser le chargement des maps, je vais vous expliquer mon approche et du résultat final (?).

> Mais pourquoi ?
L'idée c'est de faire à peu près comme le chargement de maps sur Dofus-Touch, on charge une image pour le sol et en suite on charge normalement le reste des calques,
Il faut savoir que le client officiel de Dofus pèse maintenant 4go, dont 2go sont uniquement dédié aux tiles des maps, maintenant imaginons qu'on enlève toute les tiles de sols du jeu et qu'on charge tout le sol via une requete http, dans la théorie on pourrait gagner beaucoup d'espace, le jeu prendrait probablement moins de RAM et serait globalement plus rapide.

Sans parler du fait qu'avoir ce genre d'image peut être utile pour un fan-site et autres sans avoir à reproduire tout le process de chargement de maps du jeu

> Déjà, de quoi je parle exactement ?
Je parle de ça https://ground.ether-game.eu/95420420/0.jpg
Vous pouvez retrouver la liste des 13 973 maps ici https://ground.ether-game.eu
Ça correspond a un fichier jpg qui contient le background + background color + toute les tiles du calque 0

> Comment je m'y suis pris pour avoir tout ça ?
A la base j'aurais pu juste faire un genre de tools qui charge toute les maps au format DLM et sauvegarder une image, sauf que c'est assez compliqué de gérer la color correction de flash, les shadow etc..
J'ai donc préféré modifier un DofusInvoker 2.51, en y ajoutant une fonction pour passer à travers toute les maps du jeu, en y chargeant uniquement les sols et le background et y prendre une capture de map. D'après moi c'est la meilleure façon d'avoir un bon résultat,
Le process prend environs 4h si mes souvenirs sont bons, le dossier final fait 3.5go
(il faut savoir que j'ai essayé de récupérer les autres calques séparément, et ça fait 80go :sue:)

> Quel est le résultat ?
J'ai donc modifié mon DofusInvoker pour y ajouter tout le chargement du sol via des requêtes, et pour le moment j'en suis pas vraiment satisfait; le temps de chargement des maps est quasi identique à la normal, j'ai l'impression que mes images sont bien trop lourde ou que mon serveur web est trop lent (?), et que donc ça prend trop de temps à charger, faute d'un résultat significatif par rapport au temps de travail que ça demande, je m'en suis donc arreté là,

Tout ça pour dire que si vous avez idées pour optimiser tout ça je suis prenneur et que si ça marche bien le résultat sera open-source
Très bonne idée !

Pourquoi le serveur web ? tu pourrais charger les images a partir du client non ? plutot qu'un serveur web.

Si tu n'arrives pas a faire beaucoup mieux que le système d'ankama, c'est probablement juste flash :teeth: le passage a unity va faire du bien.

Sinon il me semble qu'il y a déja un système de cache du sol dans le client quand une map est chargée right ? tu peux peut être t'en inspirer ?
 
Inscrit
12 Mars 2017
Messages
29
Reactions
32
#6
Superbe initiative,

Je serais parti sur la même idée que Skinz, pourquoi un serveur web ? Sachant que des requêtes HTTP sont souvent bloquante, je vois pas ou tu peux espérer gagner du temps.
Sinon pour avoir un gain, essayer de pre-shot la prochaine map qui va arriver au client et de déjà charger l'image, puis mettre en cache le tout pour ne pas avoir à refaire les requêtes me semble être une bonne piste

:)
 
Inscrit
10 Octobre 2016
Messages
12
Reactions
41
#7
L
Superbe initiative,

Je serais parti sur la même idée que Skinz, pourquoi un serveur web ? Sachant que des requêtes HTTP sont souvent bloquante, je vois pas ou tu peux espérer gagner du temps.
Sinon pour avoir un gain, essayer de pre-shot la prochaine map qui va arriver au client et de déjà charger l'image, puis mettre en cache le tout pour ne pas avoir à refaire les requêtes me semble être une bonne piste

:)
Le but c'est pas bon plus de rajouter 3go d'images de sol des maps au client du jeu, ça serait probablement contre productif, les requêtes ne sont pas bloquante, preshot le chargement semble être une bonne idée, je vais voir ce que je peux y faire
 
Inscrit
6 Avril 2016
Messages
85
Reactions
40
#8
L


Le but c'est pas bon plus de rajouter 3go d'images de sol des maps au client du jeu, ça serait probablement contre productif, les requêtes ne sont pas bloquante, preshot le chargement semble être une bonne idée, je vais voir ce que je peux y faire
Tu pourrais compresser tes images. Tu pourrais également retirer des gfx du client toutes les tiles qui ne sont plus utilisé.

Je ne sais pas quelle taille elle font, mais c'est certain que les charger a partir du disque sera plus rapide que de les télécharger a partir d'un serveur web, tu devrais regarder le temps que ça prend pour en avoir le coeur net.
 
Inscrit
20 Octobre 2021
Messages
50
Reactions
42
#9
L


Le but c'est pas bon plus de rajouter 3go d'images de sol des maps au client du jeu, ça serait probablement contre productif, les requêtes ne sont pas bloquante, preshot le chargement semble être une bonne idée, je vais voir ce que je peux y faire
Je ne comprend pas le rapport de productivité et les go sur le disque dur ... C'est sûr que si le gars à un HDD c'est pas ouf mais quand on sait que la majorité des jeux pèsent plusieurs dizaines de GO franchement on est pas à 4 GO près je veux bien que tu cherches à optimisé, mais sache que mon expérience m'a appris un truc : moins il y à de requêtes internet moins on est emmerdé.

Déjà essaye de voir sans la contraint d'internet ça améliore les choses, comme tu l'as dis "tout dépendra de votre ordinateur et de votre connexion", franchement toutes les configurations I3 à partir des 6emes génération, 8 GO de ram sous SSD sans carte graphique seront efficace sur un modèle où les images sont récupérer sur le disque en une seule image au lieux de plusieurs.

Je vois difficilement comment en ajoutant une connexion aussi rapide qu'elle soit tu peux optimisé plus vite qu'en ayant déjà l'information, dans les deux cas ce sera lu et traiter, t'ajoute le temps de connexion aussi rapide que ce soit ce sera toujours plus lent puisque local tu n'auras pas ce temps là.

PS: Ce serait drôle d'être bannis car les anti bot sont calculer sur leurs essais avec leurs launcher, la moyenne des joueurs etc ... Donc que tu sois trop rapide pourrait te considéré sans aucune image et être un bot :/ gaffe à ce détail, trop de réactivité c'est le ban.
 
Inscrit
10 Octobre 2016
Messages
12
Reactions
41
#10
Je ne comprend pas le rapport de productivité et les go sur le disque dur ... C'est sûr que si le gars à un HDD c'est pas ouf mais quand on sait que la majorité des jeux pèsent plusieurs dizaines de GO franchement on est pas à 4 GO près je veux bien que tu cherches à optimisé, mais sache que mon expérience m'a appris un truc : moins il y à de requêtes internet moins on est emmerdé.

Déjà essaye de voir sans la contraint d'internet ça améliore les choses, comme tu l'as dis "tout dépendra de votre ordinateur et de votre connexion", franchement toutes les configurations I3 à partir des 6emes génération, 8 GO de ram sous SSD sans carte graphique seront efficace sur un modèle où les images sont récupérer sur le disque en une seule image au lieux de plusieurs.

Je vois difficilement comment en ajoutant une connexion aussi rapide qu'elle soit tu peux optimisé plus vite qu'en ayant déjà l'information, dans les deux cas ce sera lu et traiter, t'ajoute le temps de connexion aussi rapide que ce soit ce sera toujours plus lent puisque local tu n'auras pas ce temps là.

PS: Ce serait drôle d'être bannis car les anti bot sont calculer sur leurs essais avec leurs launcher, la moyenne des joueurs etc ... Donc que tu sois trop rapide pourrait te considéré sans aucune image et être un bot :/ gaffe à ce détail, trop de réactivité c'est le ban.
En vrai t'as à peu près raison, sauf que là on parle de Dofus, la plus part des joueurs ont un vieux PC ou un PC portable pour jouer, il faut déjà peu de ressource pour faire tourner le jeu ça qui fait sa force, l'objectif c'est d'arriver à économiser le plus possible de ressource HDD / réseau, ou en tout cas d'y trouver une bonne balance et d'avoir une meilleur expérience de jeu, qui est déjà beaucoup nerf à cause de flash.

Et pour l'anti bot y'à presque rien de se côté là sur l'officiel, j'ai jouer avec un speedhack et pleins de petites modif sur mon client pendant un bon moment sur temporis et j'ai jamais eu de soucis :x
 
Inscrit
20 Octobre 2021
Messages
50
Reactions
42
#11
En vrai t'as à peu près raison, sauf que là on parle de Dofus, la plus part des joueurs ont un vieux PC ou un PC portable pour jouer, il faut déjà peu de ressource pour faire tourner le jeu ça qui fait sa force, l'objectif c'est d'arriver à économiser le plus possible de ressource HDD / réseau, ou en tout cas d'y trouver une bonne balance et d'avoir une meilleur expérience de jeu, qui est déjà beaucoup nerf à cause de flash.

Et pour l'anti bot y'à presque rien de se côté là sur l'officiel, j'ai jouer avec un speedhack et pleins de petites modif sur mon client pendant un bon moment sur temporis et j'ai jamais eu de soucis :x
Je pense que tu pourras pas faire beaucoup moins que réduire le poids des images et le nombre de transformations, car si la personne à une connexion très lente elle préfèrera au contraire même sur HDD avoir tout sur le disque :)

Gaffe quand même, je sais qu'à une époque le speedhack était facilement vu ...
 
Inscrit
23 Janvier 2016
Messages
25
Reactions
0
#12
Le sol est chargé lorsque le joueur arrive sur une map ou avant ? Je connais pas trop les mécanismes de caching du client

Si c'est pas déjà fait tu peux ptet mettre en cache quelques sols, les pré-charger : haut, bas, droite, gauche (updaté à chaque changement de map), mais aussi les maps atteignables via 'téléportation' (havre sac, maison, milice bonta, brak, zaap sauvegardé, songes, etc.), salles suivantes quand t'es en donjon...
 
Inscrit
20 Octobre 2021
Messages
50
Reactions
42
#13
Le sol est chargé lorsque le joueur arrive sur une map ou avant ? Je connais pas trop les mécanismes de caching du client

Si c'est pas déjà fait tu peux ptet mettre en cache quelques sols, les pré-charger : haut, bas, droite, gauche (updaté à chaque changement de map), mais aussi les maps atteignables via 'téléportation' (havre sac, maison, milice bonta, brak, zaap sauvegardé, songes, etc.), salles suivantes quand t'es en donjon...
Ou on retire les sols, c'est pas beau mais c'est efficace :D
Je me rappel d'une époque de bot click des SWF modifier en carré de pixel pour les bot Autoit.
 
Dernière édition:
Haut Bas