Jump to content
  • 0
Kate

Quake 3 Lagometer

Question

Enemy Territory provides a small graph with some network information which can be enabled by setting cg_lagometer to 1. Although this is not a feature specific to ET Pro, it has never been well-documented.

The lagometer consists of two graphs--the upper is the frame graph, and the lower is the snapshot graph. New data is added to the frame graph every time the client renders a frame (so this graph will move faster at higher framerates), and new data is added to the snapshot graph every time a snapshot packet is received from the server.

The snapshot graph is the easiest to understand--it is essentially a graph of the latency (ping) between you and the server. The graph's colors provide some additional information: green is normal, yellow indicates that the snapshot was delayed so that the server would not exceed the rate value (either rate on your client, or sv_maxRate on the server, whichever is lower), and red indicates that a snapshot was lost entirely (i.e. a snapshot sent by the server never made it to the client, probably due to network problems.)

 

Illustration:

lagometer-snap.png

 

In the above image, arrow 1 points to a normal snapshot with a ping of about 130ms, arrow 2 points to 700ms of packet loss, and arrow 3 points to 2 snapshots that were delayed to stay under the rate limit.

The frame graph is a little more complicated, and requires some background information about how Enemy Territory's network code works for a full understanding. In Enemy Territory, each client runs at a non-fixed frame rate (depending on configuration, system performance, etc.) while the server runs at a fixed rate of 20 frames per second. After running each frame, the server will send a snapshot to every client (so long as the client's snaps and rate settings allows it) describing everything that has changed since the previous snapshot. When the client receives this snapshot, it interpolates the values between the old snapshot and the snapshot that was just received--that is, it smooths out the movement so that things in the map don't appear to be jumping around when the client is drawing frames faster than the server is sending them. If the client doesn't receive a snapshot, it may have to guess where an object is going to be in order to keep things looking normal.

The client and the server each keep track of the current game time, and the differences between these times are expressed in the frame graph as well as object movement. For a simple example of this, imagine that the server has sent you two snapshots, snapshot a at time 12350, and snapshot b at time 12400�, and then imagine that the client's current time is 12375. The client will interpolate� the position sent in snapshot a and in snapshot b to determine that the object in question should be drawn in the middle of the two points sent (because 12375 (the time our client is drawing for) is exactly halfway between 12350 and 12400.)

In the situation presented in the previous paragraph, imagine the client's time is 12425 and that no additional snapshots have been received yet. In order to maintain fluid motion, the client will need to guess where objects will be (using the last known position, angle, and velocity.) The calculation for this is quite not as easy to explain, so an example has been omitted for brevity.

The frame graph in the lagometer represents how far the time used for currently drawn image is away from the most recently received snapshot, and whether the client interpolated or extrapolated to obtain the positions used. Normally, the client interpolates positions, which is represented in blue on the lagometer; the graph height will spike downwards when a new snapshot is received, then crawl upwards towards the baseline), although it will sometimes be yellow to indicate extrapolation (and the graph will crawl upwards away from the baseline as the client extrapolates farther and farther from the last known data.) Since the cl_timenudge cvar causes the world to be rendered a certain number of milliseconds behind or ahead of the client's internal time, negative values may cause extrapolation during normal gameplay. For example, in the first situation described above (where the client's time is 12375), a cl_timenudge value of -30 would end up pushing the time used for rendering up to 12405 (which is newer than the data we have), so a small amount of extrapolation (5ms) would be required here.

 

Illustration:

lagometer-frame.png

 

In the above image, arrow 1 points to an interpolated frame immediately after a new snapshot was received, and arrow 2 points to a frame where a fair bit of extrapolation was performed.

Footnotes:
� Note the increase of exactly 50 -- remember that the server is running at 20 frames per second, so:

 

1 frame �
1000ms (1 second)

20 frames
= 50ms

� This is technically called linear interpolation (the simplest interpolation method), which is sometimes abbreviated to lerping.

Share this post


Link to post
Share on other sites

1 answer to this question

Recommended Posts

  • 0

Lagomêtre
Enemy Territory propose un petit graphique avec certaines informations sur le réseau qui peut être activé par la cvar cg_lagometer à 1. Bien que ce n'est pas une caractéristique spécifique à l'ET Pro, il n'a jamais été bien documenté.

Le lagomêtre se compose de deux graphiques :

  • - La partie supérieure est le graphe de trame
    - La partie inférieure est le graphe instantané.

