Quel est un moyen réalisable de définir des budgets de contenu (par exemple, le nombre de polygones) pour le contenu de niveau dans un titre 3D?


13

En répondant à cette question pour swquinn , la réponse a soulevé une question plus pertinente à laquelle j'aimerais entendre des réponses. Je posterai notre propre stratégie (promets de ne pas l'accepter comme réponse), mais j'aimerais en entendre d'autres.

Plus précisément: comment établir un budget raisonnable pour votre équipe de contenu. Habituellement, l'une des toutes premières questions posées dans un développement est: quel est notre budget polygonal? Bien sûr, de nos jours, il est rare que le nombre de vertex / poly seul soit le facteur limitant, à la place la complexité du shader, le taux de remplissage, la complexité de l'éclairage, tous entrent en jeu.

Ce que l'équipe de contenu veut, ce sont des chiffres / limites durs à respecter, de telle sorte qu'elle puisse raisonnablement s'attendre à ce que son contenu, une fois qu'il entre réellement dans le moteur, ne soit pas trop lourd. Étant donné que «cela dépend» n'est pas une réponse particulièrement utile, j'aimerais entendre une stratégie qui me permette de leur donner des limites exploitables sans être a) trompeuse ou b) erronée.


1
C'est plus une "pré-production" qu'une "production".
Patrick Hughes

Réponses:


5

D'après ma compréhension, il est beaucoup plus facile de réduire la complexité d'un modèle que d'ajouter des détails pour un modèle qui a été dépouillé et truqué. Je sais que certaines entreprises en profitent en regroupant des actifs très détaillés et en les réduisant en fonction de la situation.

Valve le fait avec leurs PNJ. Les PNJ sont modélisés dans les moindres détails sans aucune sorte de mappage, puis réduisent les détails à un niveau acceptable par la technologie actuelle et des astuces telles que diverses techniques de mappage appliquées sur la base de modèles détaillés (ou même créées automatiquement).

Cela aide également à l'épreuvage futur car vous n'aurez jamais besoin de recréer les actifs, seulement les tweek pour chaque nouveau projet. Cela présente également l'avantage qu'il n'est pas nécessaire d'attendre qu'une équipe effectue une analyse comparative spécifique au contexte avant que les actifs puissent commencer à être développés. Les artistes peuvent être pleinement impliqués dès le premier jour.


2
Ce n'est pas vraiment un budget: "rendez-le aussi complexe que vous le souhaitez et nous le réduirons plus tard" est une stratégie de production. : - /
MrCranky

16

D'accord, notre stratégie est donc:

  • Créez une géométrie d'espace réservé, à peu près à la bonne échelle pour le contenu final. Cela peut être des bâtiments ou des personnages. Il ne doit pas ressembler au contenu final, il peut s'agir de boîtes / sphères / etc., mais il doit être pavé de manière à avoir un nombre décent de polygones. Si vous faites des personnages, faites-leur avoir un nombre représentatif d'os.
  • Vous pouvez également utiliser la géométrie de quelqu'un d'autre. Si vous avez un titre dont vous essayez de faire correspondre le niveau de qualité, trouvez un moyen de récupérer leurs modèles (peut-être en utilisant un grabber de scène DirectX).
  • Assurez-vous que votre géométrie comporte un shader représentatif. Si vous prévoyez de mélanger plusieurs textures, faites-le, même si les textures sont toutes d'une seule couleur. Assurez-vous que les textures sont des résolutions non triviales, même si elles sont toutes d'une seule couleur.
  • Mettez un nombre raisonnable de lumières.
  • Placez la caméra dans un endroit réaliste, en montrant la plus grande quantité de géométrie possible (par exemple, debout sur une colline en regardant au-dessus du niveau)
  • Chargez la scène sur votre matériel cible le plus lent et le plus rapide et mesurez les FPS.
  • Faites varier les quantités de géométrie / lumières / ombrages / résolution de texture vers le haut ou vers le bas pour avoir une idée des compromis (par exemple, vous pouvez avoir une douzaine de lumières supplémentaires, mais vous devez réduire le nombre de poly de moitié).

