Jump to content

[CENTRA] [CG] Le V-sync (ou synchronisation verticale)


Recommended Posts

De retour, avec cette fois-ci un topic sur le V-sync qui est à mon gout trop souvent critiqué ou méconnus des joueurs PC.

Pour commencer qu'est ce que le V-sync ? Pour cela rappelons le fonctionnement simplifié d'une carte graphique: pendant un jeu vidéo cette dernière, afin de pouvoir afficher une image, doit faire de très nombreux calculs à partir des données qu'envoie le CPU. Lorsqu'elle a terminé le calcul sur une image elle stocke cette dernière sur une mémoire appelée le frame buffer avant d'être affichée à l'écran. Cet mémoire contient par défaut deux images (double buffering): celle qui est actuellement envoyée à l'écran et celle qui est actuellement en calcul par le GPU.

Malheureusement la communication avec l'écran se fait à intervalle (ou fréquence) fixe qui est généralement de 60 images par secondes (Hz), de ce fait il n'est pas possible d'envoyer chaque image que la carte graphique à terminé de calculer en temps réel.

Il y a donc deux solutions à ce problème:

Solution 1: Dès qu'une nouvelle image est prête dans le frame buffer le circuit qui s'occupe de la connexion à l'écran passe à cette image et libère l'ancienne image pour que le GPU puisse démarrer le calcul de la prochaine, l'écran peut être à n'importe quel point de l'image précédente (à la moitié, au trois quart, à quelques lignes du début peu importe) lors du passage à la nouvelle image, ainsi l'écran va afficher la nouvelle image au point où en était la dernière. Si on prend une photo de l'écran, on verra qu'il y a deux images affichées à l'écran: un morceau de l'ancienne image avec un morceau de la nouvelle. Le raccord entre ces deux images (qui est situé à l'endroit où en était le balayage de l'écran au moment de l'envoi de la nouvelle image) va créer une sorte de ligne horizontale aussi appelée déchirure ce qui n'est vraiment pas esthétique évidemment. Ce phénomène peut être amplifié lorsque le PC est assez rapide pour calculer plusieurs images dans l'intervalle d'un rafraichissement d'écran. Ainsi on peux avoir plusieurs morceaux d'images à l'écran et donc plusieurs "déchirures".

C'est ce qui ce passe lorsque le V-sync est désactivé.

Exemple:

tearing.jpg

Solution 2: Lorsqu'une nouvelle image est prête dans le frame buffer, on attend la fin de l'envoi de la dernière image avant d'envoyer la nouvelle ainsi l'écran n'affichera toujours qu'une seule image à la fois. Le problème c'est que n'ayant que deux emplacement dans le frame buffer, le GPU doit attendre que l'emplacement de l'ancienne image soit libéré (c'est-à-dire qu'elle soit complètement envoyée à l'écran) avant de pouvoir commencer à travailler sur la prochaine image, ce qui va engendrer une perte de performance. C'est là qu'intervient le triple buffering (triple mise en mémoire tampon): dans ce cas le frame buffer peut contenir trois images, celle actuellement affichée à l'écran, la suivante prête à être affichée et celle actuellement en calcul par le GPU. Ainsi le GPU peut prendre de l'avance car il n'a pas besoin d'attendre que l'affichage de l'image en cour soit terminé pour commencer ces calculs, malheureusement cela ce fait au détriment d'un temps de réponse entre un mouvement de souris et l'affichage de son résultat. Ce temps est relativement faible (33 ms en 60hz), mais peu parfois être gênant dans certains FPS très rapides.

Point important concernant le SLI/CF (en mode AFR, je ne parlerai pas du mode SFR qui de toute façon est de moins en moins utilisé dans les profils des jeux)

Dans le cas d'un système SLI/CF, le problème est le même sauf qu'il y a un frame buffer unique et commun pour les deux (voir trois ou quatre) GPU et que ce dernier contient au moins une image par GPU présent dans le système + 1. Ainsi en SLI le frame buffer contient trois images: celle en cours d'affichage sur l'écran, celle actuellement calculé par le GPU n°1 et celle actuellement calculé par le GPU n°2. Le soucis avec ce système c'est que les GPU n'ayant pas la même image à calculer leurs temps de calcul peuvent être différent d'un GPU à l'autre, il arrive par exemple qu'un GPU termine sont calcul très peu de temps après que l'autre l'ai terminé! Sans le V-sync cela signifie qu'en plus d'avoir des déchirures certaines images ne seront pas complètement affichés perdant ainsi le bénéfice de la fluidité du SLI. Le V-sync permet donc d'améliorer la fluidité en évitant les saccades en multi-gpu puisqu'un GPU doit attendre la fin de l'affichage de l'image calculé par l'autre GPU avant d'afficher la sienne.

Avantages et inconvénients du V-sync

Avantages:

-Permet de supprimer les déchirures d'images

-Lorsque le PC est assez rapide pour que le nombre d'images par seconde >= fréquence de l'écran on obtient la meilleur fluidité possible

-Lorsque le PC est assez puissant (ou le jeu un peu ancien) pour dépasser largement la fréquence de rafraichissement de l'écran, le V-sync permet de diminuer la charge car le PC sera limité par le taux de rafraichissement, donc il consommera moins, chauffera moins et fera mois de bruit.

-En SLI/CF permet d'augmenter la fluidité et d'éviter les saccades liées à la synchro entre les GPU.

Inconvénients:

-En double buffering lorsque le PC n'est pas capable de fournir l'image à temps il doit attendre le prochain rafraichissement et donc perdre en performance, cette perte est très réduite en activant le triple buffering mais toujours présente surtout lorsque le jeu est très gourmand.

-Le V-sync introduit un temps de latence entre une interaction utilisateur et son affichage, ce problème est surtout présent lorsque le triple buffering est activé.

Idées reçues sur le V-sync

Idée reçu N°1: Le v-sync limite les performance de mon PC

Réponse: Oui c'est vrai, lorsque le PC est déjà lent dans un jeu (moyenne d'images par seconde inférieur au rafraichissement de l'écran) activer le V-sync ne va pas l'aider. En revanche lorsque le PC est largement assez puissant pour le jeu en question activer le V-sync permettra d'augmenter la fluidité tout en diminuant la charge sur le CPU et la CG.

Idée reçu N°2: Mon jeu est plus fluide avec 400images/s qu'avec 60

Réponse: Faux, pour commencer l'écran ne peut afficher qu'un nombre limité d'images par seconde, ensuite l'½il perçoit de façon beaucoup plus fluide une image entière plutôt que des fragments d'images. Essayez sur un vieux jeu d'activer le V-sync vous verrez.

Mes conseils pour l'utilisation du V-sync:

Si dans un jeu votre taux d'images par seconde moyen est toujours en dessous de la fréquence de rafraichissement de votre écran alors laissez-le désactivé sauf si vous ne supportez pas les déchirures.

Si votre taux d'images par seconde moyen est au alentours de la fréquence de rafraichissement de votre écran alors activez le V-sync avec le tripple buffering sauf si vous ressentez la latence de réaction, dans ce cas désactivez le V-sync.

Si votre taux d'images par seconde moyen est supérieur à la fréquence de rafraichissement de votre écran alors activez le V-sync sans le tripple buffering. Vous obtiendrez la meilleur fluidité possible.

Une petite illustration, pour ceux qui aiment les graphiques (comme moi)

vsync.png

Une dernière chose à propos des jeux (ou des applications): certains proposent le paramètre directement dans les options, dans ce cas utilisez cette option plutôt que de le forcer dans le driver, si l'option n'est pas présente dans le jeu, il faudra utiliser les drivers, mais chaque jeu ayant sa façon de gérer ça le résultat peu parfois être mauvais (déchirures qui restent et performances en baisse, en somme c'est un peu comme avec l'anti-aliasing: c'est du cas par cas)

Voilà! Amusez-vous bien avec l'option synchronisation verticale!

Link to comment
Share on other sites

Très INtéressant ! :yes:

Un vieux (2003) dossier de NoFrag sur le framerate pour compléter le tout.

Pour ma part, je rajouterais que certains jeux étant adapté à la truelle depuis les consoles, le V-Sync est à double tranchant. Certains jeux tournent à à bien plus que la fréquence de mon écran (75Hz), mais pourtant le V-Sync les rends injouable. Cas d'école : Dead Space dont les commandes laggent à mort si l'option est activée.

Link to comment
Share on other sites

Ce qui est dommage c'est qu'on ne sait pas si le tripple buffering pour le directX render est activé ou pas par défaut, il faut installer riva tuner pour savoir. Mais il me semble que chez ATI c'est activé et qu'en OPENGL c'est au choix :/

Link to comment
Share on other sites

Ce qui est dommage c'est qu'on ne sait pas si le tripple buffering pour le directX render est activé ou pas par défaut, il faut installer riva tuner pour savoir. Mais il me semble que chez ATI c'est activé et qu'en OPENGL c'est au choix :/

Chez ATI et Nvidia le V-sync est désactivé par défaut sauf si l'application/le jeu demande le V-sync. Pour le tripple buffering il est par défaut désactivé chez Nvidia (sauf si dans la config du jeu) et désactivé en OpenGL chez ATI, l'option n'étant pas présente pour DirectX, je crois qu'il est activé par défaut.

:dix:

C'est l'une des options que je cherche à activer en priorité...

Quand elle n'est pas dispo, je farfouille pour l'activer. (ex: fichiers .inf)

Ça me semble le minimum INdispensable !

Et oui mais malheureusement les développeurs parfois oublient cette option, par exemple dans la demo de Crash Time 4, elle n'est pas présente, et je n'ai pas trouvé de fichier de config à exploiter. En forçant le V-sync dans les drivers les déchirures sont toujours TRES présentes...

Il faut que j'édite mon poste pour parler du SLI/CF car il y a un point important avec le V-sync dont il faut parler...

Link to comment
Share on other sites

  • 1 month later...

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...