Manipulation de maillage sur GPU vs CPU

9

Juste un peu curieux - où effectuez-vous des manipulations de maillage, sur le CPU ou dans le shader? J'ai tout fait sur le CPU et un ami a suggéré de déplacer les choses du côté du GPU.

Si vous faites des choses comme des animations osseuses ... sur le GPU, comment récupérer le maillage? (puisque je fais de la détection de collision ...)

AnonAnon
la source

Réponses:

13

Cela se produit généralement sur le GPU, mais il y a des compromis pour les deux et c'est à vous de décider lequel fonctionnera le mieux pour vous.

Faire la manipulation sur le GPU signifie que vous n'avez besoin d'envoyer les données de maillage qu'une seule fois, alors vous pouvez simplement envoyer les transformations de matrice pour les déformer. C'est génial car cela réduit considérablement la bande passante requise entre CPU-> GPU. Cela signifie également que vous pouvez télécharger une seule copie du maillage sur le GPU et appliquer des transformations pour de nombreuses instances différentes du maillage. Cependant, il est plus difficile d'avoir des collisions "à maillage précis". Étant donné que les transformations sont effectuées sur le GPU, vous ne les avez pas disponibles pour tester avec sur le CPU.

Faire la manipulation sur le CPU signifie que vous avez accès au maillage transformé. Vous pouvez accéder à tout ce que vous devez savoir à ce sujet. Cependant, cela signifie que vous devez télécharger tout le maillage sur le GPU à chaque image. Cela signifie également que vous devez télécharger un maillage transformé pour chaque instance de ce maillage. En résumé, voici une liste exhaustive des avantages et des inconvénients.

  • Avantages pour GPU

    • Téléchargez les données de maillage une fois
    • Transformez-le pour plusieurs instances
    • Il suffit d'envoyer les transformations matricielles
    • Le GPU est très bon pour paralléliser ce genre de choses
  • Inconvénients pour GPU

    • Les maillages transformés ne sont pas disponibles pour les tests sur le CPU
  • Avantages pour le CPU

    • Les maillages transformés sont disponibles pour les tests de collision et tout ce qui est nécessaire.
  • Inconvénients pour le CPU

    • Besoin de télécharger l'intégralité du maillage transformé à chaque image
    • Besoin de télécharger un maillage entier pour chaque instance du maillage

Il existe cependant des moyens de contourner les inconvénients du GPU.

  • N'ayez pas de collisions précises . Utilisez quelque chose de "suffisamment proche" comme une boîte englobante pour tout le maillage ou ayez des boîtes englobantes pour chaque os du maillage. Ce qui suit utilise sur les transformations GPU pour le maillage, et sur les transformations CPU pour les boîtes de délimitation alignées sur l'axe qui représentent le maillage. Vous pouvez obtenir des limites encore plus précises en utilisant des non-AABB.

os de gobelin

  • Transformez une copie du maillage sur le CPU si et seulement si des collisions précises du maillage sont nécessaires . Une fois qu'une collision de boîte englobante est retournée vraie, transformez un maillage pour qu'il corresponde aux transformations sur le GPU, puis vérifiez les collisions par rapport à cela pour obtenir des données de collision plus précises.

Dans l'ensemble, je suppose que vous pouvez voir pourquoi il est plus courant de transformer le GPU

MichaelHouse
la source
1
Par simple curiosité, est-il réellement pratique de transformer des maillages sur le CPU en tenant compte de la complexité des maillages dans les jeux modernes, de la puissance et des capacités multicœurs d'un CPU moderne et des autres tâches qu'un CPU doit faire? De plus, le téléchargement sur le GPU est-il si lent que cette idée ne pourrait même pas décoller?
R4D4
Cela dépend du jeu, mais ce n'est généralement pas pratique pour les jeux au-dessus d'une complexité modérée. Quand il y a un choix si facile de faire les transformations sur le GPU, il est difficile de trouver une raison pour justifier les besoins en ressources supplémentaires de faire les transformations sur le CPU. Le problème est davantage lié à l'envoi du maillage transformé au GPU à chaque image, ce qui coûte cher rapidement. Comme c'est souvent le cas avec les logiciels, c'est au développeur de prendre les décisions entre complexité et performances.
MichaelHouse