Il y a quelque chose que je n’ai jamais compris. Comment utiliser 50 % de mon CPU et courir à 60 images par seconde, tandis qu’une démo DX d’une théière tournante @ 60fps utilise un bond de 30 % un grand jeu PC grand comme GTA IV ?
Réponses
Trop de publicités?De la Patience, de compétence technique et de l'endurance.
Premier point est qu'un DX de Démonstration est essentiellement une aide à l'apprentissage, donc c'est fait pour plus de clarté, pas de vitesse d'exécution.
C'est vraiment un grand sujet afin de condenser la matière, mais le développement de jeux, c'est d'abord la compréhension de vos données et de vos chemins d'exécution presque pathologique degré.
- Votre code est conçu autour de deux choses: de vos données et de votre matériel cible.
- La manière la plus rapide de code est le code qui n'est jamais exécuté - trier vos données en lots et seulement à procéder à de coûteuses opérations sur les données dont vous avez besoin pour
- La façon dont vous stockez vos données est la clé - objectif pour contiguë accéder à cette fonction vous permet de processus de traitement par lots à grande vitesse.
- Parellise tout ce que vous pouvez éventuellement
- Les Processeurs modernes sont rapides, modernes RAM est très lent. Le Cache sont mortelles.
- Pousser autant pour le GPU comme vous peut - il a rapide de la mémoire locale peut donc passer à travers les données, mais vous devez l'aider à sortir par l'organisation de vos données correctement.
- Éviter de faire beaucoup de renderstate commutateurs ( nouveau lot semblable vertex ensemble ), car cela provoque le GPU de décrochage
- Swizzle vos textures et de s'assurer qu'ils sont des puissances de deux, cela améliore la texture des performances du cache sur le GPU.
- Utilisation LODing autant que vous le pouvez je.e faible/moyen/élevé versions de modèles 3D et de basculer en fonction de la distance à partir de la caméra du joueur - pas de point rendu une haute résolution version si c'est seulement de 5 pixels sur l'écran.
En général, c'est parce que (1) les jeux sont optimales au sujet de ce dont ils ont besoin pour le rendu, et (2) prenez avantage de votre matériel.
Par exemple, il est facile d'optimisation, vous pouvez faire n'implique pas en train d'essayer de dessiner des choses qui ne peuvent pas être vus. Envisager une scène complexe comme un paysage urbain de Grand Theft Auto IV. Le moteur de rendu n'est pas du tout le rendu de l'ensemble des bâtiments et des structures. Au lieu de cela, il est rendu seulement ce que la caméra peut voir. Si vous pouviez voler autour de l'arrière de ces mêmes bâtiments, face à l'appareil photo, vous voyez un demi-construit évidées la structure de sa coquille. Chaque point de l'appareil photo ne peut pas voir n'est pas rendu -- puisque vous ne pouvez pas le voir, il n'y a pas besoin d'essayer de le montrer.
En outre, des instructions optimisées et des techniques spéciales existent lorsque vous êtes à l'encontre du développement d'un ensemble particulier de matériel, pour permettre de meilleures accélérations.
Sur le second point, il est commun pour les graphiques de l'API exemples de revenir à ce qu'on appelle un moteur de rendu logiciel lors de votre matériel ne supporte pas toutes les fonctionnalités nécessaires pour afficher un joli exemple, comme des ombres, de réflexion, de ray-tracing, la physique, et cetera. Cela imite la fonction de complètement matérielle complète de l'appareil qui est peu probable d'exister, dans le but de montrer toutes les fonctionnalités de l'API. Étant donné que le matériel n'existe pas réellement, il s'exécute sur le PROCESSEUR à la place. C'est beaucoup plus inefficace que de déléguer à une carte graphique.
Des jeux en 3D sont grands à tromper vos yeux. Par exemple, il existe une technique appelée l'écran de l'espace ambiant occlusion (SSAO) qui va donner un sentiment plus réaliste par l'observation les parties de la scène qui sont près de la surface de discontinuités. Si vous regardez dans les coins de vos murs, 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é sur plutôt précision de la simulation. Le calcul prend également en compte d'autres effets que de rebondissement, les lumières, etc. mais il est gourmand en ressources - c'est une technique de lancer de rayons.
Ce n'est qu'un exemple. Il y a des centaines d'algorithmes en temps réel de l'informatique graphique et qu'ils sont essentiellement fondées sur les bonnes approximations et généralement faire beaucoup d'hypothèses. Par exemple, le tri spatial doivent être choisis avec soin en fonction de la vitesse, de la position typique de la caméra ainsi que le montant total des modifications apportées à la géométrie de la scène.
Ces "optimisations" sont énormes - vous pouvez mettre en œuvre un algorithme de manière efficace et de faire exécuter 10 fois plus rapide, mais le choix d'un algorithme intelligent qui produit un résultat similaire ("tricherie") peut vous faire aller de O(N^4) à O(log(N)).
L'optimisation de la mise en œuvre effective est ce qui rend le jeux encore plus efficace, mais c'est seulement une optimisation linéaire.
Eeeeek!
Je sais que cette question est ancienne, mais son passionnant que personne n'a mentionné le VSync!!!???
Vous avez comparé l'utilisation du CPU par le jeu à 60fps à l'utilisation de l'UC de la théière de démonstration à 60fps.
N'est-il pas évident, que tous les deux (plus ou moins) exactement à 60fps? Qui mène à la réponse...
Les deux applications s'exécutent avec le vsync activé! Cela signifie (simplifiés) que le rendu framerate est verrouillé à la "verticale vide intervalle" de votre moniteur. Le matériel graphique (et/ou le conducteur) ne sera rendu au max. 60fps. 60 im / s = 60 hz (Hz=par seconde) taux de rafraîchissement. Si vous utilisez probablement un peu vieux, un scintillement de tube CATHODIQUE ou un écran LCD. Sur un écran CATHODIQUE de course à 100Hz vous verrez probablement un framerate de jusqu'à 100 hz. VSync s'applique également dans une manière similaire à écran LCD affiche (ils ont généralement un taux de rafraîchissement de 60 hz).
Ainsi, la théière de démonstration peut effectivement fonctionner beaucoup plus efficace! Si il utilise 30% de temps CPU (par rapport à 50% de temps PROCESSEUR pour GTA IV), puis il utilise probablement moins de temps cpu pour chaque image, et juste attend plus longtemps pour la prochaine vertical, vide intervalle. Afin de comparer les deux applications, vous devez désactiver la vsync et mesurer à nouveau (vous permettra de mesurer beaucoup plus de fps pour les deux applications).
Parfois, c'est ok pour désactiver la vsync (la plupart des jeux ont une option dans les paramètres). Vous verrez parfois des "déchirures artefacts" lors de la vsync est désactivé.
Vous pouvez trouver plus de détails et pourquoi il est utilisé sur wikipédia: http://en.wikipedia.org/wiki/Vsync
Alors que beaucoup de réponses ici de fournir d'excellentes indications de comment je vais plutôt répondre à la simple question de savoir pourquoi
- GTA4 a pris 400 Millions de dollars dans sa première semaine
- Crytech a écrit un très impressionnants graphismes de la démo pour permettre à nVidia de "show off" lors d'un salon. Les impressions que l'on ressent ai la jambe jusqu'à créer ce qui allait devenir FarCry.
- Valve de revenus pour 2005 et un bénéfice d'exploitation ont été déclaré comme 70 et 55 millions de dollars respectivement.
Peut-être le meilleur exemple (certainement l'un des plus connus) est Id software. Ils ont compris très tôt, dans les jours de commander Keen (bien avant que la 3D) qu'à venir avec un moyen astucieux pour réaliser quelque chose1, même si elle s'appuyait sur du matériel moderne (dans ce cas un EGA de la carte graphique!) qui a été graphiquement supérieure à la concurrence que ce serait faire de votre jeu de se démarquer. C'était vrai, mais ils ont en outre rendu compte que, plutôt que d'avoir à venir avec de nouveaux jeux et des contenus eux-mêmes, ils pourraient licence de la technologie, ainsi l'obtention de revenus des autres tout en étant en mesure de développer la prochaine génération de moteur, et donc leap frog la compétition.
Les capacités de ces programmeurs (couplé avec le sens des affaires) est ce qui fait leur richesse.
Cela dit, il n'est pas nécessairement de l'argent qui motive ces gens. Il est probablement tout autant le désir de réaliser, à réaliser. L'argent qu'ils ont gagné dans les premiers jours signifie simplement qu'ils ont du temps à consacrer à ce qu'ils aiment. Et tandis que beaucoup ont des intérêts de l'extérieur, presque tous encore de programme et essayer de travailler sur des façons de faire mieux que la dernière itération.
Mettez simplement la personne qui a écrit la théière démo avait probablement un ou plusieurs des problèmes suivants:
- moins de temps
- moins de ressources
- moins de fidélisation
- moins de la concurrence interne et externe
- moindre objectifs
- moins de talent
Le dernier peut sembler dur2 , mais clairement, il y en a qui sont mieux que d'autres, les "courbes en cloche" ont parfois des extrémités et ils ont tendance à être attirés par l'extrême correspondant extrémités de ce qui est fait avec cette compétence.
La moindre objectifs que l'on est en fait probablement la principale raison. L'objectif de la théière démo est juste que, une démo. Mais pas une démonstration de la part des programmeurs de compétences3. Ce serait une démo d'une petite facette d'un (gros) OS, dans ce cas, DX rendu.
Pour ceux qui regarde la démo, il ne serait pas mater ça il utilisé de façon plus de mémoire que nécessaire , aussi longtemps que il avait l'air bien assez. Il n'y aurait aucun intérêt à éliminer les déchets, quand il n'y aurait pas de bénéficiaire. En comparaison un jeu aimerais avoir des cycles disponibles pour une meilleure IA, un meilleur son, plus de polygones, plus d'effets.
- dans ce cas, le défilement régulier sur le matériel PC
- Probablement plus que moi, donc nous sommes clairs sur ce point
- strictement parlant, il aurait été une démo à son gestionnaire de trop, mais là encore, le lecteur serait ici de temps et/ou de la qualité visuelle.