|
On entends souvent de tout sur le /1 et il en va de même sur le forum officiel comme sur JoL. Les gens confondent le lag, les fps, le client / serveur.
Bref voici un petit condensé un peu barbare à lire mais qui fait bien la part des choses : Déjà la base que la grande majorité connait avant de commencer : lag = connexion réseau en 'ms' uniquement // fps = capacité à afficher des frames par votre configuration (carte graphique, cpu, etc ...) // temps d'accès, chargement = disque dur / ram (du local également, sauf si le client à besoin de télécharger des données provenant du serveur). Maintenant, on peut rentrer dans les notions plus "techniques". Abordons la partie moteur3D / Netcode pour bien comprendre pourquoi sur SWTOR, les compétences se lancent avec retard et pourquoi par moment on a l'impression d'être TP de WARP sur plusieurs mètres. Dans un premier temps, il faut savoir que le moteur 3D utilisé par BioWare, n'est pas développé en interne par l'équipe mais a été acheté. Il s'agit de l'HeroEngine. Dont voici le lien : http://www.heroengine.com/2011/11/he...eets-starwars/ Pour se faire une idée sur le prix des licences : 1. Basic license for $600,000 plus a 7.5% royalty. 2. Basic license for $900,000 plus a 1% royalty. Basic licenses do not include source code to the engine. A couple of our licensees wanted to modify the source code, so we offer that for an additional $400,000. Support for the full license models is: 1. Basic: $150,000 per year 2. Source code and special projects: $150 per hour Let me know what options interest you. Best Regards, Liz Harris Marketing Manager Simutronics Corporation [url]mailto:lizh@simutronics.com">lizh@simutronics.com Phone: 301-330-0726 ext. 12 Il reste donc deux hypothèses : #1. Soit ils ont choisi de prendre une licence basic sans les sources et dans ce cas le jeu n'évoluera pas sur le plan technique sans que les devs de l'Hero le patch (actuellement en ver. 1.65). Ce qui est très handicapant et bloquant pour nous au niveau des différents bugs et du netcode. #2. Soit ils ont cassé la tirelire et ont déboursé la modique somme de 1 300 000 $ pour avoir la licence full avec les sources et dans ce cas, ils peuvent nous en faire ce qu'ils veulent de A à Z. Ce qui mets le doute et tout le monde l'aura remarqué est la gestion de l'anti-aliasing absente dans la version qu'ils ont acheté... Peut-être donc qu'une version basic du moteur, sinon pourquoi le brider volontairement si ils ont prit la full ?! Il n'y aurait pas trop de sens à cela. Nous allons parlé maintenant du netcode de ce moteur et pourquoi les compétences mettent du temps à se déclencher. Le choke Le serveur envoie les informations sur le jeu en cours à une certaine fréquence appellée updaterate et exprimée en mises à jours par seconde. Avec un updaterate de xxx, les mises à jour sont envoyées par intervalles de xxx millisecondes. Il faut donc que chaque mise à jour soit transmise dans un délai maximum, une "fenêtre de transmission" de xxx millisecondes. Que se passe-t-il si le délai de transmission d'un paquet dépasse cette fenêtre ? En situation normale, les mises à jour gardent toujours un "intervalle" entre elles. Mais si la transmission d'une mise à jour est trop longue, celle-ci "déborde" de sa fenêtre : c'est le choke. Et si le problème persiste, la situation dégénère en une sorte de "réaction en chaîne". Le principal problème causé par ce phénomène est que l'updaterate baisse et, surtout, les mises à jour arrivent avec de plus en plus de retard. La partie peut rapidement devenir injouable. Ce "débordement" est dû à un manque de bande passante pour transmettre les mises à jour, qui lui même peut avoir deux causes : Votre connexion n'a pas une bande passante suffisante pour tenir le rythme du jeu assez rare, sauf pour les connections vraiment lentes. // La taille des paquets est trop grande. Cette dernière cause n'est quasiment jamais mentionnée, pourtant elle provoque 90% des problèmes de choke. Il vous est peut-être déjà arrivé de constater que vous avez du choke lors d'affrontements violents dans le jeu, alors que dans d'autres circonstances tout est normal. Le choke ne peut pas être provoqué par un manque de ressources système (CPU ou RAM) sur le serveur. L'explication est simple, prenons un exemple : alors qu'en situation normale de jeu la taille des paquets transmis reste dans les environs de 350 octets, il n'est pas rare en situation d'affrontements de se retrouver avec des paquets fragmentés pouvant atteindre des tailles totales de l'ordre de 5000 octets. Faites le calcul : avec un updaterate 66, ces données doivent être transmises en 15 millisecondes. Soit une bande passante nécessaire de 330 ko/s. Vous êtes en droit de vous demander comment votre connexion à 8 mbps (voire 25 mbps) pourrait avoir peur de 330 ko/s là où elle en supporte beaucoup plus. Malheureusement, le moteur Source souffre ici d'une limitation de taille. Pour rappel, le rate limite la bande passante utilisée par le serveur lors de l'envoi de ces mises à jour. Or, cette valeur a comme valeur maximale 81920, soit 80 ko/s... Conclusion, un paquet dont la taille dépasse 81920 ÷ updaterate (soit 1241 octets pour un updaterate 66) provoquera un choke inévitable : vous ne pouvez absolument rien faire pour résoudre le problème. La seule solution est d'attendre que les devs du moteur fassent sauter cette limitation, ce qui n'est pas gagné d'avance. Cela dit, il est possible que le serveur limite votre rate.. En revanche, le seul moyen d'éviter ce problème lors des affrontements (bg, opvp...) est d'améliorer votre connexion avec le serveur. Si votre connexion supporte déjà plus de 80 ko/s (et côté serveur également), vous ne pouvez rien faire.. La prédiction Il s'agit du mécanisme le plus simple. Il a pour objectif de rendre le jeu plus "réactif" aux actions du joueur et est implémenté côté client. Sans la prédiction, le client affiche ce qu'il reçoit du serveur par les mises à jour et uniquement cela. Ce qui signifie que si vous tirez, le jeu ne déclenchera l'animation et les effets correspondants que lorsqu'il aura reçu confirmation de ce tir par le serveur. Cela nuit considérablement à la jouabilité car entraîne un décalage entre le moment où vous tirez et le moment où vous voyez ce tir sur l'écran. Pour éviter ce problème, le jeu va anticiper la confirmation du serveur : c'est la prédiction. En clair, le jeu va tirer sans attendre la confirmation. Ce qui signifie que lorsque vous voyez l'animation de tir de votre arme, le tir a en réalité été pris en compte quelques millisecondes plus tard sur le serveur (votre latence), ce décalage étant compensé par le lag compensation que nous verrons plus tard. La prédiction est surtout utile sur les actions de tir et de déplacement. Mais il peut arriver que cette "anticipation" ne soit pas correcte et que l'action ne se produise pas sur le serveur (ou d'une manière différente). Cela arrive notamment si vous tirez et que quelqu'un vous tue pendant le trajet de l'information de tir jusqu'au serveur : en réalité, votre tir n'a pas été pris en compte. Ces différences entre ce que le client s'attend à recevoir et ce qu'il reçoit réellement sont appellées erreurs de prédiction.. Le client se replacera alors sur l'état indiqué par le serveur (puisque celui-ci a autorité sur le jeu). Ces erreurs de prédiction arrivent en général peu fréquemment, et leurs conséquences sont souvent négligeables. Lorsque l'erreur de prédiction est minime (une très légère différence de direction lors d'un déplacement par exemple), votre client va "smoother" c'est à dire "adoucir" la correction de l'erreur. Par exemple, si la prédiction d'un de vos mouvements s'est fait légèrement trop à droite par rapport à la confirmation du serveur, votre jeu vous replacera "doucement" vers la bonne position, de sorte que vous ne vous en rendrez même pas compte. Si l'erreur est grande (c'est à dire lorsque le temps nécessaire pour "l'adoucir" dépasse la valeur ), le client va vous replacer brutalement à la bonne position : C'est ce phénomène que vous pouvez voir quand vous revenez brusquement un pas en arrière au cours d'un huttball quand vous vous retrouvez 10m plus haut ou plus loin, cet effet de TP. La fréquence et la gravité des erreurs de prédiction dépends de votre latence et de la fréquence de vos mises à jour (dans les deux sens), ainsi que de la qualité du serveur. Il nous reste un problème à résoudre, fondamental dans les jeux en réseau : la latence. Alors comment le serveur fait-il pour compenser cette latence ? Eh bien il remonte le temps. En effet, tout le principe du lag compensation consiste à estimer à quel moment le joueur a réellement tiré (ou plus précisément : le moment auquel l'image sur laquelle le joueur a tiré s'est affichée). Une fois ce moment déterminé, le serveur va remonter dans un "historique" des précédents ticks. Une fois le tick correspondant isolé, il va l'utiliser pour déterminer si, dans cette "image du jeu", le joueur a touché son adversaire ou pas. Avant de continuer, rappelons que la latence (le ping) est exprimé dans un délai aller et retour. Quels éléments le serveur doit-il prendre en compte lors de l'estimation du décalage entre le serveur et le client ? Le temps d'arrivée des mises à jour serveur vers client. L'interpolation, qui crée un décalage supplémentaire. Le temps d'arrivée des commandes client. Ce qui nous donne : temps d'arrivée des mises à jour + temps d'interpolation + temps d'arrivée des commandes client = lag à compenser, soit latence + temps d'interpolation = lag à compenser. {{ Je vais faire une mini parenthèse concernant le client qui se crash au bout de plusieurs heures. Il s'agit comme pour beaucoup de titres online d'une fuite de la mémoire. Si vous suivez vos processus en execution vous verrez que SWTOR consomme de plus en plus de mémoire RAM jusqu'à saturation. Les personnes qui ont donc par exemple 16 Go ne resteront pas assez de temps en jeu pour rencontrer le problème mais ceux qui n'en ont que 4 Go pourrant voir le client crasher au bout de 6/9h de connexion consécutives. }} edit : fuite mémoire Voilà pour ces quelques explications techniques. Le pourquoi, du comment. J'espère que ça éclairera les gens sur les évènements qu'ils rencontrent en jeu. ps : un petit rappel si des gens veulent optimiser les qualités graphiques du jeu : J'ai fais un post hier dans la section technique pour le client.ini : https://forums.jeuxonline.info/showthread.php?t=1162158 Je suis toujours à la recherche de lignes pouvant continuer à l'améliorer, je ne trouve rien d'autre pour le moment. ─ iNFiXx ─ Ai ─ TE Darth Nihilus PVP FR Guilde : Ascendance Dernière modification par iNFiXx ; 06/01/2012 à 13h04. |
06/01/2012, 11h46 |
|
Aller à la page... |
Un peu de technique ! Lag, FPS, moteur ...
Suivre Répondre |
|
Partager | Rechercher |
|
Merci pour ces précisions
|
06/01/2012, 11h53 |
|
|
C'était sympa à lire
|
06/01/2012, 11h54 |
|
|
Merci
|
06/01/2012, 11h59 |
|
|
Très instructif, merci
|
06/01/2012, 12h02 |
|
|
Très intéressant, merci pour ton analyse.
|
06/01/2012, 12h03 |
|
|
Tres bon post pour le profane et pas si barbare que ça.
|
06/01/2012, 12h04 |
|
|
Joliment rédiger.
|
06/01/2012, 12h10 |
|
|
Très instructif, merci
La partie memory leak aurait pu être développé, pour savoir ce qui fait qu'un jeu en arrive à prendre 4Go de ram, cela aurait été parfait ^^ |
06/01/2012, 12h13 |
|
Roi / Reine
|
Très bon sujet, a épingler moi je dis!
|
06/01/2012, 12h15 |
|
Karnac'h Ec'honder |
Voir le profil public |
Trouver plus de messages par Karnac'h Ec'honder |
|
En sticky en sticky !
Merci pour le temps que ta passé à faire ce super post |
06/01/2012, 12h17 |
|
|
Super post.
Merci beaucoup, ça clarifie plein de points. |
06/01/2012, 12h17 |
|
#90294
Invité
|
Message supprimé par son auteur.
|
06/01/2012, 12h18 |
|
#90294 |
|
Très bien expliqué, merci!
|
06/01/2012, 12h29 |
|
|
Très instructif, merci ^^ !
|
06/01/2012, 12h30 |
|
Suivre Répondre |
Connectés sur ce fil1 connecté (0 membre et 1 invité)
Afficher la liste détaillée des connectés
|