3 points par GN⁺ 2024-05-25 | 1 commentaires | Partager sur WhatsApp

Résolution des collisions de corps rigides en 2D

Définition du problème

  • Du moment où Mario atterrit sur un nuage jusqu’à la collision de deux voitures dans un jeu de course, gérer les collisions est une partie essentielle de la plupart des jeux vidéo.
  • Cette série d’articles de blog va aborder les vraies mathématiques et la vraie physique derrière la simulation physique.
  • Les jeux vidéo sont un excellent moyen de donner du contexte à ces concepts et de les rendre moins abstraits.

Un mot sur les mathématiques

  • Cet article contient beaucoup de mathématiques, mais il ne faut pas en avoir peur.
  • La notation mathématique peut sembler complexe, mais il s’agit pour l’essentiel d’arithmétique simple.
  • Il est recommandé de ne pas craindre les mathématiques et d’essayer de relever le défi.

Avant de commencer

Corps rigides

  • La physique des corps rigides est une simulation physique qui traite d’objets qui ne se déforment pas.
  • En réalité, tous les objets se déforment au niveau moléculaire, mais dans une simulation, on simplifie cela en les traitant comme des corps rigides.

Détection de collision et résolution de collision

  • La détection de collision est le processus qui consiste à vérifier quels objets entrent en collision dans une scène.
  • La résolution de collision est le processus qui consiste à déterminer comment les objets en collision doivent se déplacer.
  • Cette série d’articles de blog se concentrera sur l’étape de résolution des collisions.

Que cherchons-nous à faire ?

  • La plupart des jeux s’exécutent dans une grande boucle.
  • À chaque itération de la boucle de jeu, la position des objets est mise à jour en fonction de leur vitesse actuelle.
  • La vitesse est un vecteur qui possède une magnitude et une direction.

Vitesse

  • La vitesse représente le changement de position d’un objet sur une certaine durée.
  • La nouvelle position d’un objet se calcule en ajoutant le déplacement obtenu en multipliant la vitesse actuelle par l’intervalle de temps.

Résolution de collision

  • L’objectif de la résolution de collision est de modifier la vitesse des objets après la collision afin qu’ils ne se traversent plus.
  • Après la collision, la vitesse s’exprime comme la somme de la vitesse avant collision et de la variation de vitesse causée par la collision.

Qu’est-ce qu’une collision ?

  • Pour vérifier si deux objets sont en collision, deux conditions doivent être remplies :
    1. Les formes géométriques des objets doivent être en contact ou se chevaucher.
    2. Les objets doivent encore être en train de se déplacer l’un vers l’autre.

Normale de surface

  • Pour déplacer un objet le plus loin possible de la surface, il faut le déplacer dans une direction perpendiculaire à cette surface.
  • Cette direction est appelée direction normale, c’est-à-dire la direction perpendiculaire à la surface.

Produit scalaire

  • Pour calculer à quel point deux vecteurs pointent dans la même direction, on utilise le produit scalaire.
  • Le produit scalaire est défini comme la somme des produits des composantes correspondantes de deux vecteurs.
  • Le signe du produit scalaire permet de savoir si deux vecteurs vont dans la même direction ou dans des directions opposées.

Conclusion

  • Une collision se produit lorsqu’un point d’un objet est en contact avec un point d’un autre objet et que la vitesse normale relative est négative.
  • Le prochain article abordera la physique réelle des collisions.

L’avis de GN⁺

  • Importance de la simulation physique : dans le développement de jeux, la simulation physique est un élément essentiel pour renforcer le réalisme.
  • Rôle des mathématiques : les mathématiques sont au cœur de la simulation physique, et les comprendre permet de créer de meilleures simulations.
  • Complexité de la résolution de collision : la résolution de collision est un processus plus complexe que la simple mise à jour de la position des objets.
  • Valeur pédagogique : cet article aide beaucoup à comprendre les bases de la simulation physique.
  • Apprentissage complémentaire : implémenter soi-même un moteur physique est aussi une bonne manière d’apprendre. On peut se référer à des moteurs physiques open source comme Box2D ou Chipmunk.

1 commentaires

 
GN⁺ 2024-05-25
Discussion Hacker News

Résumé des commentaires Hacker News

  • Hey everyone, author here!

    • Il s’agit du premier billet de la série de blog, destiné aux personnes qui ne sont pas développeurs de jeux ou qui ont peu de bagage en mathématiques.
    • C’est pour cette raison que les concepts sont expliqués en détail.
    • Les questions sont les bienvenues à tout moment.
  • Oh! Look, a well-researched, deeply-explained, and interactive post.

    • En voyant le nom de domaine et le TLD ".ski", je pensais qu’il s’agissait de l’auteur d’un autre excellent article, mais c’était quelqu’un d’autre.
    • La qualité de l’article est tout aussi remarquable.
    • Je suis curieux de connaître le secret du TLD ".ski".
  • One side project I am working on right now is a 2d space shooter I am developing with my son.

    • Je développe actuellement avec mon fils un jeu de tir spatial en 2D.
    • J’ai essayé de tout implémenter moi-même sans utiliser de moteur de jeu, mais j’ai rencontré des difficultés sur la détection des collisions.
    • J’ai finalement décidé d’utiliser Box2D.
    • Même avec plus de 20 ans d’expérience en développement et une formation en mathématiques, je me suis rendu compte que j’avais sous-estimé le problème.
  • I always enjoyed the explanation from the N game: N game tutorial

    • À l’époque où Flash était populaire, j’aimais beaucoup les explications du jeu N.
  • I had fun building a TypeScript demo about this topic, involving balls that can bounce and collide. I learned a lot.

    • Je me suis bien amusé à créer une démo TypeScript sur ce sujet, avec des balles qui rebondissent et entrent en collision, et j’ai énormément appris.
    • code
    • résultat/démo
  • This is great. This reminds me of Chris Hecker's Rigid Body Dynamics series from GDMag/Gamasutra that I read (checks watch) almost 30 years ago!

  • Collisions are violations of the pairwise non-intersection constraint between bodies.

    • Les collisions sont des violations de la contrainte de non-intersection par paires entre les corps.
    • La force de collision est le multiplicateur de Lagrange de cette contrainte.
    • La normale de collision est la dérivée partielle de la fonction de contrainte.
  • If you want to go further and go for rigid body dynamics and constraint, I found that series of blog post very useful: Toptal blog post

    • Si vous voulez aller plus loin sur la dynamique des corps rigides et les contraintes, j’ai trouvé cette série d’articles de blog très utile.
  • To dredge up a related oldie-but-goodie memory of blog posts: Gaffer on Games

    • Cela m’a aussi rappelé d’anciens billets de blog sur le sujet.
    • Gaffer on Games
  • Guess this is a Shameless plug but I wrote an interesting program over 12 years ago using even then very old three Js which is not quite the metal but much less abstract than today's tools.

    • C’est peut-être un peu d’autopromotion, mais j’ai écrit un programme intéressant il y a plus de 12 ans avec un three Js déjà très ancien à l’époque, moins proche du métal mais bien moins abstrait que les outils d’aujourd’hui.
    • Busy Boxes