IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Projets Discussion :

Développement d'un moteur physique temps réel


Sujet :

Projets

  1. #1
    Membre actif
    Avatar de Mikmacer
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2006
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 116
    Points : 241
    Points
    241
    Par défaut Développement d'un moteur physique temps réel
    Salut à tous!

    Pour faire suite du développement de mon moteur 3D (Le EscapeNgine : http://www.developpez.net/forums/d80...ine-moteur-3d/), j'ai commencé le développement d'un moteur de simulation physique 3D temps réel en C#/Xna.

    J'ai prit cette décision puisque le seul moteur open source disponible en Xna n'est plus vraiment en développement, et qu'il comportait certains problèmes de conception et certains bogues qui rebutait son utilisation dans mon projet de moteur 3D. Les autres moteurs étant closed source, et payant, j'ai décidé de faire le mien.

    Le moteur sera open source, et j'essais que la conception soit le plus "clean" possible. Il y aura prise en charge du multithread, et le tout sera pleinement documenté.

    La résolution des collisions est résout par un système itératif basé sur les impulses. Je lis en ce moment pas mal de paper et de slides, je dois dire que le système est inspiré en bonne partie sur les présentations de Erin Catto(Le créateur de Box2D).

    En ce moment, le moteur comporte environ 25 classes. Le système de monde physique est en place, les corps comporte plusieurs géométries. L'intégration peut être fait par Euler ou par Runge–Kutta d'ordre 4(RK4). Le système par impulse est implémenté pour résoudre les collisions, la friction statique et dynamique.

    Pour l'instant, que deux formes disponibles : Les sphères et les plane. Je vais intégrer les boîtes, les capsules, et les mesh formés de triangles. Je compte aussi travailler sur les contraintes.

    Une première version devrait être lancé en janvier

    Et puis, voici une vidéo de ce qui a été fait, le tout implémenté dans le EscapeNgine :

    [ame="http://www.youtube.com/watch?v=tYUkemtUBVA"]YouTube - Physic simulation WIP[/ame]

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 106
    Points : 153
    Points
    153
    Par défaut
    Salut Mikmacer,
    Pour avoir teste le EscapeNgine, ton nouveau projet semble tres prometteur.
    J'ai bien envie de tester tout ca...

  3. #3
    Membre actif
    Avatar de Mikmacer
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2006
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 116
    Points : 241
    Points
    241
    Par défaut
    Citation Envoyé par unmanos Voir le message
    Salut Mikmacer,
    Pour avoir teste le EscapeNgine, ton nouveau projet semble tres prometteur.
    J'ai bien envie de tester tout ca...
    Tu as testé le EscapeNgine ? Il je l'ai présenté publiquement qu'à deux occasions, et peu de personnes peuvent pouvoir faire le lien^^

    Sinon voici une petite mise à jour sur le projet. J'ai implémenté les boîtes, mais je pense que la plus grosse mise à jour est l'implémentation de l'algorithme GJK qui me permet de résoudre les collisions et générer les points de collisions entre n'importe qu'elle forme convexe, c'est ce qui est utilisé aussi pour les boîtes(C'est l'algorithme utilisé dans Havok et Bullet). Il me reste encore beaucoup à faire, mais en ce moment, je suis sur une lancé, donc ça devrait avancé assez vite au cours des prochaines semaines

    Je me concentre maintenant à implémenter EPA pour les collisions plus profondes, implémenter les capsules, et tester plus en profondeurs les formes convexes. Ensuite, ce sera la phase optimisation, et refactoring avant de mettre les sources publiques.

    Voici une vidéo afin de visualiser le tout :

  4. #4
    Membre actif
    Avatar de Mikmacer
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2006
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 116
    Points : 241
    Points
    241
    Par défaut
    Voici une nouvelle mise à jour, la plus grosse jusqu'à se jour.

    J'ai beaucoup travaillé sur la stabilisation, et l'implémentation de l'algorithme EPA! J'ai aussi ajouté le support des cylindres, et des capsules, et du raycast sur toutes les formes convexes! Aussi, le moteur supporte maintenant les convex hull.

    J'ai beaucoup optimisé le code, et puis, même si je n'ai pas encore implémenté d'algorithme de partionnement(Tout se fait en O(n^2)) j'ai réussi à empiler 100 boîtes à plus de 60 FPS. Maintenant, il me reste 2-3 choses à faire : Implémenter la détection de collision avec les mesh formés de triangles (pour les niveaux de jeu par exemple), implémenter des contraintes de bases(Comme les joints) et implémenter un algorithme de partionnement(Probablement Sweep And Prune).

    Voici une nouvelle vidéo :

    [ame="http://www.youtube.com/watch?v=NQ_01bF3ElA"]YouTube - Rigid body simulation WIP 4[/ame]

  5. #5
    Membre actif Avatar de Nyarlathotep
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    174
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 174
    Points : 217
    Points
    217
    Par défaut
    Je sais que ça n'a pas grand chose à voir (en parlant de voir, je ne peux pas regarder tes vidéos à cause du filtre du lycée), mais j'apprécierais si tu pouvais poster les articles qui t'ont semblé précis, interessants, ... pour créer ton moteur physique. Personnellement, les seuls articles (trop peu, à mon goût) qui traitent en profondeur le sujet sont :



    Ces articles sont très accessibles (avec une vague connaissance de la mécanique du solide), et très précis. Mais je manque cruellement d'outils pour comprendre comment fonctionnent les LCP solvers des moteurs physiques d'aujourd'hui (je travaille actuellement sur un moteur physique en 2D), et le nombre d'articles sur le sujet se compte avec les doigts de la main : où as-tu pu trouver des informations sur le sujet ?
    "That is not dead which can eternal lie
    And with strange aeons even death may die"

    The Call of Cthulhu

  6. #6
    Membre actif
    Avatar de Mikmacer
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2006
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 116
    Points : 241
    Points
    241
    Par défaut
    Pour l'instant je ne me suis pas vraiment penché sur les solutionneurs LCP car je n'en ai pas eu besoins. J'utilise le concept des impulsions séquentielles introduit par Erin Catto.

    En fait, il y a deux gros défis :

    1- Créer les points de contactes des collisions
    Pour ça j'utilise GJK et EPA. GJK est un algorithme qui permet de trouver la distance la plus courte entre deux formes, et ainsi trouver les deux points les plus proches. Le problème est que, si les formes se collisionne GJK ne donne pas de solution, juste une distance de 0. Alors il faut déterminer une marge "théorique" qui grossi un peu la forme, afin de détermine que si la distance est plus petite que la marge, il y a collision, donc point de contacte. Mais si la pénétration dépasse cette marge, il faut opter pour un algorithme beaucoup moins optimisé (EPA) qui lui va résoudre la translation minimum pour que deux formes puisse êtres séparés. Ensuite, en 3D, il faut garder maximum 4 points, qui sont les 4 points les plus distants.

    Pour GJK, j'ai créé une implémentation 3D de ce qui a été présenté dans les slides de Erin Catto au GDC 2010. Pour la créations et la gestions des points de contactes, je me base sur les slides de Erwin coumans au GDC 2010. Pour EPA, c'est un algorithme créé par Gino van den Bergen, et la seule déscription se retrouve dans son livre (Collision Detection in Interactive 3D Environments).

    Sinon, l'avantage avec un solutioneur GJK/EPA, c'est qu'on peut implémenter la détection de n'importe quelles formes convexe Vs n'importe quelle formes convexe super facilement! Il suffis que d'une fonction "support" par forme convexe.

    2- Résoudre les points de contactes
    Je me base sur les impulsions séquentielles, c'est un concept vraiment simple, optimisé et efficace! En fait j'ai tout simplement implémenté ce qui est écrit dans la présentation de Erin Catto au GDC 2006. Tout fonctionne bien, sans avoir besoins d'utiliser les LCP. Honnêtement, je ne me suis pas vraiment penché sur les LCP solver pour le moment, car je n'ai pas senti le besoins, mais ça pourrait changer éventuellement.

    Voilà, j'ai vraiment décrits en gros sur quoi j'ai basé le développement du projet, si tu as des questions n'hésite pas.

    voici quelques sources(Les plus utiles pour moi):
    Les présentations du gdc 2010 : http://bulletphysics.org/Bullet/phpB...pic.php?t=4901
    Les présentations de Erin Catto sur les impulsions séquentielles :
    http://code.google.com/p/box2d/downloads/list

  7. #7
    Membre actif Avatar de Nyarlathotep
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    174
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 174
    Points : 217
    Points
    217
    Par défaut
    Merci beaucoup pour avoir pris le temps de me répondre, je me penche sur tes sources.
    "That is not dead which can eternal lie
    And with strange aeons even death may die"

    The Call of Cthulhu

Discussions similaires

  1. Réponses: 0
    Dernier message: 24/09/2009, 10h00
  2. [recherche documentation] Moteur de jeu ou de démo interactive temps réel
    Par shenron666 dans le forum Développement 2D, 3D et Jeux
    Réponses: 10
    Dernier message: 20/06/2006, 16h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo