Il y a quelque chose que je n'ai jamais compris. Comment un grand jeu PC comme GTA IV peut-il utiliser 50% de mon processeur et fonctionner à 60 ips alors qu'une démo DX d'une théière rotative à 60 ips utilise 30%?
Il y a quelque chose que je n'ai jamais compris. Comment un grand jeu PC comme GTA IV peut-il utiliser 50% de mon processeur et fonctionner à 60 ips alors qu'une démo DX d'une théière rotative à 60 ips utilise 30%?
Réponses:
En général, c'est parce que
Par exemple, une optimisation simple que vous pouvez faire consiste à ne pas essayer de dessiner des choses qui ne peuvent pas être vues. Considérez une scène complexe comme un paysage urbain de Grand Theft Auto IV . Le moteur de rendu ne rend pas réellement tous les bâtiments et structures. Au lieu de cela, il ne rend que ce que la caméra peut voir. Si vous pouviez voler à l'arrière de ces mêmes bâtiments, face à la caméra d'origine, vous verriez une structure de coque évidée à moitié construite. Chaque point que la caméra ne peut pas voir n'est pas rendu - puisque vous ne pouvez pas le voir, il n'est pas nécessaire d'essayer de vous le montrer.
De plus, des instructions optimisées et des techniques spéciales existent lorsque vous développez sur un ensemble particulier de matériel, pour permettre des accélérations encore meilleures.
L'autre partie de votre question est de savoir pourquoi une démo utilise autant de CPU:
... alors qu'une démo DX d'une théière rotative à 60 ips utilise 30%?
Il est courant que les démos d'API graphiques (comme dxdemo
) reviennent à ce qu'on appelle un moteur de rendu logiciel lorsque votre matériel ne prend pas en charge toutes les fonctionnalités nécessaires pour montrer un bel exemple. Ces caractéristiques peuvent inclure des éléments tels que les ombres, la réflexion, le lancer de rayons, la physique, et cetera.
Cela imite la fonction d'un périphérique matériel entièrement complet qui est peu susceptible d'exister, afin de montrer toutes les fonctionnalités de l'API. Mais comme le matériel n'existe pas réellement, il fonctionne à la place sur votre CPU. C'est beaucoup plus inefficace que de déléguer à une carte graphique - d'où votre utilisation élevée du processeur.
Patience, compétence technique et endurance.
Le premier point est qu'une démo DX est avant tout un outil pédagogique, donc c'est fait pour plus de clarté et non pour la rapidité d'exécution.
C'est un sujet assez important à condenser, mais le développement de jeux consiste principalement à comprendre vos données et vos chemins d'exécution à un degré presque pathologique.
Les jeux 3D sont parfaits pour tromper vos yeux. Par exemple, il existe une technique appelée occlusion ambiante de l'espace d'écran (SSAO) qui donnera une sensation plus réaliste en ombrageant les parties d'une scène proches des discontinuités de surface. Si vous regardez les coins de votre mur, vous verrez qu'ils apparaissent légèrement plus foncés que les centres dans la plupart des cas.
Le même effet peut être obtenu en utilisant la radiosité, qui est basée sur une simulation assez précise. La radiosité prendra également en compte plus d'effets des lumières rebondissantes, etc., mais elle est coûteuse en calcul - c'est une technique de traçage de rayons.
Ceci n'est qu'un exemple. Il existe des centaines d'algorithmes pour l'infographie en temps réel et ils sont essentiellement basés sur de bonnes approximations et font généralement beaucoup d'hypothèses. Par exemple, le tri spatial doit être choisi très soigneusement en fonction de la vitesse, de la position typique de la caméra ainsi que de la quantité de changements apportés à la géométrie de la scène.
Ces `` optimisations '' sont énormes - vous pouvez implémenter un algorithme efficacement et le faire fonctionner 10 fois plus vite, mais choisir un algorithme intelligent qui produit un résultat similaire ("tricherie") peut vous faire passer de O (N ^ 4) à O ( log (N)).
L'optimisation de la mise en œuvre réelle est ce qui rend les jeux encore plus efficaces, mais ce n'est qu'une optimisation linéaire.
Eeeeek!
Je sais que cette question est ancienne, mais c'est excitant que personne n'ait mentionné VSync !!! ???
Vous avez comparé l'utilisation du processeur du jeu à 60 ips à l'utilisation du processeur de la démo de la théière à 60 ips.
N'est-il pas évident que les deux fonctionnent (plus ou moins) à exactement 60 ips? Cela conduit à la réponse ...
Les deux applications fonctionnent avec vsync activé! Cela signifie (abrégé) que la fréquence d'images de rendu est verrouillée sur «l'intervalle vide vertical» de votre moniteur. Le matériel graphique (et / ou le pilote) ne sera rendu qu'au max. 60 ips. 60fps = 60Hz (Hz = par seconde) taux de rafraîchissement. Vous utilisez donc probablement un tube cathodique assez ancien et scintillant ou un écran LCD commun. Sur un tube cathodique fonctionnant à 100 Hz, vous verrez probablement des fréquences d'images allant jusqu'à 100 Hz. VSync s'applique également de la même manière aux écrans LCD (ils ont généralement une fréquence de rafraîchissement de 60 Hz).
Ainsi, la démo de la théière peut en fait fonctionner beaucoup plus efficacement! S'il utilise 30% du temps CPU (par rapport à 50% du temps CPU pour GTA IV), il utilise probablement moins de temps CPU à chaque image et attend juste plus longtemps le prochain intervalle vide vertical. Pour comparer les deux applications, vous devez désactiver vsync et mesurer à nouveau (vous mesurerez des fps beaucoup plus élevés pour les deux applications).
Parfois, il est correct de désactiver vsync (la plupart des jeux ont une option dans ses paramètres). Parfois, vous verrez des "artefacts déchirants" lorsque vsync est désactivé.
Vous pouvez trouver des détails sur celui-ci et pourquoi il est utilisé sur wikipedia: http://en.wikipedia.org/wiki/Vsync
Bien que de nombreuses réponses ici fournissent d'excellentes indications sur la façon dont je vais plutôt répondre à la question plus simple de savoir pourquoi
Le meilleur exemple (certainement l'un des plus connus) est peut-être le logiciel d'identification. Ils ont réalisé très tôt, à l'époque de Commander Keen (bien avant la 3D), que proposer un moyen astucieux de réaliser quelque chose 1 , même si cela reposait sur du matériel moderne (dans ce cas une carte graphique EGA!) Graphiquement supérieur à la concurrence que cela ferait ressortir votre jeu. C'était vrai, mais ils ont en outre réalisé que, plutôt que d'avoir à créer eux-mêmes de nouveaux jeux et contenus, ils pouvaient obtenir une licence pour la technologie, obtenant ainsi des revenus d'autres personnes tout en étant en mesure de développer la prochaine génération de moteurs et ainsi de sauter à nouveau la concurrence. .
Les capacités de ces programmeurs (associées à leur sens des affaires) sont ce qui les a rendus riches.
Cela dit, ce n'est pas nécessairement l'argent qui motive ces personnes. C'est probablement tout autant le désir de réaliser, d'accomplir. L'argent qu'ils ont gagné au début signifie simplement qu'ils ont maintenant du temps à consacrer à ce qu'ils aiment. Et bien que beaucoup aient des intérêts extérieurs, presque tous continuent de programmer et d'essayer de trouver des moyens de faire mieux que la dernière itération.
En termes simples, la personne qui a écrit la démo de la théière a probablement eu un ou plusieurs des problèmes suivants:
Le dernier peut sembler dur 2 mais il y en a clairement qui sont meilleurs que d'autres, les courbes en cloche ont parfois des extrémités extrêmes et elles ont tendance à être attirées par les extrémités extrêmes correspondantes de ce qui est fait avec cette compétence.
Les objectifs moindres sont probablement la principale raison. L'objectif de la démo de la théière était juste cela, une démo. Mais pas une démonstration de la compétence des programmeurs 3 . Ce serait une démo d'une petite facette d'un (gros) OS, dans ce cas le rendu DX.
Pour ceux qui regardent la démo, cela n'aurait pas d'importance, il utilisait beaucoup plus de CPU que nécessaire tant que cela semblait assez bon. Il n'y aurait aucune incitation à éliminer les déchets lorsqu'il n'y aurait pas de bénéficiaire. En comparaison, un jeu aimerait avoir des cycles de rechange pour une meilleure IA, un meilleur son, plus de polygones, plus d'effets.
Pour plusieurs raisons
EDIT: Pour donner quelques chiffres
2,8 Ghz Athlon-64 avec GPU NV-6800. Les résultats sont:
Parfois, une scène peut avoir plus de choses qu'il n'y paraît. Par exemple, une théière rotative avec des milliers de sommets, un mappage d'environnement, un mappage de relief et d'autres shaders de pixels complexes rendus simultanément équivaut à beaucoup de traitement. Souvent, ces démos de théière sont simplement destinées à montrer une sorte d'effet spécial. Ils peuvent également ne pas toujours tirer le meilleur parti du GPU lorsque les performances absolues ne sont pas l'objectif.
Dans un jeu, vous pouvez voir des effets similaires, mais ils sont généralement effectués de manière compromise afin de maximiser la fréquence d'images. Ces optimisations s'étendent à tout ce que vous voyez dans le jeu. Le problème devient: "Comment pouvons-nous créer la scène la plus spectaculaire et la plus réaliste avec le moins de puissance de traitement?" C'est ce qui fait des programmeurs de jeux l'un des meilleurs optimiseurs du marché.
D'après toutes les réponses qualifiées et bonnes données, celle qui compte manque toujours: le compteur d'utilisation du processeur de Windows n'est pas très fiable. Je suppose que cette simple démo de théière appelle simplement la fonction de rendu dans sa boucle inactive, bloquant le swap de tampon.
Désormais, le compteur d'utilisation du processeur Windows regarde simplement le temps processeur passé dans chaque processus, mais pas la manière dont ce temps processeur est utilisé. Essayez d'ajouter un
Sleep(0);
juste après le retour de la fonction de rendu, et comparez.
De plus, il existe de nombreuses astuces d'un point de vue artistique pour économiser de la puissance de calcul. Dans de nombreux jeux, en particulier les plus anciens, les ombres sont précalculées et «cuites» directement dans les textures de la carte. Plusieurs fois, les artistes ont essayé d'utiliser des plans (deux triangles) pour représenter des choses comme des arbres et des effets spéciaux alors que cela ressemblait à peu près au même. Le brouillard dans les jeux est un moyen simple d'éviter de rendre des objets éloignés, et souvent, les jeux auraient plusieurs résolutions de chaque objet pour les vues de loin, moyennes et proches.
Le cœur de toute réponse devrait être celui-ci - Les transformations que les moteurs 3D effectuent sont principalement spécifiées dans des additions et des multiplications (algèbre linéaire) (pas de branches ni de sauts), les opérations d'un dessin d'une seule image sont souvent spécifiées de manière à multiplier ces tâches add-mul peuvent être effectuées en parallèle. Les cœurs GPU sont très bons add-mul's, et ils ont des dizaines ou des centaines de cœurs add-mull.
Le processeur doit faire des choses simples - comme l'IA et d'autres logiques de jeu.
Comment un grand jeu PC comme GTA IV peut-il utiliser 50% de mon processeur et fonctionner à 60 ips alors qu'une démo DX d'une théière rotative à 60 ips utilise 30%?
Bien que GTA soit probablement plus efficace que la démo DX, mesurer l'efficacité du processeur de cette manière est essentiellement cassé. L'efficacité peut être définie, par exemple, par la quantité de travail que vous effectuez à un moment donné. Un contre-exemple simple: créez un thread par CPU logique et laissez une simple boucle infinie s'exécuter dessus. Vous obtiendrez une utilisation du processeur de 100%, mais ce n'est pas efficace, car aucun travail utile n'est effectué.
Cela conduit également à une réponse: comment un jeu peut-il être efficace? Lors de la programmation de «grands grands jeux», un effort énorme est consacré à l'optimisation du jeu sous tous ses aspects (ce qui, de nos jours, inclut généralement des optimisations multi-cœurs). Quant à la démo DX, son objectif n'est pas de courir vite, mais plutôt de démontrer des concepts.
Je pense que vous devriez jeter un œil à l' utilisation du GPU plutôt qu'au CPU ... Je parie que la carte graphique est beaucoup plus occupée dans GTA IV que dans l'échantillon Teapot (elle devrait être pratiquement inactive).
Vous pourriez peut-être utiliser quelque chose comme ce moniteur pour vérifier que:
http://downloads.guru3d.com/Rivatuner-GPU-Monitor-Vista-Sidebar-Gadget-download-2185.html
Le framerate est également quelque chose à considérer, peut-être que l'échantillon de théière fonctionne à pleine vitesse (peut-être 1000fps) et la plupart des jeux sont limités à la fréquence de rafraîchissement du moniteur (environ 60fps).
Regardez la réponse sur vsync; c'est pourquoi ils fonctionnent à la même fréquence d'images.
Deuxièmement, le processeur manque de tête dans un match. Une explication simplifiée est que la boucle de jeu principale n'est qu'une boucle infinie:
while(1) {
update();
render();
}
Même si votre jeu (ou dans ce cas, la théière) ne fait pas grand-chose, vous consommez toujours du processeur dans votre boucle.
Le processeur à 50% dans GTA est "plus productif" que les 30% dans la démo, car il est fort probable qu'il ne fait pas grand-chose du tout; mais la GTA met à jour des tonnes de détails. Même l'ajout d'un "Sleep (10)" à la démo fera probablement chuter son processeur d'une tonne.
Regardez enfin l'utilisation du GPU. La démo prend probablement <1% sur une carte vidéo moderne tandis que la GTA prendra probablement la majorité pendant le jeu.
En bref, vos repères et vos mesures ne sont pas précis.
La démo de la théière DX n'utilise pas 30% du processeur pour un travail utile. Il est occupé à attendre parce qu'il n'a rien d'autre à faire.
D'après ce que je sais de la série Unreal, certaines conventions sont rompues comme l'encapsulation. Le code est compilé en bytecode ou directement en code machine selon le jeu. En outre, les objets sont rendus et emballés sous la forme d'un maillage et des éléments tels que les textures, l'éclairage et les ombres sont précalculés alors qu'une animation 3D pure l'exige en temps réel. Lorsque le jeu est en cours d'exécution, il existe également des optimisations telles que le rendu uniquement des parties visibles d'un objet et l'affichage des détails de la texture uniquement en gros plan. Enfin, il est probable que les jeux vidéo soient conçus pour tirer le meilleur parti d'une plateforme à un moment donné (ex: Intelx86 MMX / SSE, DirectX, ...).
Je pense qu'il manque ici une partie importante de la réponse. La plupart des réponses vous indiquent "Connaissez vos données". Le fait est que vous devez, de la même manière et avec le même degré d'importance, connaître également votre:
MAIS , en plus de cela, avec les ordinateurs modernes actuels, vous ne seriez jamais capable de lire une vraie vidéo 1080p à >> 30ftp (une seule image 1080p en 64 bits prendrait 15 000 Ko / 14,9 Mo). La raison en est à cause de l'échantillonnage / précision. Un jeu vidéo n'utiliserait jamais une double précision (64 bits) pour les pixels, images, données, etc ..., mais utiliserait plutôt une précision personnalisée inférieure (~ 4-8 bits) et parfois moins de précision redimensionnée avec des techniques d'interpolation pour permettre un calcul raisonnable temps.
Il existe d'autres techniques telles que le découpage des données (à la fois avec la norme OpenGL et l'implémentation logicielle), la compression de données, etc. Gardez également à l'esprit que les GPU actuels peuvent être> 300 fois plus rapides que les processeurs actuels en termes de capacité matérielle. Cependant, un bon programmeur peut obtenir un facteur 10-20x, à moins que votre problème ne soit entièrement optimisé et complètement parallélisable (en particulier la tâche parallélisable).
Par expérience, je peux vous dire que l'optimisation est comme une courbe exponentielle. Pour atteindre des performances optimales, le temps nécessaire peut être extrêmement important.
Donc pour revenir à la théière, vous devriez voir comment la géométrie est représentée, échantillonnée et avec quelle précision Vs voit dans GTA 5, en terme de géométrie / textures et le plus important, les détails (précision, échantillonnage, etc.)