Comment les simulations physiques Box2d et Bullet fonctionnent-elles en interne?


8

J'ai vu box2d et bullet portés en JavaScript, mais aucun d'eux ne m'a attiré, à l'exception du code source. Tout semblait assez simple, une fois que j'ai regardé à l'intérieur.

Que font-ils dans chacune de ces bibliothèques pour obtenir une belle simulation physique? Je ne trouve aucune explication.


Je vais finalement répondre à la question moi-même parce que j'étudie les sources. Si vous parvenez à raccourcir l'effort, je l'apprécierai.
Joyeux

Réponses:


10

La physique des corps rigides est en fait assez simple dans son concept - c'est-à-dire que les comportements qu'un moteur essaie de créer ne sont pas très compliqués. C'est probablement pourquoi les bibliothèques que vous avez consultées vous semblent assez simples.

L'astuce est que faire une simulation qui est robuste , stable et rapide , même en présence de choses comme l'erreur en virgule flottante et les fréquences d'images faibles et variables, est assez difficile et implique généralement beaucoup de réglages et de bidouilles. Le problème est encore compliqué par le fait que beaucoup de personnes extrêmement intelligentes ont fait des efforts héroïques pour trouver de meilleures solutions et ont proposé des algorithmes beaux et puissants mais difficiles à comprendre qui ont donné au domaine une réputation de magie noire.

En général, un moteur physique va se préoccuper de trois choses (l'ordre dans lequel il les fait dans la boucle interne varie):

  1. Intégration (approximation des équations newtoniennes du mouvement),
  2. Détection de collision, et
  3. Résolution des contraintes (mise à jour des positions et des vitesses pour satisfaire la non-pénétration ou d'autres contraintes spécifiées par l'utilisateur.)

Pour la plupart d'entre eux, il existe à la fois des algorithmes simples mais pas si précis et des algorithmes complexes mais plus précis. Pour commencer:

  1. Pour l'intégration, la plupart des gens utilisent Symplectic Euler ou Verlet (qui sont en fait équivalents. Vous pouvez lire sur l'intégration numérique si vous le souhaitez, mais le consensus semble être que les méthodes de premier ordre bon marché sont très bien.
  2. Vous pouvez trouver toutes les références de détection de collision que vous souhaitez sur la page de ressources de rendu en temps réel .
  3. Pour la résolution de contraintes, la méthode des impulsions séquentielles est très facile à comprendre. Erin Catto (l'auteur de Box2D) fait une présentation à GDC chaque année - les diapositives sont liées à partir de la page principale de Box2D . Les diapositives de 2006 couvrent assez bien les impulsions séquentielles. Vous pouvez également examiner des méthodes plus sophistiquées comme Featherstone ou Gauss-Seidel projeté.

Il y a une excellente introduction aux méthodes simples et à ce qui peut mal tourner dans les premiers chapitres du livre Game Physics Pearls qui vient d'être publié.


6

Lisez la série sur la physique des jeux de Glenn Fiedler: http://gafferongames.com/game-physics/

En outre, Erin Catto (l'auteur de Box2D) a un article sur la dynamique contrainte .

Pour la détection de collision, lisez Détection de collision en temps réel par Christer Ericson


1
Ce premier lien est rompu mais je pense que les mêmes articles peuvent maintenant être trouvés ici: gafferongames.com/game-physics/integration-basics (mais je ne peux pas en être sûr car je n'ai jamais vu les originaux)
Justin

2

http://en.wikipedia.org/wiki/Rigid_body_dynamics pourrait être un bon point de départ. Différents jeux diviseront les choses en différents corps, mais en général, vous avez un certain nombre de corps rigides discrets liés par des articulations avec des propriétés spécifiques. À chaque boucle du jeu, vous calculez les forces sur chaque corps et calculez ses nouveaux paramètres (position, vitesse, etc.). Vous devez également transmettre les forces de chaque corps aux autres avec lesquelles il partage les articulations et prendre en compte les forces globales (gravité).

Cela ne couvre pas les choses comme la physique des liquides ou des tissus, tout cela est du charabia pour moi. Il y a des équations différentielles impliquées et c'est à peu près au point où mes yeux brillent.


Eh bien ... Wikipédia serait le premier endroit évident pour regarder les choses. De plus, tout le monde jusqu'ici sait probablement qu'ils ont tendance à simuler les mouvements du corps par le biais des forces. Il y a beaucoup plus dans box2d que ça. Voici quelques choses qui m'intéressent: la résolution de contraintes et d'autres choses qui empêchent la simulation d'exploser. Algorithmes de détection de collision. Optimisations sur la résolution des contraintes et la détection des collisions. Algorithmes de réponse conjointe / collision. Simulation du frottement.
Joyeux

C'est à la limite du territoire «trop long pour une vraie réponse». Par exemple, l'amortissement pour empêcher les artefacts de simulation est une opération mathématique complexe . En ce qui concerne des choses comme le transfert de force articulaire, la version simple est que chaque articulation a des axes spécifiques sur lesquels elle transférera la force avec un pourcentage de l'énergie du corps comptant vers la jointure en fonction de l'angle entre les deux. L'articulation la plus simple est une liaison fixe, où toute la force de chaque côté est translatée.
coderanger

Comme je l'ai dit dans la question: il est juste de dire qu'il y a des mathématiques complexes ici et là et de fournir un lien pour une lecture plus approfondie.
Joyeux



0

Outre les équations physiques, une chose importante est le suivi de tous les objets, afin que la vérification de la détection des collisions et des interactions soit aussi rapide que possible. Le hachage spatial est la technique utilisée par le moteur physique Chipmunk .


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.