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

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

FPS et taux de rafraichissement


Sujet :

Développement 2D, 3D et Jeux

  1. #1
    J-F
    J-F est déconnecté
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 10
    Points : 7
    Points
    7
    Par défaut FPS et taux de rafraichissement
    Bonjour,

    Je programme des applis 3D depuis un certain temps, et la question ne m'est jamais venue à l'esprit, mais... Pour une appli qui par exemple, tourne à 120 fps, cela veut dire que la scène est reclaculée 120 fois par seconde, juste? Or, le taux de rafraichissement de l'écran est en general de 60hz, soit 60 images par seconde. Ce qui veut dire grosso modo qu'on calcule largement trop d'image par seconde (puisque de toute façon, elles ne pourront pas être affichée à l'écran). Et une autre question se pose à moi: lorsqu'on échange les buffers à la fin du rendering, l'écran est en general déjà en train de dessiner une image, mettons qu'il est à la moitié. Si on swap le buffer à ce moment là (ce qui est tout à fait possible!), l'écran aura dessiné une moitié d'écran de la frame pécédente, et une moitié d'écran de la frame suivante (bon on aura pas le temps de le voir vu que ça va super vite, mais c'est pas génial non?). Et donc, pour une appli à 120 fps, ça veut dire que ce qui est affiché à l'écran à un instant t n'est jamais une frame complète, mais plutôt une partie de la frame précédente et une partie de la frame actuelle?

  2. #2
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 369
    Points : 40 164
    Points
    40 164
    Par défaut
    bien le bonsoir,

    Citation Envoyé par J-F
    Je programme des applis 3D depuis un certain temps, et la question ne m'est jamais venue à l'esprit, mais... Pour une appli qui par exemple, tourne à 120 fps, cela veut dire que la scène est reclaculée 120 fois par seconde, juste?
    oui

    Or, le taux de rafraichissement de l'écran est en general de 60hz, soit 60 images par seconde. Ce qui veut dire grosso modo qu'on calcule largement trop d'image par seconde (puisque de toute façon, elles ne pourront pas être affichée à l'écran).
    c'et pourquoi on préfèrera limiter le nombre d'images par seconde (et aussi pour laisser le processeur faire d'autres tâches).

    Et une autre question se pose à moi: lorsqu'on échange les buffers à la fin du rendering, l'écran est en general déjà en train de dessiner une image, mettons qu'il est à la moitié. Si on swap le buffer à ce moment là (ce qui est tout à fait possible!), l'écran aura dessiné une moitié d'écran de la frame pécédente, et une moitié d'écran de la frame suivante (bon on aura pas le temps de le voir vu que ça va super vite, mais c'est pas génial non?). Et donc, pour une appli à 120 fps, ça veut dire que ce qui est affiché à l'écran à un instant t n'est jamais une frame complète, mais plutôt une partie de la frame précédente et une partie de la frame actuelle?
    c'était vrai mais actuellement quasiment toutes les applis 3d utilisent le double buffering (voire même le triple ou supérieur). On a un buffer d'affichage et un buffer d'écriture. Et quand on a écrit une frame complète, on interverti les buffers. Ainsi, ce sont toujours des buffers complets qui sont affichés.

    dans la faq SDL : Qu'est-ce que le double buffering ?

  3. #3
    J-F
    J-F est déconnecté
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    khayyam90, je n'ai encore jamais vu un jeu qui bloquait les fps à une certaine limite. Je sais qu'il est possible de synchroniser les fps avec le taux de rafraichissement de l'écran (ce qui fait qu'on est toujours +/- à 60 fps), mais je n'ai jamais vu cette option activée dans des démos, des sources libres ou des jeux commerciaux.

    En ce qui concerne, le double buffering, je connais bien sûr cette technique depuis bien longtemps Mais le double buffering n'empêche pas le problème que j'ai évoqué. On a donc un buffer qui sert à l'affichage (et qui contient la frame précédemment calculée) et le buffer qui sert au dessin de la frame courante. Voici le problème: pour une scène qui tourne par exemple à 200fps, on swappe le buffer après chaque calcule de frame. Donc, bein imaginons que l'écran est en train de dessiné le frame d'affichage. Tout à coup, le renderer vient de terminer le dessin d'une frame. Donc, un swap est forcé, et les buffers d'affichage et d'écriture sont échangés. L'écran, lui, n'a eu le temps que d'afficher par exemple le tiers de la frame précédente, et soudain, swap oblige, il dessine la frame calculée juste après! On se retrouverait donc avec sur l'écran 1/3 de la frame précédente, et 2/3 de la frame suivante. Et je ne vois pas en quoi le double buffering règle ce problème.

  4. #4
    Membre régulier
    Inscrit en
    Juillet 2005
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 80
    Points : 85
    Points
    85
    Par défaut
    Tu peux activer la synchronisation verticale, ainsi le swap buffer va bloquer jusqu'à ce que l'affichage du buffer courant se termine. De plus, cette option va aussi obliger l'application à rouler à la même fréquence que le moniteur. Donc en allant tout simplement activer une clé dans le controle panel de ta carte vidéo, tu pourras régler tes 2 problèmes.

  5. #5
    J-F
    J-F est déconnecté
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Sorry d'insister, mais comme je l'ai dis dans mon précédent message, je sais parfaitement qu'on peut synchroniser les swaps avec les vsync de l'écran. Mais encore une fois, cette option n'e'st jamais jamais jamais jamais activée, dans quelques jeux commerciaux que ce soit, et dans toutes les sources amateurs que j'ai pu voir. DONC j'en conclus que ces swaps incontrôlés ne posent finalement pas de problème (en tout cas à l'oeil nul, on ne remarque rien), mais c'était simplement pour avoir confirmation.

  6. #6
    Membre régulier
    Inscrit en
    Juillet 2005
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 80
    Points : 85
    Points
    85
    Par défaut
    qu'est-ce que tu veux dire par cette option n'est jamais jamais jamais activé? Tu ne l'actives jamais, jamais, jamais? L'application n'a pas besoin de le supporter explicitement, tu peux toi même forcer la synchronisation verticale et l'application n'aura pas le choix de suivre, en tout cas moi c'est ce que je fais. Si le swap n'est pas synchronisé verticalement, tu auras un problème de rendu, c'est à toi de déterminer si c'est acceptable, pour moi ça ne l'est pas.

  7. #7
    J-F
    J-F est déconnecté
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    gybe, je veux dire que moi-même pour mes applis, je n'active jamais la synchronisation, et que la plupart des applis que je connaisse (bon bein les jeux pour tout dire), ne la forcent pas non plus.

    Ce qui me parait bizarre, c'est que au delà de 60fps (si on a un taux de rafraichissement de 60hz), on devrait voir des artefacts apparaître vu que le nombre d'images par seconde calculée est bien trop grand. Pourtant rien. A 2 ou 300 fps, il n'y a rien d'anormal qui se produit.

    Et pourtant... Comment expliquer ce "miracle"?

  8. #8
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    sis i, des artefact apparaissent bien, et pas forcement au dessus de 60 hz (d'ailleur a l'heure actuelle, les ecran CRT tournent tous a 85 hz ou presque...)
    pour voir les artefactes, il suffit de tourner tres vite la camera sans avoir activée la synchro verticale, et tu verra peut etre apparaitre des sortes de bandes dans le rendu, c'est que la carte est en train de réecrire le front buffer... en même temps, vu que tu tourne a plus de 60 hz avec ton ecran, c'est a peine perceptible, et generalement ca ne gene que les pro-gamer
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  9. #9
    J-F
    J-F est déconnecté
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Hé bien là, tu m'apprends quelque chose!

  10. #10
    Rédacteur

    Avatar de loka
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    2 672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 672
    Points : 5 509
    Points
    5 509
    Par défaut
    et bien je crois que nous sommes 2 à avoir appris quelquechose

    merci bafman ça m'interessais aussi de savoir ça :p

  11. #11
    Membre éprouvé
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Points : 1 249
    Points
    1 249
    Par défaut
    gybe, je veux dire que moi-même pour mes applis, je n'active jamais la synchronisation, et que la plupart des applis que je connaisse (bon bein les jeux pour tout dire), ne la forcent pas non plus.
    La pluspart des jeux que je croise ont le réglage v-sync dans leurs options. Après on peut toujours l'ignorer pour gagner quelques fps (surtout quand on voit pas la différence ). De plus comme l'a dit gybe les drivers de la carte 3D permettent généralement de forcer ce genre de réglage, comme ça l'appli n'a plus son mot à dire.

    Sinon il y a le triple buffering pour avoir un affichage toujours propre sans avoir à attendre le rafraichissement.

  12. #12
    mat.M
    Invité(e)
    Par défaut
    Citation Envoyé par khayyam90
    c'et pourquoi on préfèrera limiter le nombre d'images par seconde (et aussi pour laisser le processeur faire d'autres tâches).
    euhh pas forcément car l'intêret des cartes accéleratrices 3d c'est de gérer entièrement l'affichage et le calcul des images; le processeur de la carte graphique est entiérement dédié à ce travail.C'est aussi le travail de Direct X de partager les taches en fonctions des composants.
    Tout dépend évidemment de la puissance de la carte 3d: si elle n'est pas assez puissante alors évidemment le CPU central sera sollicité auquel cas il faudra limiter le nombre de fps.
    Par exemple dans MS Flight Simulator on peut limiter le nombre de fps



    Citation Envoyé par JF
    On se retrouverait donc avec sur l'écran 1/3 de la frame précédente, et 2/3 de la frame suivante. Et je ne vois pas en quoi le double buffering règle ce problème.
    il n'ya, en théorie, pas de problème d'affichage car c'est une pile d'images stockées dans la VRAM .
    C'est la carte vidéo qui met en tampon les images envoyées.


Discussions similaires

  1. [FEDORA] Taux de rafraîchissement bloqué à 50Hz
    Par julien.63 dans le forum RedHat / CentOS / Fedora
    Réponses: 12
    Dernier message: 21/08/2006, 23h43
  2. Probleme de rafraichissement d'un BDGrid
    Par marmotte dans le forum Bases de données
    Réponses: 10
    Dernier message: 28/05/2004, 18h07
  3. Toujours un problème de rafraichissement de DBGrid
    Par tripper.dim dans le forum C++Builder
    Réponses: 4
    Dernier message: 09/12/2002, 13h15
  4. Timage rafraichissment
    Par Rizzla dans le forum Composants VCL
    Réponses: 5
    Dernier message: 16/09/2002, 17h08

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