Bonjour !
Je développe un moteur de jeu avec des amis et je me m'occupe de toute la partie physique.
J'ai déjà implémenté tout ce qui était découpage de l'espace et collisions pour les primitives de base.
Concernant la réponse aux collisions, j'ai choisi une réponse impulsionelle. J'utilise donc une méthode itérative (Gauss-Seidel) pour approcher la solution et cela fonctionne plutot bien pour la réponse en vitesse.
Cependant je suis confronté à quelques petits problèmes pour la réponse en position. Lorsque le coefficient de restitution est strictement inférieur à 1, la réponse en vitesse n'éloigne pas autant les objets que ce qu'ils s'étaient rapprochés le temps du pas de simulation. Je m'explique, si j'ai deux objets avec une vitesse relative nulle, mais qui accélèrent l'un vers l'autre, exemple, le sol et un objet posé dessus, alors durant la simualtion, l'accélération va être intégrée en vitesse et comme il n'y a pas conservation de l'énergie, la réponse en vitesse ne va pas annuler totalement celle-ci et, à la prochaine itération l'objet va un peu plus interpénétrer le sol. On voit donc l'objet passer très lentement à travers le sol.

La solution est donc de repositionner l'objet au point de collision juste avant de calculer la réponse en vitesse (réponse en position) en "remontant" dans le temps, cependant si ça fonctionne pour un objet, ça ne marche pas quand il y en a plusieurs. Parfois la réponse en position créé de nouvelles collisions (en séparant d'autres objets). À l'itération d'après, ces collisions vont être détectées, le solveur va essayer de retrouver le point de collision, mais dans le cas ou les objets n'étaient pas en train de se rapprocher, le solveur ne peut trouver de solution valide avec uniquement des considérations en vitesse et donc finit par diverger.
J'ai donc essayé quelques chose de plus simple, de séparer les objets uniquement selon la normale de contact et leur masse/opérateur d'inertie, mais ce modèle n'est pas cohérent et cause quelques inexactitudes visibles notamment avec les frottements.

Je n'ai pas trop d'autres idées de solutions, c'est pourquoi je me tourne vers vous.
Peut-être que je devrais changer totalement de façon de faire ?

Merci d'avance.