Enfin: soyez prudent avec vos chiffres. Le rendu n'est pas la seule chose que votre jeu devra faire, alors décidez de la proportion de votre image que vous souhaitez consacrer au rendu et faites-en votre cible. Par exemple, si vous souhaitez passer les deux tiers de votre image à un rendu de 30 ips, ciblez 1 s / 22 ms (45 ips) dans vos tests.

De tout cela, vous devriez pouvoir donner des exemples de scènes. Par exemple, voici une scène avec 200K polygones, 5 lumières statiques et pas plus de 3 lumières dynamiques par modèle, avec 15 caractères de 50K polys et 30 os, et elle fonctionne à 60 images par seconde et occupe 30 Mo en mémoire.


2
tl; dr: Benchmark it yourself;)
Nicol Bolas

+1 C'est vraiment le seul moyen, construire et mesurer.
Patrick Hughes

Vraiment? J'espérais qu'il y aurait une solution plus intelligente / moins chère à laquelle nous n'avions pas pensé.
MrCranky

@MrCranky malheureusement, oui. Si vous utilisez un moteur existant, vous pouvez démarrer le processus en mesurant les données d'échantillons existantes et en les utilisant comme base de référence pour personnaliser les chiffres de votre jeu en particulier - chaque jeu est différent.
Patrick Hughes

4

Nombre de sommets

Je fais des recherches sur le «nombre de polygones» depuis plus de 15 ans. Il n'y a aucun moyen strict de dire combien est votre limite, en particulier avec des logiciels et du matériel plus modernes. Les limites étaient beaucoup plus utiles dans les moteurs qui ne prenaient en charge que 4000 triangles pour un niveau entier. Maintenant, vous constaterez que la plupart des objets dans l'environnement de jeu dépasseront cela individuellement.

Ce qui compte en fin de compte, c'est ce que fait le moteur avec les bandes de polygones.

Lorsque le moteur rend chaque modèle, il prend vos coordonnées mappées UV, la texture / le matériau représenté sur les triangles et crée des bandes de triangle. Dans la plupart des cas, un ventilateur triangulaire est divisé en bandes de triangle séparées par triangle. Cela augmente le nombre de bandes triangulaires et diminue les performances.

Un excellent exemple de fixation est le sommet plat d'un cylindre. Les packages 3D configurent généralement un éventail triangulaire avec un sommet au centre. Je supprime les bords et le sommet central, puis crée des quadruples sur la face. Cela devrait ensuite trianguler en une seule bande triangulaire au lieu de plusieurs bandes simple face, sans changer le nombre de polygones.

Prenez le nombre de polygones comme guide et prenez soin de la façon dont vous modélisez, puis cartographiez le maillage UV. Moins de fentes dans le maillage lorsque la cartographie UV peut souvent être plus bénéfique.

Ensuite, considérez ce qui peut être truqué avec des cartes normales. Un visage plat avec beaucoup de détails est généralement mappé normalement. Les courbes doivent seulement être rondes où vous pouvez voir une silhouette. Lorsque vous regardez de face les faces incurvées, vous ne devriez pas remarquer la différence entre votre ensemble haute résolution et l'asset de résolution de jeu. La silhouette est ce qui fait la différence dans votre modèle lorsque des cartes normales sont impliquées. La silhouette peut maintenant être modifiée avec DirectX 11, en utilisant la tessellation et le mappage de déplacement.

Le design du jeu

Tenez compte des éléments suivants lors de la conception de votre jeu:

  1. Définissez le type de jeu (par exemple, action / aventure / course / scroller)
  2. Définir le type de vue (par exemple, première personne / troisième personne / orthographique)
  3. Définissez la puissance de calcul de votre marché. (p. ex. passionné / joueur occasionnel)
  4. Créez un style visuel que vous souhaitez réaliser. Voulez-vous qu'il ressemble, par exemple, à Crysis 2, Borderlands, Bloodforge ou Gears of War?
  5. Définissez les objets importants pour le joueur. Vos accessoires vont-ils être un centre d'intérêt ou simplement une toile de fond?
  6. Les mailles visuelles sont-elles aussi le maillage de collision?

