Le problème insaisissable de synchronisation de trame


Le directeur technique de Croteam, Alain Ladawach, qui a participé au développement de Serious Sam et Talos Principle, raconte comment il a réussi à trouver la raison du ralentissement graphique, même sur les machines les plus puissantes.

Enfin, une explication est apparue des raisons pour lesquelles certains jeux ralentissent sur votre PC (et une lueur d'espoir qu'ils cesseront de ralentir dans un proche avenir).

Freins TT


Vous attendiez avec impatience la prochaine partie de votre série de jeux vidéo PC préférée et elle est finalement sortie. Cette fois, vous voulez en profiter dans son intégralité, vous avez donc dépensé de l'argent et du temps pour une préparation minutieuse. Vous avez remplacé le processeur, installé une carte graphique ultra-moderne, ajouté plus de RAM - diable, vous avez même acheté du RAID sur un SSD. Le jeu doit être fluide depuis l'économiseur d'écran lui-même.

La précommande est enfin déverrouillée et vous venez de terminer l'installation. Dans une attente nerveuse, vous démarrez le jeu pour la première fois. Jusqu'ici tout va bien - il fonctionne à 60 images par seconde. Ou du moins, c'est ce que dit le compteur de cadres du tuner GPU. Mais quelque chose ne va pas. Vous effectuez des mouvements vifs et chaotiques avec la souris. Strap gauche et droite, puis le jeu ... commence à ralentir! Merde, comment est-ce possible? Comment peut-il ralentir à 60 images par seconde?

Si cela ne vous est jamais arrivé, cela peut sembler ridicule. Mais si vous en avez fait l'expérience, vous détestez très probablement les freins de tout votre cœur. Freins dans les jeux. Ce n'est pas un bon vieux "décalage". Pas une faible fréquence d'images. Ce ne sont que des «freins» se produisant à des fréquences d'images élevées sur des machines idéales et ultra-rapides. Qu'est-ce que c'est, d'où viennent-ils et comment s'en débarrasser? Permettez-moi de vous raconter une histoire ...

Freins, douceur, vitesse ... sont-ils une seule et même chose?