De nouvelles données sont ajoutées à la trame graphique chaque fois que le client rend une frame (la manière que ce graphique se déplace plus rapidement à haute fréquence d'images), et de nouvelles données sont ajoutées à la courbe instantané à chaque fois qu'un paquet instantané est reçu du serveur.

Snapshot Graph
Le graphique instantané (Snapshot Graph) est plus facile à comprendre - il s'agit essentiellement d'un graphique de la latence (ping) entre vous et le serveur. Les couleurs du graphique fournient des informations supplémentaires:

  • - Le vert est normal
    - Le jaune indique que les Snapshot ont été réduits afin que le serveur ne dépasse pas la valeur du taux (soit le taux de votre client, ou sv_maxrate sur le serveur, si elle est inférieure)
    - Le rouge indique que les Snapshot ont été entièrement perdus (Probablement en raison de problèmes de réseau.)
lagometer-snap.png


Dans l'image ci-dessus, la flèche qui pointe vers 1 est un aperçu plus ou moins normal avec un ping de 130ms environ, la flèche 2 est à environ 700ms de perte de paquets, et la flèche de 3 à 3 Snapshot qui ont été réduits.

Frame Graph
Le graphique de trame (Frame Graph) est un peu plus compliqué, et nécessite quelques informations de base sur la façon dont le code réseau Enemy Territory fonctionne pour une compréhension complète. Dans Enemy Territory, chaque client fonctionne à une cadence non-fixe (selon la configuration, les performances du système, etc) alors que le serveur fonctionne à un taux fixe de 20 images par seconde. Après l'exécution de chaque trame, le serveur va envoyer un snapshot à chaque client (tant que le client s'enclenche et les paramètres de taux le permette) décrivant tout ce qui a changé depuis le snapshot précédent. Lorsque le client reçoit ce cliché, il interpole les valeurs entre le snapshot et le vieux cliché qui vient d'être reçu - qui est, il adoucit le mouvement de sorte que les choses dans la carte ne semblent pas être sautées autour.

Le client et le serveur garde à chaque fois une trace du temps de jeu en cours, et les différences entre ces heures sont exprimées dans le Fram Graph ainsi que le mouvement de l'objet. Pour un exemple simple, imaginez que le serveur vous ai envoyé deux clichés, snpashot "a" un temps de 12350, et "b" le snapshot au moment de 12400, puis imaginez que le temps actuel du client est 12375. Le client sera interpolé par la position émise dans le snapshot "a" et dans l'instantané "b" pour déterminer que l'objet en question doit être établi au milieu des deux points à envoyer (parce que 12375 (le temps de notre client est l'élaboration d') est exactement à mi-chemin entre 12350 et 12400.)

Dans la situation présentée dans le paragraphe précédent, imaginez que le temps du client est 12425 et qu'aucunes snapshots supplémentaires ont encore été reçues. Afin de maintenir un mouvement fluide, le client aura besoin de deviner où les objets seront (en utilisant la dernière position connue, l'angle et la vitesse.) Le calcul de celle-ci est tout à fait aussi compliqué à expliquer.


Le Frame Graph dans le lagometer représente dans quelle mesure le temps utilisé pour l'image actuellement établi est loin du snapshot le plus récemment reçu. Normalement, le client interpole les positions, ce qui est représenté en bleu sur le lagometer : 
La hauteur graphique sera à la baisse quand un nouvel snapshot est reçu, mais il sera parfois jaune pour indiquer l'extrapolation (et le graphique grimpe vers le haut loin de la ligne de base que le client extrapole plus loin et plus loin des dernières données connues). 
Depuis la cvar cl_timenudge fait que tout le monde soit rendu un certain nombre de millisecondes derrière ou à l'avance interne du client, des valeurs négatives peuvent provoquer une extrapolation pendant le jeu normal. 

Par exemple, dans la première situation décrite ci-dessus (où le temps du client est 12375), une valeur de -30 cl_timenudge finirait par pousser le temps utilisé pour le rendu à 12 405 (ce qui est plus récent que les données dont nous disposons), de sorte qu'une petite montant de l'extrapolation (5ms) serait nécessaire ici.

lagometer-frame.png


Dans l'image ci-dessus, la flèche 1 pointe vers une image interpolée immédiatement après qu'un nouveau cliché ai été reçu, et la flèche 2 pointe à une frame où de l'extrapolation a été effectuée.

FPSometer
En etpro, cg_lagometer 2 remplace la norme lagometer ET avec un graphique du temps de trame. La hauteur des barres indique le temps requis pour rendre une image, et ils sont codés par couleur comme suit :

  • Rouge> 35ms
    Jaunes> 20 ms
    Vert <= 20 ms


Note :
En etpro, cg_lagometer 2 remplace la norme lagometer ET avec un graphique de la trame ¹ la note de l'augmentation de exactement 50 - Rappelez-vous que le serveur tourne à 20 images par seconde, donc :

formule.png


² Ce qui est techniquement appelé interpolation linéaire (la méthode la plus simple interpolation), ce qui est parfois abrégée en lerping.

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.

×