Conseils nécessaires pour un moteur physique

12

J'ai récemment commencé un projet, la construction d'un moteur physique. J'espérais que vous pourriez me donner quelques conseils concernant une certaine documentation et / ou les meilleures technologies pour cela.

Tout d'abord, j'ai vu que Game-Physics-Engine-Development est fortement recommandé pour la tâche à accomplir, et je me demandais si vous pouviez me donner un deuxième avis. De plus, en parcourant Amazon, je suis tombé sur Game Engine Architecture et comme je veux construire mon moteur physique pour les jeux, j'ai pensé que cela pourrait aussi être une bonne lecture.

Deuxièmement, je sais que la simulation de la physique est très exigeante en calcul, donc je voudrais utiliser CUDA ou OpenCL. Maintenant, je penche vers OpenCL, car cela fonctionnerait à la fois sur les chipsets NVIDIA et ATI.

PS: je vais l'implémenter en C ++ sur Linux.

adivasile
la source

Réponses:

10

Voici comment j'ai appris à écrire un moteur physique, tout est gratuit et hautement recommandé:

  1. Les articles de David Baraff en particulier Une introduction à la modélisation physique

  2. Brian Vincent Mirtich's Thesis Impulse-based Dynamic Simulation of Rigid Body Systems

  3. Kacic / Bullock "Un système de dynamique pratique" SIGRAPH 2003, EDIT: Lien ajouté .

Ces articles ont été mentionnés dans un autre excellent article de Nick Porcino (LucasArts) dans l'un des livres de gemmes Gems 4 "Writing a Verlet-Based Physics Engine". Ce n'est pas gratuit, mais ça vaut chaque centime.

Jetez également un œil à d'autres moteurs, voici la source du moteur Bullet Physics .

À propos de l'implémentation CUDA / OpenCL: faites-le d'abord fonctionner sur le CPU, c'est assez compliqué :)

Soyez conscient que vous allez probablement jeter votre moteur après un certain temps, car il est tout simplement trop difficile de faire un moteur physique stable et bien intégré avec une liste de fonctionnalités compétitive par vous-même, mais c'est une excellente expérience d'apprentissage!

Dès que vous avez un moteur simple en marche, mon conseil est: faites des scénarios de test où vous comparez le résultat de votre moteur avec le résultat d'un autre moteur. Cela m'a aidé à trouver beaucoup d'erreurs et cela améliorera votre interface; quelque chose comme appliquer une force similaire pendant 1 seconde sur le même corps dans les deux moteurs.

Dernier point mais non le moindre: Ignorez les collisions lorsque vous démarrez, concentrez-vous d'abord sur une simulation stable.

Maik Semder
la source
Cela ressemble à une excellente réponse, mais vous voudrez peut-être la formater un peu.
The Communist Duck
Merci pour les commentaires, je suis d'accord que je ne serai pas en mesure de créer un moteur compétitif, mais mon objectif principal est la partie d'apprentissage.
adivasile
1
@The Communist Duck merci pour l'allusion, j'étais nouveau sur le côté et j'avoue que j'étais trop paresseux pour vérifier les options de format, corrigé :)
Maik Semder
1
Ajout du lien vers le papier de Kacic, j'espère que c'est le bon :)
Ray Dey
5

Maik a raison, les articles de Baraff sont un excellent début, mais n'oubliez pas l'article de Chris Heckers sur la dynamique du corps rigide: http://chrishecker.com/Rigid_Body_Dynamics !

De même, son conseil sur "[..] vous allez jeter votre moteur" est tout à fait vrai. Mais vous apprendrez beaucoup!

En ce qui concerne la partie CUDA / OpenCL de votre question: Si vous connaissez CUDA, le passage à OpenCL devient très facile. Je recommanderais d'abord d'apprendre CUDA, car il existe de nombreux bons tutoriels, des exemples de code et des bibliothèques de calcul. Par exemple:

Mais soyez conscient: Commencer sur CUDA est facile, se lancer dans la simulation physique est un peu plus difficile, mais combiner les deux est tout un défi!

Jonas Bötel
la source
vous avez absolument raison, c'est une autre excellente ressource qui doit être mentionnée, +1 pour le papier de Chris Hecker
Maik Semder
4

J'ai aussi commencé avec Baraff mais c'est un peu daté maintenant. Ce dont vous avez besoin, ce sont des solveurs itératifs et la meilleure imo sur papier à ce sujet est la dyanmique itérative d' Erin Catto . Vous avez tout ce dont vous avez besoin pour implémenter votre moteur physique. Vous pouvez creuser un peu dans la thèse de doctorat d'Erleben si vous avez besoin de plus de détails (comme les articulations et plus de trucs mathématiques), mais c'est à peu près tout. J'aurais aimé l'avoir trouvé depuis le début - parcourez un peu le forum Bullet, il y a beaucoup d'informations là-dedans (peut-être trop).

En ce qui concerne les livres, beaucoup de livres sont décevants, mais je recommande l'animation basée sur la physique de Kenny Erleben ou Game Physics Pearls.

Je ne connais pas beaucoup CUDA / OpenCL (bien que j'aie toujours voulu le faire) mais vous devriez certainement vérifier le travail de Takahiro Harada.

Mihai F
la source