Un peu de technique ! Lag, FPS, moteur ...

Répondre
Partager Rechercher
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.
Citation :
Publié par iNFiXx
{{ 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. }}
Je confirme ce point, je n'ai pour l'instant que 4Go de ram et en effet, au bout d'un certain temps, il n'y a d'autre choix que de relancer le jeu tellement c'est injouable.
Ces précisions sur le côté technique sont parfaites, malgré tout ce genre de choses ne devrai pas être sur un serveur de MMO...

D'autres jeux prennent tous les paramètres en compte pour fournir un rendu très proche de la réalité, presque en temps réel... Seulement, ces éditeurs la ont fait l'effort d'avoir un moteur développé en interne ou d'avoir les codes sources du moteur acheté et d'avoir fait de grosses modifications dessus...

Bref, pour Star Wars ou autre MMO, cela nuit au gameplay et c'est de plus en plus lourd...
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 ^^
Citation :
Publié par iNFiXx
{{ 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. }}
Ca peut pas être pire que Skyrim qui a sa sortie avais un exécutable 32 bits et donc ne gérait "que" 2 giga de ram ... je te raconte pas le nombre de CTD pour les joueurs PC entre les options à graphiques fond et le memory leak.
Citation :
Publié par Melios
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 ^^
En fait en programmation tu réserve de la mémoire pour les instructions données au client du jeu et par ce biais a ton processeur et ton GPU (Carte graphqiue)...

La fuite de mémoire interviens lorsque les données qui ne sont plus utiles au client ne sont pas libérées de la mémoire RAM du PC, ou du moins pas entièrement. Lorsque cela s'accumule, petit a petit ta RAM est saturée par ces instructions obsolètes non détruites et fais crash le client de jeu.
Message supprimé par son auteur.
Citation :
Publié par iNFiXx
lag // fps
C'est désormais "so classic", mais pourtant je ne peux m'empêcher d'admirer le non-sens complet de certaines conversations sur le /1 !
L'un dit bleu (je suis le seul à lag ?), l'autre répond rouge (vire les ombres), le troisième précise violet (pourtant je rame pas moi, t'es sûr ?).
Merci,
J'ai rajouté le lien pour le memory leak par Wikipédia, c'est bien expliqué.

La partie réseau / netcode on l'avait faite à une époque avec un amis nofrag car sur CS, les gens hurlaient à l'époque du 56K et de l'apparition du 512k en adsl. Mais c'est la même chose sur un mmo :-)
Je savais tout et c'est incomplet mais merci.

Je plaisante, très bonne initiative mais cela n'empêchera pas certain de débiter des conneries sur leur SSD ou leur config sur d'autres topic.
Citation :
Publié par Tundra Liath
C'est désormais "so classic", mais pourtant je ne peux m'empêcher d'admirer le non-sens complet de certaines conversations sur le /1 !
L'un dit bleu (je suis le seul à lag ?), l'autre répond rouge (vire les ombres), le troisième précise violet (pourtant je rame pas moi, t'es sûr ?).

Sauf que SWTOR est le seul jeu où un FPS bas induit un lag.

Exemple : Tatooine en plein désert, 30 FPS, aucune décalage entre une pression de bouton et un départ de skill.

N'importe quelle instance où mon PC rame (c'est à dire beaucoup, mon PC étant vieux, donc je tourne à 7/8 FPS par moment), et je me retrouve avec un lag, un vrai, de facilement 2 secondes par moments.

Doooonc... Moi qui étais le premier à taper sur les doigts des gens qui confondaient ramer et lagger, ben SWTOR est le premier jeu qui me fasse dire le contraire.
Juste une remarque sur l'antialiasing. D'après moi il est bien présent dans le jeu, juste pas dans les options.

Je l'ai activé via un fichier .ini (en rajoutant une ligne AntiAliasingLevel = 8) et ça créé juste quelques bugs de texture pendant les dialogues de quêtes sur les arbres quand il y en a.
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés