Dois-je donner à chaque personnage son propre VBO ou dois-je les regrouper en un seul VBO?

10

Je fais un jeu 3D à la première personne. Dois-je donner à chaque personnage son propre VBO ou dois-je regrouper tous les caractères dans un seul VBO? Quels sont les avantages / inconvénients?

Xavier
la source
Ceci est une question en double. De quoi, je ne suis pas trop sûr, mais c'est dupe.
DeadMG
C'est similaire à cela , mais je ne pense pas que ce soit un doublon en soi, pour commencer, c'est Open-GL (je ne sais pas s'il y a des différences spécifiques), tandis que l'autre question concerne les déformables dans DirectX11 (donc probablement en utilisant la tessellation, qui change les choses).
Thomas Russell

Réponses:

11

C'est vraiment un choix entre performance et flexibilité, mais je vais énumérer mes opinions à ce sujet.

Un seul VBO

Les côtés positifs sont:

  • Un seul appel pour dessiner votre scène. Cela augmente les performances. Bien que votre application puisse nécessiter plusieurs appels de tirage, vous pouvez toujours avoir un seul VBO et laisser le nombre et le décalage décider de votre dessin.
  • Ne nécessitant pas de changement d'état entre vos objets. Cela augmente les performances.

et les côtés négatifs sont:

  • Difficile à gérer, bien que cela dépende de la façon dont vous écrivez votre code, s'il est correctement conçu, etc.
  • En disant difficile à gérer, je veux dire des choses comme mettre à jour le VBO, définir un décalage correct pour chaque objet, etc.

VBO individuel: s

Les côtés positifs sont:

  • Facile à mettre en œuvre.
  • Plus facile à gérer depuis le début.

et les côtés négatifs sont:

  • Beaucoup de changements d'état. Cela diminue les performances.
  • Beaucoup d'appels de tirage. Cela diminuera les performances.

Résumé

Je vous recommande de profiler votre application; obtenez votre véritable goulot d'étranglement dans les données que vous pouvez voir. L'optimisation prématurée peut être montrée (dans ce cas) comme inutile. Cependant, cela étant dit, si vous découvriez une réelle perte de performances dans votre application, compte tenu du scénario individuel de VBO: s , vous pouvez commencer à implémenter un seul VBO.

Cependant, tant que ce n'est pas nécessaire (le nombre d'objets est faible, peu de changements d'état dans l'ensemble, etc.), je recommanderais d'utiliser des VBO individuels, sauf si vous voyez que cela ne fonctionnera pas.

Éditer

J'ai oublié de mentionner que ce serait bien avec plusieurs appels de tirage. La chose la plus importante en période critique de performances est de maintenir les changements d'état au minimum. Vous pouvez simplement définir le nombre d'indices à traiter et un décalage pour chaque appel de tirage, et c'est très bien. Mais cependant, gardez les changements d'état aussi bas que possible et faites le moins d'appels possibles, c'est le grand bonjour de cette réponse, ou du moins ce que j'ai essayé de dire.

Wroclai
la source
Si vous ne faites qu'un seul appel, cela vous visse pour les changements d'état par maillage (et non par sommet) (uniformes, etc.). Force également un tout ou aucun pour tout dessiner. Bien sûr, vous pouvez le décomposer afin qu'il n'y ait qu'un seul appel VBO à tirage multiple, mais que faire si vous souhaitez ajouter un nouveau maillage?
deceleratedcaviar
1
@Daniel: Un nouveau maillage devrait simplement être mis à jour / ajouté dans le VBO. J'ai oublié de mentionner que ce serait bien avec plusieurs appels de tirage. La chose la plus importante en période critique de performances est de maintenir les changements d'état au minimum. Vous pouvez simplement définir le nombre d'indices à traiter et un décalage pour chaque appel de tirage, et c'est très bien. Mais cependant, gardez les changements d'état aussi bas que possible et faites le moins d'appels possibles, c'est le grand bonjour de cette réponse, ou du moins ce que j'ai essayé de dire. :-)
Wroclai
Batch, batch, batch en 2005 est arrivé à la conclusion que vous pouvez vous permettre entre 10k et 25k lots sur un CPU 1 GHz avant d'être complètement lié au CPU en traitant les appels de tirage seuls. Comme cela se traduit par quelques centaines de lots par image 60Hz, shoehorning tout en un seul VB est pas indispensable, mais cela aide si vous géométrie paquet qui a des caractéristiques similaires (durée de vie, le taux de mise à jour, attributs) dans le même VB.
Lars Viklund
1
Je pense que vous devriez également tenir compte de l'abattage tronconique.
Tara