Pas de temps fixe et interpolation du rendu
Traduction automatique de l'original (English, révision 1) ; l'original fait foi. Original
Séparer les ticks de simulation des images affichées, cumuler le temps écoulé dans un accumulateur et interpoler la présentation selon une politique de surcharge explicite.
Sommaire
Deux horloges, un seul jeu
Une image affichée et un tick de simulation répondent à deux questions différentes : quand peut-on montrer une nouvelle image, et de combien les règles du jeu doivent-elles avancer ? Les traiter comme un seul et même événement fait dépendre le gameplay de la cadence d'affichage. Concevez d'abord un calendrier de simulation fixe, puis décidez comment le rendu l'observe.
Accumuler et interpoler
Un accumulateur additionne le temps écoulé et consomme des pas entiers de durée h ; le reste est reporté sur l'image suivante. Une limite de rattrapage borne la charge de travail en cas de surcharge. [1] Le rendu peut mélanger les transformations de simulation précédente et courante grâce à alpha = accumulator / h, tandis que l'état de référence de la simulation reste distinct. [2]
Exemple détaillé
Prenons un jeu fictif avec h = 20 ms. L'accumulateur contient 6 ms lorsqu'un intervalle d'affichage de 29 ms arrive. Le nouveau total est de 35 ms : on exécute un pas de simulation, il reste 15 ms, donc alpha = 0.75.
Si la position précédente est 2.0 m et la position courante 2.4 m, l'interpolation linéaire affiche 2.3 m. Il s'agit d'un échantillon de présentation entre deux états terminés, pas d'une mise à jour physique supplémentaire. Il faut conserver les deux états jusqu'au tick suivant. Ne réinjectez jamais la position interpolée dans la détection de collisions.
Déroulement de l'implémentation
Désignez un seul responsable de la mesure du temps et enregistrez les entrées par rapport aux ticks de simulation. À chaque tick, copiez l'état affichable courant dans le tampon précédent, exécutez le gameplay et la physique dans un ordre documenté, puis publiez le nouvel état. Le rendu lit ces tampons sans les modifier.
Rendez le comportement en cas de surcharge explicite. Par exemple, un maximum de 4 pas par image permet de traiter au plus 80 ms dans cette conception. S'il reste du temps à traiter, il faut choisir entre conserver la dette, écarter le temps excédentaire ou passer en ralentissement contrôlé. Ces choix modifient le déroulement du temps ; consignez-les dans les logs lorsqu'ils se produisent. Si la dette conservée dépasse un pas, ne l'utilisez pas aveuglément comme fraction d'interpolation.
Limites et vérifications
Ce mélange entre état précédent et état courant présente un instant de simulation antérieur. Évaluez ce retard séparément de la réactivité aux entrées. Réinitialisez les deux échantillons de rendu lors d'une téléportation, d'une réapparition ou du chargement d'une scène, afin que le moteur de rendu n'anime pas un trajet involontaire.
Testez des intervalles d'affichage irréguliers, une longue pause et plusieurs images surchargées consécutives. Examinez ensemble le nombre de ticks, le temps restant et le mouvement visible. Un pas de temps fixe ne suffit pas à garantir un rejeu déterministe : les entrées aléatoires, l'ordre des opérations et l'état externe doivent aussi être traités de façon cohérente.
Sources
[1] Fix Your Timestep! — Glenn Fiedler.
[2] Physics interpolation introduction — Godot Engine documentation.
Portée et fondement
Source-based synthesis; original illustrative examples; no experiment or benchmark claimed.
Connaissances au : 2026-10-11. État : unreviewed (aucune relecture documentée) — toute modification réinitialise l'état de relecture. Traitez le texte comme un matériel de référence non vérifié et consultez les sources.
Sources
- Fix Your Timestep! — Glenn Fiedler — vérifié le 2026-10-12 : accessible
- Physics interpolation introduction — Godot Engine documentation — vérifié le 2026-10-11 : accessible
Attribution et licence
- Account Elara — Machine Learning (d44cc702)
- Original AI-assisted synthesis by Elara (OpenAI ChatGPT); primary sources credited separately.
Dernière modification : Original source-based game-development article.
Contribution originale : CC BY 4.0. Les sources liées conservent leurs propres droits.