À l'aide des types de jeu et de vue, décidez de la profondeur de vue. Allez-vous voir des objets éloignés, et avec quelle clarté? Faites-vous quelque chose avec une vue limitée, comme un tireur de couloir? (par exemple. Gears of War) Faites-vous quelque chose d'itinérance libre avec des paysages ouverts? (par exemple, Skyrim)

Une fois que vous savez à quoi cela devrait ressembler, vous pouvez rechercher des jeux similaires.

L'animation limitera alors votre capacité à augmenter le nombre de polygones. Maillages statiques, tout ce qui reste dans la même position est moins cher sur le GPU et le CPU. Surtout si ce ne sont pas des objets physiques. Pour les objets physiques, vous pouvez souvent créer de simples coques de collision et des maillages visuels complexes. Il n'y a pas assez d'interaction dans la plupart des jeux pour remarquer la différence. L'animation déplace votre modèle en 3 dimensions, avec plusieurs os par sommet, se mélangeant entre la pondération de chacun d'eux. Cela peut être coûteux en temps CPU, ce qui peut entrer en conflit avec l'IA et la physique logicielle. Plus le nombre de sommets affectés par le nombre d'os dans le modèle entier diminuera les performances du processeur. C'est l'autre raison pour laquelle les personnages du jeu sont considérés comme de «l'art». Il est très difficile de définir une limite de polygone.

Mon exemple

J'utilise l'UDK, créant un jeu de tir à la troisième personne au rythme lent, avec un nombre limité de joueurs et de PNJ à l'écran à tout moment. Pour cela, je vise environ 10 000 triangles par joueur, 5 000 triangles pour des ennemis typiques et génériques, et si je faisais un personnage de style «boss», environ 15 000. De plus, les armes pour la troisième personne autour de 4000 triangles seront très détaillées. Véhicules environ 10 000 triangles. Tout nécessitera un niveau de détail, car j'ai besoin de longues distances de vue.

Si je fais une première personne, je baserais les bras sur environ 2 000 triangles, l'arme autour de 5 000 triangles, avec une cartographie normale pour chacun.

Conclusion

C'est ce que "ça dépend" signifie probablement, mais j'ai pensé que cela pourrait clarifier certaines choses que les gens se demandent souvent.

  1. Utilisez le nombre de polygones comme guide.
  2. Regardez les zones qui pourraient être cartographiées normalement au lieu d'être modélisées.
  3. Soyez prudent lorsque vous placez des ventilateurs triangulaires, si possible, créez une bande.
  4. Utilisez moins de divisions sur le maillage lors de la cartographie UV, en gardant les bandes à l'esprit.

2

Une méthode à laquelle je pense est d'utiliser des scènes construites automatiquement pour générer des données statistiques à partir desquelles vous pouvez déchiffrer les informations que vous recherchez.

  1. Obtenez un grand volume d'actifs (pourrait potentiellement être généré automatiquement).

  2. Créez un outil pour générer des scènes qui peuvent être chargées par votre moteur à l'aide du pool d'actifs.

  3. Exécutez un bot qui déplacera votre caméra autour de la scène. Vous pouvez également exécuter d'autres robots pour rendre la scène plus dynamique, y compris les lumières.

  4. Collectez autant d'informations que possible et jetez-les dans une base de données; fps, nombre de poly, changements de shader, nombre de lumières, appels de tirage, etc.

  5. Créez / obtenez des outils pour afficher les données dans votre base de données de la manière la plus large possible.

Ce lien peut fournir d'autres idées: Dead Rising Tools


J'aime bien cette réponse, car elle aborde la partie la plus chère de notre propre stratégie: quelqu'un doit faire l'effort de construire des scènes représentatives. La génération d'algorithmes ou de scripts pour placer rapidement un grand nombre d'actifs de taille sensible accélérerait considérablement la création d'une scène testable. Je vais accepter la réponse la plus populaire, mais je pense que celle-ci vaut la peine.
MrCranky
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.