1 - Simulation de textiles

  • Objectif : Implémentation d'une animation de textiles fixé par deux points.
  • Modélisation du tissu : Le tissu est discrétisé par un ensemble de particules de masses mi=1 connectées entre elles par des ressorts de raideurs kij = 15000.0, de viscosité nuij = 0.01, et de longueur au repos lij = 0.1. La gravité et la viscosité du milieu sont également pris en compte pour simuler la scène. Ces paramètres sont notamment mis dans les fichiers de données de l'application qui se trouvent dans le répertoire gkit2light/src/master_MecaSim/exec.
  • Boucle de l'animation :
    • Calcul des forces appliquées sur les particules
    • Calcul des accélérations des particules au cours du temps, en utilisant la loi fondamentale de la dynamique
    • Intégration des accélérations pour obtenir les vitesses
    • Intégration des vitesses pour obtenir les positions
    • Affichage de l'objet simulé après lissage des normales
  • Travail à effectuer :
    • Vous devez compléter le code de l'application pour simuler le mouvement d'un tissu carré discrétisé par 70 x 70 particules (fichiers de données dans le répertoire gkit2light/data/drap70).
    • Le tissu est notamment fixé par deux coins. Comment ces coins ont été fixés ? Pour vous aider, vous pouvez regarder les fichiers de données relatifs à cet objet.
  • Vous pouvez débuter en utilisant des tissus de tailles plus petites en les générant à l'aide du programme CreateData du répertoire /gkit2light/data/CreateMesh. Dans ce répertoire :
    • Makefile : pour compiler tous les programmes
    • CreateData.cpp : permet de créer les fichiers de données (format texte) relatifs à des carrés de tissu de taille paramétrable
    • obj2sappe.cpp, Donnees.h : permet de convertir les fichiers de données des facettes du format .obj au format utilisé par l'application
    • off2sappe.cpp, Donnees.h : permet de convertir les fichiers de données des facettes du format .off au format utilisé par l'application
    • scalepoints.cpp, Donnees.h : permet de modifier le fichier des positions des particules en les divisant par un facteur donné
  • Voici les étapes (détaillées ci-dessous) pour réaliser cette simulation :
    1. Affichage de l'objet simulé
    2. Calcul des forces
    3. Calcul des accélérations
    4. Calcul des vitesses et des positions
    5. Animation du tissu
    6. Interaction avec l'utilisateur
    7. Déchirure
    8. Tombé de tissu


Affichage de l'objet simulé

  • Complétez la fonction ObjetSimuleMSS::initMeshObjet() pour créer le maillage de l'objet simulé.
  • Complétez la fonction ObjetSimuleMSS::updateVertex() pour mettre à jour le maillage de l'objet simulé au cours de la simulation.

Calcul des forces

  • Quelles sont les forces qui sont exercées sur chacune des particules du tissu ?
  • Complétez le code de l'application pour calculer les forces qui sont exercées sur chacune des particules. Pensez à prendre en compte les forces d'amortissement des ressorts.

Calcul des accélérations

  • Complétez ensuite le code de l'application, pour calculer les accélérations des particules au cours du temps.

Calcul des vitesses et des positions

  • Complétez le code de l'application pour calculer par intégration numérique les nouvelles vitesses et positions des particules à partir des accélérations et des vitesses. Implémentez tout d'abord le schéma d'Euler explicite. Puis, utilisez le schéma de leapfrog-Verlet ou le schéma d'Euler semi-implicite.
  • Comparer ces schémas d'intégration numérique en modifiant la taille des pas de temps. Lequel vous paraît le plus stable ?
  • Enfin, afin de dissiper les vitesses, multipliez-les par le coefficient de dissipation (ou de viscosité) qui est lié à la scène.

Animation du tissu

  • Maintenant que les calculs des forces, accélérations, vitesses et positions ont été complétés, vérifiez que l'animation du tissu vous paraît cohérente. Vous pouvez notamment modifier les paramètres du vecteur gravité, la raideur des ressorts, etc.

Interaction avec l'utilisateur

  • Modifiez l'application afin d'ajouter une interaction avec l'utilisateur. L'interaction avec le clavier (touche m enfoncée + flèches direction) doit permettre de faire bouger un des coins initialement fixe du tissu. Par exemple, vous pouvez modifier l'application pour que la position de la particule 0 soit déterminée par le mouvement de la souris.

Déchirure

  • Vous pouvez considérer que si la force appliquée à un ressort est trop importante (ou si sa longueur dépasse une certaine taille), le tissu se déchire c'est-à-dire que le ressort considéré est supprimé.

Tombé de tissu

  • Modifiez les fichiers de données relatifs au tissu de façon à ne plus avoir de points fixes c'est-à-dire que sous l'emprise de la gravité, le tissu doit tomber.
  • Ajoutez le code permettant de détecter et traiter la collision du tissu sur le sol (dont on connait son emplacement) en faisant en sorte que le tissu reste immobile sur le sol.