Le Lag dans nos simulations

Publié le par lms_oid

Il y a quelques temps je vous parlais dans cet article de ces accidents qui peuvent arriver sans que ce soit la faute de personne, ces accidents dont le seul responsable est le fameux Lag, bête noire du joueur en ligne mais pourtant inévitable dès qu'on utilise des moyens (serveurs et clients) distants de plusieurs milliers de kilomètres. A part en LAN, il n'est pas possible de ne pas avoir un Lag persceptible dans nos simulations, c'est une limitation technique inévitable du fait de la latence entre les clients et les serveurs. J'entends souvent dire que les problèmes de Lags sont liés à la différence de ping entre les pilotes ce qui est totalement faux. La latence ne se soustrait jamais, elle s'additionne toujours... Pour une fois que j'ai l'occasion d'utiliser les connaissances lié à mon activité professionelle (le réseau) pour parler de simulation automobile, je ne vais pas me géner. Prenons un cas d'école pour mieux comprendre de quoi il retourne :


Deux français tournent sur l'ovale de Daytona avec un ping de 150 ms chacun (le serveur est aux Etats-Unis et contrairement à une autre idée reçue, toute communication entre les PCs de nos deux pilotes passe par lui) . Ils roulent à 300km/h. Toute action faite sur la direction, l'accélérateur ou les freins par le premier pilote est connue 150 ms plus tard par le serveur et encore 150 ms plus tard par le PC du second pilote. Il faut donc 300 ms (0,3 s) au second pilote pour voir l'effet de l'action effectuée par le premier pilote. Pendant ces 0,3s, chacune des deux voiture a parcouru 0.3 x 300 x 1000 / 3600 = 25 mètres!!! Cela veut dire par exemple que si les deux voitures sont l'une à côté de l'autre et que le premier pilote change légèrement sa direction de façon à ce que sa trajectoire coupe celle du second pilote dans 20 mètres, les deux voitures se toucheront sans même que le second pilote ait pu le voir...

Le but du netcode est simplement de prédire sur le PC du second pilote et à l'instant t la position du premier pilote à l'instant t+1 (sachant que le netcode connaît postion, vitesse, accélération de la voiture du premier pilote ainsi que position et éventuellement vitesse de déplacement des commandes du premier pilote). Cela marche en général très bien car si une voiture va à 300 km/h avec les roues droites, la linéarité de sa position et de son accélération (les lois de la physique font qu'hors accident, une voiture ne change pas de vitesse ou de direction instantannément) font qu'à t+1 elle sera à une position prévisible à l'instant t. Mais si entre t et t+1 (dans notre exemple t + 300 ms) la voiture du premier pilote subit un brusque changement de direction (freinage d'urgence, accident, virage,...), la prédiction va s'avérer fausse et des problèmes de lag apparaîtront : position érronée des deux voitures (la position est exacte sur le serveur mais subit les phénomènes de "prédictions" sur les deux clients) qui peut conduire à l'accident ou dans les cas extrèmes comme en cas de chocs à la téléportation des voitures. Il faut atténuer quelque peu ce tableau assez sombre. Si vous êtes un amateur de course sur ovale par exemple, apprendre que la voiture de vos adversaires fait 25 mètres avant que votre PC en soit informé doit vous agaçer quelques peu et vous en êtes peut être arrivés à la conclusion que les courses portière contre portière sont impossibles dans nos simulations. Il faut bien avoir en tête que si les informations sur ce que fait le premier pilote mettent 300 ms à arriver au second pilote, ces informations sont envoyées a une fréquence assez élevée ce qui va permettre d'anticiper dans de nombreux cas les changements brutaux de direction ou de vitesse de la voiture du premier pilote. Mais soignez prévenus quand vous êtes à moins de 3 dixièmes de seconde d'une voiture qu'elle peut ne pas être où vous la voyez...

Le meilleur des netcode ne peut rien contre les lois de la physique et de la latence réseau et on ne peut pas en vouloir à l'équipe de développement d'iRacing pour ça. Ce qu'ils arrivent à faire avec une latence à 150 ms est remarquable. Pour reprendre l'exemple, si les deux pilotes bénéficiaient d'un serveur en France à 30 ms, la latence conjuquée serait de 60 ms et la voiture du premier pilote ne parcourerait "que" 5 mètres dans ce laps de temps. Les netcodes des simulations comme rFactor ou Race ne sont à mon sens pas mieux que celui d'iRacing étant donné que même avec des serveurs en France, les problèmes de Lag existent...

Publié dans iRacing - Général

Commenter cet article

lms_oid 21/10/2009 20:07


Pas de problème Alain. Je considère ton livre comme la Bible du SimRacing alors tu imagines bien qu'avoir un de mes articles repris dans un verset de la Bible me comblerait de bonheur!

lms_oid


Alain Lefebvre 21/10/2009 14:01


Très bonne explication du lag !
Je la reprendrais volontiers dans la prochaine édition du livre, si tu es d'accord, of course...


lms_oid 14/10/2009 07:58


Tout à fait d'accord avec toi KingLouie. Je trouve que le netcode est assez remarquable de ce point de vue dans iRacing qui aurait pu être injouable sur des serveurs américains pour nous autres
européens ce qui n'est absolument pas le cas. Chapeau au devs.

lms_oid


KingLouie 13/10/2009 20:45


Dès qu'il y a des maths dans l'air, Golfy n'est pas loin xD

Pour ce qui est des soucis de lag, je trouve qu'il ne faut pas non plus trop se plaindre. Jouer avec 150ms de ping n'est pas envisageable sur un doom like ^^


lms_oid 13/10/2009 20:00


Merci Golfy, il y avait effectivement une boulette. Cela reste quand même énorme 25 mètres. J'ai corrigé.

lms_oid