IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Affichage des résultats du sondage: Quelle gestion du temps utilisez vous dans vos jeux ?

Votants
6. Vous ne pouvez pas participer à ce sondage.
  • Pas de temps fixe

    1 16,67%
  • Pas de temps variable

    4 66,67%
  • Ca dépend des jeux (merci de préciser)

    1 16,67%
  • Ni l'un, ni l'autre, bien au contraire !

    0 0%
Développement 2D, 3D et Jeux Discussion :

Jeux et temps réel : Quel philosophie ?


Sujet :

Développement 2D, 3D et Jeux

  1. #1
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut Jeux et temps réel : Quel philosophie ?
    Bonjour,

    J'ai été un peu surpris en lisant un exemple de code dans la documentation d'introduction de SFML concernant la gestion du temps dans cette bibliothèque. J'ai une expérience du temps réel, mais pas des jeux, aussi je me demande dans quelle mesure cet exemple est typique ou pas dans ce domaine...

    En gros, le code tournait aussi vite que possible, mesurait le temps qu'il avait mis à s'exécuter, et mettait à jour sa simulation en tenant compte d'un pas d'intégration variable.

    Le mécanisme que j'ai plus souvent vu en temps réel était de faire tourner le programme à un pas de temps fixe, en s'assurant de ne pas avoir de débordements de temps (ou le moins possible, quitte à simplifier les calculs si on ne tient pas), en faisant attendre le système entre deux pas de temps, et en utilisant un pas de temps fixe dans la simulation.

    A priori, je vois les avantages suivants à la première méthode :
    - Moins de soucis à gérer les configurations un peu faiblardes.
    - Possibilité d'afficher des fps à 4 chiffres dans les benchs

    Et les avantages suivants à la seconde :
    - La plupart des méthodes d'intégration numérique marchent mieux à pas fixe
    - Moins de sollicitation du hard (et donc de la batterie pour du développement sur portable, mais aussi bruit de ventilateurs sur une machine classique, réchauffement climatique...)

    Qu'est-ce qui est utilisé généralement dans un jeu de nos jours ?
    Question annexe : Y a-t-il généralement une seule boucle, ou bien des boucles par sous-systèmes (affichage, IA, moteur physique...) pouvant donc avoir leur propres rythmes (par exemple, une IA à 10Hz, mais un affichage à 60Hz).

    Merci de satisfaire ma curiosité !
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 209
    Points
    23 209
    Par défaut
    Bonjour,

    Je trouve ridicule de faire une boucle d'affichage ou une boucle d'IA avec une fréquence supérieur à la fréquence d'affichage ( 60 Hz) et encore...

    Pour l'IA je ne pense pas qu'on ai besoin de recalculer ses actions à effectuer plus de 2 à 5 fois par secondes.

    Par contre en cas de lags, je pense qu'il faut distinguer deux types de jeux :
    - les jeux en lignes ;
    - les jeux hors-lignes.

    Pour les jeux en lignes, c'est surtout le serveur qui importe, et là on va essayer d'avoir aucun débordement de temps, si on se rapproche trop de la limite, on bloque les nouvelles connexions.

    Pour le client en 2D, quelques petits débordements de temps ne devraient pas être bien visible vu qu'il se synchronise régulièrement avec le serveur. Si il y a de trop gros débordements de temps, ce ne sera pas jouable de toute façon.

    Après pour la boucle de rendu dans un jeu 3D, on va généralement activer la vsync puis par dessus on calcule certaines positions (ex : caméra) en fonction du temps car on a un temps non-constant qui peut varier assez vite dès qu'on fait de la 3D ( je crois que Irrlicht le fait).

    Pour les jeux hors-lignes, je pense qu'il faudrait avoir plus de précision sur le type de jeux et de la boucle qui a un débordement de temps.
    Pour un tetris par exemple, je doute qu'on se soucie vraiment d'un débordement de temps.

    Pour les boucles, cela va dépendre du jeux, personnellement j'ai une boucle de rendu avec Irrlicht et une boucle avec boost pour tout le réseau et gestion des timers côté client.
    Côté serveur principal, j'ai une boucle pour accepter les connexions entrantes et un ensemble de thread pour traiter les données reçues.

  3. #3
    Expert confirmé Avatar de yildiz-online
    Homme Profil pro
    Architecte de domaine
    Inscrit en
    Octobre 2011
    Messages
    1 444
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte de domaine

    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 444
    Points : 4 560
    Points
    4 560
    Par défaut
    Chez moi c'est locké à 60 fps coté client et 100 coté serveur(chiffre totalement arbitraire pour le serveur), mais les calculs se font bien sûr en prenant en compte le temps entre chaque frame.

    dans mon moteur de jeu, l'affichage et la physique tournent au même rythme, d'autres composants(mise à jour de certains calculs, ia,...) peuvent tourner à leur propre rythme(soit dans un thread séparé, soit dans la mainloop avec un modulo sur le nombre de frame).
    PXL le retro-gaming facile: Essayez-le

    Yildiz-Engine an open-source modular game engine: Website
    Yildiz-Online a 3D MMORTS in alpha: Facebook page / Youtube page

  4. #4
    Membre expert

    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Février 2006
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 1 031
    Points : 3 092
    Points
    3 092
    Par défaut
    Sur les différents développements professionnels sur lesquels j'ai pu intervenir j'ai toujours vu les calculs en fonction du temps.
    Ça n’empêche pas d'avoir un pas fixe, c'est toujours une valeur sur pour avoir un comportement strictement identique pour des replays par exemple.
    Enfin oui, les taux de rafraîchissement sont souvent différents suivant les systèmes, par exemple l'ia des boss la plus réactive d'Islands of Wakfu avait un taux de rafraîchissement de 50ms, alors que la plupart des ennemis était de 200ms.
    Suivez le développement de Chibis Bomba
    twitter : https://twitter.com/MoD_DiB
    DevBlog : http://moddib.blogspot.fr/

  5. #5
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Si vous faites des calculs en fonction du temps, comment vous y prenez vous pour faire de l'intégration numérique ? Vous vous limitez à des méthodes à un pas de temps, ou alors vous connaissez des méthodes à pas de temps multiple où les pas de temps peuvent être fixés arbitrairement ?
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  6. #6
    Membre averti
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Octobre 2008
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Octobre 2008
    Messages : 187
    Points : 448
    Points
    448
    Par défaut
    Bonjour,

    personnellement, j'ai toujours travaillé avec des pas de temps variables pour mes boucles de jeu. Ce pas est égale au temps passé depuis la dernière frame, clampé à l'intervalle [16ms,500ms] (16ms car c'est parfois dans le cahier des charges d'un jeu, et 500ms en cas de lag pour ne pas perturber le joueur). Après je n'ai jamais programmé de jeu en réseau, je ne sais pas comment gérer le temps dans ce cas.

    Dans les jeux les plus simples, tous les objets sont mis à jour à la même fréquence, et l'on a rarement besoin d'optimiser la boucle de jeu en ce sens.

    Une exception cependant : la physique est TOUJOURS gérée avec un pas de temps fixe, cela pour ne pas perturber la stabilité de la simulation. En effet, si par exemple un ralentissement de 250ms se produit pendant le jeu et que la physique est simulée selon le pas de temps variable, le résultat sera catastrophique. On verra apparaître de nombreux bugs de collisions, le joueur rentrera dans un mur ou pire.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 69
    Points : 142
    Points
    142
    Par défaut
    Il n'y a pas de règle absolue, mais une évidence simple : sur les plate-formes au hardware entièrement connu (consoles, certains smartphones), c'est assez facile de travailler avec un pas fixe après avoir décidé du framerate attendu - en général 30 fps, 60 fps est plus rare. La boucle de jeu est donc asservie au framerate...
    Sur PC, vue la diversité des configurations, la méthode à pas variable est beaucoup plus souple, même si elle est légèrement plus difficile à implémenter. Ça n'est donc pas vraiment surprenant qu'un moteur "générique" comme SFML le retienne.

    Il n'y a pas vraiment de raison de se dire qu'on implémente une boucle à pas de temps fixe pour économiser du temps CPU : un processeur fait forcément quelque chose de toute façon, au pire il exécute un nop ! Si le jeu vidéo avait pour vocation d'économiser de la puissance de calcul, ça se saurait...


    En ce qui concerne le réseau je n'y connais pas grand-chose ; en revanche, pour tout le reste (gestion des entrées, physique, etc.) une boucle de jeu qui fonctionne le plus rapidement possible permet d'avoir un jeu réactif ; ça participe énormément au plaisir de jouer.
    Et pour ça, il vaut mieux s'affranchir de l'affichage, qui reste le truc qui consomme le plus. Surtout sur consoles, d'ailleurs.
    Au passage c'est à mon sens l'une des grosses faiblesses de beaucoup de FPS sur console, et la raison pour laquelle seuls quelques-uns s'en sortent honorablement : ce sont les plus réactifs et ils n'hésitent pas à sacrifier, en qualité d'affichage - en baissant la résolution - au nom de la réactivité.


    Cet article est plutôt bien foutu, il débat de plusieurs implémentations. La conclusion à laquelle il parvient : le meilleur compromis reste une boucle de jeu indépendante du framerate ; du coup on se retrouve avec un pas variable, la règle générale est l'interpolation et la prédiction.

  8. #8
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Merci pour le lien, je vais lire ça.

    Pour l'aspect : Un processeur fait toujours quelque-chose, ce n'est pas vraiment vrai. En fonction de ce qu'on lui demande, il tourne à fréquence variable, et consomme plus ou moins de courant.

    Et en terme d'expérience utilisateur, même si je suis d'accord que la réactivité en fait partie, le fait pour un jeu de ne pas trop en demander sans que ça se voit est aussi un plus. Il y a des jeux auxquels j'ai moins de plaisir à jouer à cause du boucan que se mettent à faire mes ventilateurs dès que je le lance, même sur l'écran d'accueil de de menu, allant jusqu'à couvrir les sons d'ambiance du jeu...
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

Discussions similaires

  1. Réponses: 4
    Dernier message: 30/11/2012, 12h53
  2. Question Netcode Jeux Stratégie temps réel
    Par carton99 dans le forum Réseau et multijoueurs
    Réponses: 2
    Dernier message: 28/11/2012, 13h08
  3. Quel controle pour faire une courbe temp réel ?
    Par stolken dans le forum Framework .NET
    Réponses: 3
    Dernier message: 07/04/2010, 01h16
  4. Quel outil pour une appli graphique "temps réel"
    Par Colargole dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 03/04/2009, 15h08
  5. Webcam, %RGB en temps réel, quel langage?
    Par Bapt.ice dans le forum Windows
    Réponses: 5
    Dernier message: 24/01/2007, 22h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo