5/5

5. Animation par simulation

Sphères rebondissantes

On considère le cas d’exemple formé de particules tombant sous l’effet de leur propre poids. Les particules sont lancées initialement avec une vitesse \(v_0\) de leur position initiale. Celles-ci tombent sous l’effet de la force \(F=m\,g\), avec \(m\) la masse de la particule et \(g\) la gravité.

Considérez le code associé au fichier 3D_graphics/04_simulation/example_sphere_gravity (mot clé SCENE_SPHERE_GRAVITY_FLOOR).
Ce code représente des particules sous la forme de sphères tombant sous la gravité sans gestion de collision avec le sol.

  • Ajoutez la gestion des collisions entre les sphères et le sol: Pour cela, lorsque vous détectez une particule sous le niveau du sol

    • Modifiez sa vitesse de manière à ce qu’elle rebondisse avec une légère perte d’energie

    • Projettez sa position sur la surface du sol

Rem. Dans le cas où la sphère est hors du disque représentant le sol, laissez-la tomber sans modéliser de rebond.

Masses ressorts

On considère cette fois deux particules A et B reliées par un ressort. La particule A est supposée fixe, alors que la particule B est animée. Les forces s’appliquant sur la particule B sont:

  • Le poids: \(F_{weight}=m\,g\)

  • La force de rappel du ressort \(F_{spring}= -K\,(L-L_0)\,u\)

    • \(K\): Constante de raideur du ressort (stiffness)

    • \(L\): Distance entre les positions de la particule A et B

    • \(L_0\): Distance de repos (distance entre les deux particules telles que le ressort soit au repos).

    • \(u\): Vecteur unitaire de A vers B

  • La force de frottement fluide \(F_{damping} = -\mu\,v\)

    • \(\mu\): Constante de frottement

    • \(v\): vitesse de la particule (ici B)

La force totale s’appliquant sur la particule B est \(F=F_{weight}+F_{spring}+F_{damping}\).

  • Considérez le code associé au fichier 3D_graphics/04_simulation/example_mass_spring (mot clé SCENE_MASS_SPRING_1D).
    Ce code prépare les données associées au particules A et B, ainsi que l’intégration numérique, mais n’implémente pas correctement le calcul des différentes forces.

  • Modifiez

    • Le calcul de la force de rappel du ressort (dans la fonction spring_force())

    • Le calcul du poids (dans frame_draw)

    • Le calcul de la force de frottement (dans frame_draw)

Animation attendue une fois les forces implémentées avec les paramètres par défaut

  • Modifiez le code de manière à ajouter une troisième particule C, reliée par un ressort à B. Mettez en place les différentes forces nécessaires au modèle.

Animation attendue avec deux particules. (La seconde particule a pour position initiale (1,0,0), elle n’a pas de vitesse initiale)

  • Généralisez l’approche en considérant une suite de \(N\) particules reliées par des ressorts.

    • En fonction de la rigidité des ressorts, cette suite de particule permet de modéliser des cordes se déformant de manière légèrement élastique.

    • Il peut être nécessaire de réduire le pas de temps de l’intégration numérique/augmenter le coefficient de friction afin d’éviter que la résolution numérique diverge.

    • Il est possible d’ajouter des ressorts dits "de courbures" reliant les voisins deux à deux pour obtenir une courbe se déformant de manière plus lisse et rigide.

    • Il est possible de réaliser plusieurs pas d’intégration numérique dans une même frame, l’animation semblera plus rapide.

Exemple d’animations possibles avec une suite de ressorts tenues par, une, ou deux extremitées

Intégration dans la scène

Finalement, il est possible d’intégrer des étapes de simulation afin d’animer différents objets dans votre scène 3D complète (s’il vous reste du temps). L’exemple suivant est réalisé en utilisant une chaine masse ressort entre un point fixe du sol et le modèle animé d’oiseau, ainsi que des sphères lancées comme des projectiles rebondissants sur le terrain.

Rem.

  • L’intégration de ces modèles peut nécessiter certaines adaptations du code. Commenez par des choses simples, et itérer au fur et à mesure.

  • Pour éviter les collisions entre les sphères (projectiles et particules liées aux ressorts) et le terrain, il est nécessaire de pouvoir accéder à la hauteur du terrain. Pour cela, notez qu’il est possible de convertir des coordonnées \((x,y)\) en coordonnées normalisées \((u,v)\) utilisées pour le calcul du terrain. Une fois la hauteur connue, on peut comparer la coordonnée \(z\) de la sphère avec la hauteur \(h\) du terrain.

  • Le rebond nécessite également la connaissance de l’orientation du terrain à l’endroit de l’impact. Réfléchissez à un moyen d’évaluer cela.