Les jeux vidéo tournent à 60 images par seconde depuis l'époque des premières machines d'arcade dans les années 70. Il est généralement prévu que le jeu s'exécute à la même fréquence que l'affichage utilise. C'était avant la popularisation des jeux 3D, dans lesquels pour la première fois une fréquence d'images réduite devenait acceptable. Dans les années 90, lorsque les « cartes 3D » (comme nous les appelions avant qu'elles ne deviennent des « GPU ») ont commencé à remplacer le rendu logiciel, les gens jouaient à 20 ips, et 35 ips étaient considérés comme une valeur décente pour les batailles réseau sérieuses. Je ne plaisante pas .

Aujourd'hui, nous avons des voitures ultra-rapides et " bien sûr, elles peuvent fonctionner à 60 ips ". Cependant, le nombre d'utilisateurs déçus par la vitesse des jeux utilisateur n'est jamais plus grand. Comment est-ce possible? Le problème n'est pas que les jeux ne fonctionnent pas assez vite, mais qu'ils ralentissent même lorsqu'ils peuvent courir vite !

Si vous lisez différents forums de jeux, vous trouverez sûrement des messages similaires:

image

Vous pourriez penser que ce sont des problèmes uniques, mais regardez les statistiques des requêtes de recherche Google:

image

Au cours des cinq dernières années, les freins (bégaiements) sont devenus un problème (relativement) plus grave que la vitesse!

(Notez que ce sont des valeurs relatives. Cela ne signifie pas qu'en général les gens demandent plus sur le freinage que sur la fréquence d'images. Ils signifient que les demandes de fréquence d'images restent au même niveau et que le nombre de demandes de freins augmente. , surtout récemment.)

Une décennie à la recherche de la cause des freins inexplicables


image

Le patient est probablement plus vivant que mort, ralentit juste un peu plus que nécessaire.

J'ai rencontré ce problème pour la première fois vers 2003. Nous avons travaillé sur Serious Sam 2 , et les utilisateurs ont commencé à nous envoyer des rapports selon lesquels ils testaient quelque chose à un niveau vide et que lors du déplacement de la souris, les mouvements n'étaient pas fluides. Cela s'est accompagné d'un motif très caractéristique sur le graphique de la fréquence d'images, que nous avons appelé le «cardiogramme».

Nous pensions que quelque part dans le code il y avait un bug, mais nous ne l'avons pas trouvé. Il semblait que le problème apparaisse et disparaisse au hasard - après avoir redémarré l'application, redémarré la machine ... puis le lecteur a changé une option de vitesse et elle a disparu. Le joueur a ensuite réactivé cette option, mais le problème n'est pas revenu. Elle ressemblait à un fantôme.

De toute évidence, ce problème ne se pose pas seulement chez nous. En regardant les mêmes problèmes dans d'autres jeux, nous avons commencé à penser que les pilotes étaient à blâmer. Mais cela s'est produit sur des cartes vidéo de différents fabricants. Même sur différentes API (OpenGL, DirectX 9, DirectX 11 ...) - la seule chose qu'ils avaient en commun était qu'ils apparaissaient sur différentes machines, dans certaines scènes ... parfois.

image

Nessie, bigfoot ... presque aussi insaisissable que le problème avec le "cardiogramme".

Nous avons sorti quelques autres jeux, mais ce comportement étrange est toujours apparu et a disparu. Cela a agacé certains utilisateurs et nous leur avons recommandé de changer les options de vitesse - parfois cela a aidé, parfois non. C'est la vie, non?

Mais un jour, par une belle journée d'hiver au début de 2013, mon collègue Dean m'a appelé pour voir un autre exemple de ce problème, qu'il pourrait reproduire de manière relativement stable à ce moment-là. Cette fois, le problème est survenu au niveau de Serious Sam 3 . Nous avons expérimenté les options de cette scène jusqu'à ce qu'elle me vienne à l'esprit. J'ai compris quelle en était la raison! Et elle était très simple - pas étonnant qu'elle se soit éloignée de tout le monde pendant une douzaine d'années.

En changeant une seule option très simple du moteur de jeu, nous avons pu faire apparaître et disparaître ce problème dans cette scène particulière. Mais il est immédiatement devenu évident pour nous que beaucoup d'efforts seraient nécessaires pour sa solution de haute qualité. Des efforts non seulement de notre part, mais aussi sur l'ensemble de l'écosystème du jeu sur PC - programmeurs de pilotes GPU, développeurs d'API, fournisseurs de systèmes d'exploitation - tout le monde.

Laisse-moi t'expliquer.

Quelle était la raison pendant tout ce temps


Je voudrais vous montrer un exemple d'une scène de Serious Sam 3, que Dean et moi avons exploré il y a cinq ans. Ou encore mieux - en utilisant la scène de test de Serious Sam 2 comme exemple, dans laquelle nous l'avons vue pour la première fois. Mais, malheureusement, après avoir remplacé le «fer», cette bête insaisissable peut passer à une autre scène. J'ai une scène de The Talos Principle dans laquelle j'ai récemment réussi à reproduire ce problème, et j'ai tourné quelques vidéos qui m'ont permis de l'analyser plus en détail.

Mais avant de commencer, assurez-vous de regarder la vidéo à 60 ips. Pour afficher les exemples ci-dessous, passez en 1080p60, comme indiqué dans l'image:

image

Pour regarder la vidéo à 60 ips, passez à YouTube en 1080p60.

Si vous faites tout correctement et que votre ordinateur et votre navigateur Web peuvent afficher la vidéo à 60 images par seconde, la vidéo ci-dessous devrait être lue sans à-coups et sans freins. Si ce n'est pas le cas, c'est pourquoi nous en parlons - de nombreuses autres applications démontrent également ce comportement, pas seulement les jeux. Pour l'instant, je ne peux que vous recommander d'essayer de regarder la vidéo sur une autre machine, ou simplement de lire le texte.


Vérifiez, vérifiez, un, deux, trois ... Vous devriez voir cette vidéo en 60 images par seconde.

Passons maintenant aux choses sérieuses. Si vous rencontrez des freins, cela ressemble probablement à ceci:


« 60 fps». «».

, «», 60 fps. - , , « ». , ( , - «» ). « », , - , . 60 fps, « ». ( , , .)

(«»), YouTube . (), . , . , , …



, ? ? , ?..

, , , !

?


. «», 1/20 , :


60 fps, «». 20 .

: -, — , . -, - - — «» , , .

: — — — «»… «» . , ?

(, ( 1/10 000 ), : , …

image

. — , — «».

… , «» ( ). , , , ( ).

… «», « », ?

, , . ( , , , .)


-, - … , , . NTSC, 60 , 60 fps, PAL/SECAM, 50 , 50 fps. - « ».

, — , " ", ZX Spectrum, C64, Atari ST, Amstrad CPC 464, Amiga .. , , , 100% , .

«». , , . , Sonic The Hedgehog Sega Genesis , , 16 . PAL NTSC, 50 fps 60 fps. , .

— , PC «» — , . , . 3D-, , . , — , … . , .

, . ( , «» - , .)

, , . 1/60 (16,67 ), 10 /, 1/6 . 1/60 , 1/30 (33,33 ), 1/3 ( «») , .

? , . , . , . 90- ( «35 fps » ), . ( , GPU) «» «», . 3D-, . , .


GPU, "". , GPU - , GPU , , GPU . , GPU, « », GPU . - . — - . , , .

, , , … . . , :

image

. — , — «».

, . 16,67 ( 1/60 ), , , . () , 24,8 ( 1/60 ), , … , , 10,7 , , - . ( .)

: , , , , PC. , 60 fps, - , . - GPU 60 fps .

— , («») .

, , — , .

. ( , — , ?), :


«», , .

«». «» , !

? Serious Engine sim_fSyncRate=60. , « , 60 fps». — , ! , — , .

? ?

?


— . . , 60, 60 — PC : - , GPU/… — .

, , , — - . ?

, / , .

, ? , — !

, . , API. , , , . , , API , : , . , , .

?


, . API. Vulkan API VK_GOOGLE_display_timing, proof of concept. , Android Linux.

API. ? , .

, Croteam , , .

, , The Talos Principle .


. « », . , , , , .

«»


image

? , . - , ?

« », . , , , , , Skype .. 3D. , , . .

. , — ?


, GPU , , . , GPU . , , . , .


. :) GPU . , GPU . , .

Source: https://habr.com/ru/post/fr419043/


All Articles