Animation basée sur la physique Basée sur Physically Based Modeling cours Siggraph 2001par Andrew Witkin et David Baraff Merci à Marie-Paule Cani, Francçois Faure, Nicolas Holzschuch et Estelle Duveau. Objectif Reproduire le comportement d’objets physique soumis à des forces dans un environnements Générer automatiquement des animations plausibles § rehausser le réalisme dans les applications interactives § diversifier les animations § animer rapidement et de façon réaliste des scènes qui seraient normalement trop complexes à animer manuellement (explosions, écroulements, fluides…) 2 Exemples Objets rigides et chaînes articulées Cocos2D, Box2D Ragdoll example Moby Motion, Blender - Bullet Physics 2K Games, Mafia II 3 Exemples Objets déformables 2D Boys, World of Goo [Bertails et al., 2006] [Baraff et al., 2003] 4 Exemples Particules et fluides 5 http://physbam.stanford.edu Simulation physique Animation basée sur la physique ⟹ simulation physique Challenges § stabilité numérique § contrôle artistique 6 Lois du mouvement de Newton 1. En l’absence de toute force, un corps matériel, s’il est au repos, reste au repos; s’il est en mouvement, conserve un mouvement rectiligne et uniforme 2. L’application d’une force F au corps de masse m se traduit par la variation de sa vitesse (accélération) 3. Entre deux corps, il ne peut y avoir d’action que mutuelle. Il y a toujours lieu ainsi d’apparier deux forces : de même direction, égales en valeur absolues, et de sens opposés ⟹ on en extrait plusieurs formules et concepts décrivant la physique mécanique 7 Physique d’une particule Particule = corps infinitésimal définie par sa : § position au cours du temps x(t) § masse m On note sa vitesse v = ẋ = dx dt et son accélération a = ẍ = dv dt Si n forces fi sont appliquées à la particule, alors d’après la 2nde loi de Newton : n  fi = F = ma i=1 8 Physique d’une particule Les forces peuvent dépendre de la position x et de la vitesse v de la particule ainsi que du temps t : F(t, x(t), ẋ(t)) ẍ(t) = m ⟹ équation différentielle ordinaire (car x ne dépend que de t) Mais F arbitraire ⟹ équation non-linéaire ⟹ pas de solution analytique ⟹ intégration numérique 9 Intégration numérique On part d’une valeur initiale x0 = x(t0) On avance d’un pas de temps ∆t dans la direction de la vitesse ẋ(t0 ) 10 Intégration numérique On part d’une valeur initiale x0 = x(t0) On avance d’un pas de temps ∆t dans la direction de la vitesse ẋ(t0 ) : x(t0 + Dt) = x0 + Dt ẋ(t0 ) ⟹ intégration d’Euler • simple • ∆t grand ⟹ erreur forte • ∆t petit ⟹ lent 11 Limitations d’Euler : peu précis Ex : x(t) circulaire transformée en spirale ⟹ approximation linéaire de x(t) 12 Limitations d’Euler : peu stable Ex : x(t) diverge au lieu de converger ⟹ pas de temps ∆t constant 13 Limitations d’Euler Si x(t) est n fois continue, développement de Taylor : Dt 2 Dt n ∂ n x x(t0 + Dt) = x0 + Dt ẋ(t0 ) + ẍ(t0 ) + . . . + (t0 ) n 2 n! ∂t ⟹ Euler correct seulement si x(t) est linéaire ⟹ Erreur dominée par (Dt 2 /2)ẍ(t0 ), c-à-d en O(∆t2) ⟹ Si on sait calculer ẍ(t0 ), alors erreur en O(∆t3) 14 Méthode du point milieu Dt 2 x(t0 + Dt) = x0 + Dt ẋ(t0 ) + ẍ(t0 ) + O(Dt 3 ) 2 où la dérivé première ẋ = f (x(t),t) = f (x(t)) 15 Méthode du point milieu Expansion de Taylor sur f : f (xo + Dx) = f (xo ) + Dx f 0 (xo ) + O(Dx2 ) Dt En choisissant Dx = f (x0 ) on obtient : 2 Dt Dt f (xo + f (x0 )) = f (xo ) + f (x0 ) f 0 (xo ) + O(Dt 2 ) 2 2 Dt = f (xo ) + ẍ0 + O(Dt 2 ) 2 En multipliant par ∆t et en réorganisant : Dt Dt 2 Dt f (xo + f (x0 )) Dt ẋo = ẍ0 + O(Dt 3 ) 2 2 16 Méthode du point milieu Dt Dt f (xo + f (x0 )) 2 En réinjectant dans : Dt 2 Dt ẋo = ẍ0 + O(Dt 3 ) 2 Dt 2 x(t0 + Dt) = x0 + Dt ẋ(t0 ) + ẍ(t0 ) + O(Dt 3 ) 2 On obtient : Dt x(t0 + Dt) = x0 + Dt f (x0 + f (x0 )) 2 17 Méthode du point milieu a) b) c) Calculer une itération d’Euler : Dx = Dt f(x,t) Évaluer la ✓ dérivée à mi-distance : ◆ x + Dx t + Dt fmid = f , 2 2 L’utiliser pour mettre à jour x : x(t + Dt) = x(t) + Dt fmid aa bb ⟹ Meilleure approximation ⟹ Plus coûteux (2 évaluations de f ) 18 cc Implémentation Solveur générique ODE System dim(state) get/set(state) getDerivative 19 Solver Équation différentielle Équation d’ordre 2 (dérivée seconde) : F(t, x(t), ẋ(t)) ẍ(t) = m ⟺ 2 équations d’ordre 1 couplées : ( ẋ = v v̇ = F/m ⟹ encore difficile à résoudre 20 Espace des phases x Concaténation de x et v : v = point 6D dans l’espace des phases ẋ Concaténation de ẋ et v̇ : v̇ = vitesse 6D dans l’espace des phases Équations différentielle d’ordre 1 : ẋ v = v̇ F/m ⟹ plus simple à résoudre 21 Implémentation Une particule x v F m 22 dim(state) get/set(state) 6 x v v getDerivative Fm Implémentation Système de particules particles n time x x x x x v v v v v f f f f f m m m m m 23 … x v f m Implémentation Interface avec le solveur Système de particules particles n time Solveur 6n x1 v1 x2 v2 f1 v f2 v1 m 2 m 1 2 24 xn vn v n fn mn Implémentation Boucle de calcul des dérivées : 1. Réinitialiser les forces Itérer sur les particules et mettre à zéro F 2. Calculer la résultante des forces Sommer toutes les forces pour chaque particule 3. Regrouper Itérer sur les particules, copier v et F/m dans la matrice de destination 25 Forces § Unaires § N-aires § D’interaction spatial 26 Forces unaires Gravité de la terre force sans contact, proportionnelle à la masse m et dirigée par le vecteur constant de gravité g : f = mg Augmente l’énergie du système 27 Forces unaires Amortissement visqueux résistance au mouvement, opposée à la vitesse v(t) et pondéré par le coefficient de viscosité 𝜈 : f = nv Diminue l’énergie du système ⟹ stabilise le système 28 Forces n-aires Système masse – ressort ressort reliant 2 masses i et j Lorsqu’on applique une force à une des masses, le ressort est compressé et compensera en appliquant une force opposée à l’autre masse pour se décompresser. fi, j = ks (||l|| f j,i = fi, j l r) ||l|| avec ks la constante de rigidité du ressort r la longueur du ressort au repos l = xi (t) - xj (t) 29 Forces n-aires Système masse – amortisseur amortisseur reliant 2 masses i et j Force inverse à la vitesse appliquée pour compresser l’amortisseur : (vi (t) v j (t)) · l l fi, j = kd ||l|| ||l|| avec kd la constante d’amortissement 30 Forces n-aires Réseaux de masse – ressort permet de simuler divers types de matériaux, en fonction des constantes données au ressort. Pour garantir un système plus stable, favoriser des formes triangulaires : 31 Forces d’interaction spatial Forces s’appliquant à toutes les pairs (ou n-tuples) de particules, par exemple : § gravitation § électromagnétisme § interaction atomique faible et forte. Utilisées pour approximer le comportement des fluides ⟹ complexité en O(n2) 32 Implémentation particles n time forces F F F x x x x x v v v v v f f f f f m m m m m 33 … x v f m … FF A list of force objects to invoke Implémentation Boucle de calcul des dérivées x x v v f f … m m x 1. Mettre à zéro v les forces f m F F F … FF 2. Appliquer les forces x x v v f f m m 34 … x v f m 3. Retourner [v, f/m,…] au solveur Collisions Deux problèmes à résoudre : 1. détection 2. réponse Problèmes (très) difficiles dans le cas général ! 35 Détection Particules infinitésimales Probabilité d’inter-collisions nulle ⟹ collisions uniquement avec la scène Trajectoire linéaire durant un petit pas de temps ⟹ tracé de rayon (et ses structures d’accélérations) Particules avec un volume Collisions entre particules plus négligeables 1. Fixer le repère d’une des particules (statique) 2. Extruder le volume de l’autre le long de sa trajectoire 3. Tester l’intersection des volumes (ex. : sphère – capsule) 36 Réponse Deux types de collisions: § Collision élastique : le mouvement est parfaitement transmis entre les corps § Collision inélastique : le mouvement est partiellement transmis (voire totalement absorbé) entre les corps 37 Réponse élastique En 1D, pour deux particules de vitesse v1 et v2 et de masses respectives m1 et m2 : ( m1 v1 + m2 v2 = m1 v01 + m2 v02 02 m1 v21 + m2 v22 = m1 v02 + m v 2 1 2 où « prime » indique la vitesse après la collision. En résolvant le système, vitesses après collision : m1 v1 + m2 v2 + m2 (v2 v1 ) 0 v1 = m1 + m2 m1 v1 + m2 v2 + m1 (v1 v2 ) 0 v2 = m1 + m2 38 Réponse élastique En nD, diviser en n collisions 1D. Par exemple, en 2D : 1. 2. 3. 4. 39 On trace un axe tangent à la collision (axe a) et un axe perpendiculaire à la collision (axe b). On projette v1 et v2 sur a et b et on garde leur norme : v1a , v1b , v2a , v2b On résout les problèmes 1D sur chaque axe : v01a , v01b , v02a , v02b On les re-multiplie par les vecteurs vitesses projetés normalisés et on somme : v1a v1b 0 0 0 v1 = v1a + v1b ||v1a || ||v1b || v2a v2b v02 = v02a + v02b ||v2a || ||v2b || v1 v2 a v1 v2 b a v2b v2a v1a v1b b Réponse inélastique Coefficient de restitution e supplémentaire : m1 v1 + m2 v2 + m2 e(v2 v1 ) 0 v1 = m1 + m2 m1 v1 + m2 v2 + m1 e(v1 v2 ) 0 v2 = m1 + m2 Ratio de vitesse avant et après l’impact § si e = 1 ⟹ collision parfaitement élastique, § si e = 0 ⟹ les 2 objets restent collés ensemble, § mesurés empiriquement pour les matériaux connus 40 Collision avec un plan Particule de vitesse v – plan passant par p de normal n v vn v p 41 n vt v n = (n⋅v)n vt = v - vn Détection Collision si proche du mur (ε) et dirigée vers lui : (x - p)⋅n < ε v x p 42 n n⋅v < 0 Détection Si détection après dépassement (overshooting), 2 solutions : 1. Projection sur le point le v plus proche (fixing) 2. Remonter le temps x (backtracking) p 43 n Réponse impulsionelle Inversion de la composante normale de la vitesse pondérée par le coefficient de restitution k r ∈ [0,1] -k r v n vn v vt Avant collision : v = vt + vn 44 vt v' Après collision : v' = v t - k r v n Particule en contact avec le plan Si la composante normale de v est nulle : |(x - p)⋅n| < ε f |n⋅v| < ε x v p 45 n Particule en contact avec le plan Si n·f < 0, force de contact fc exercée par le plan pour annuler la composante normale de f : f fc = −(n · f)f x fc v p 46 n Objets rigides Centre de masse (barycentre) point x où la masse est répartie également dans n’importe quelle direction :  mi ri x=  mi F F 47 x ri Objets rigides La force générant le déplacement est appelée force linéaire. La force générant la rotation est appelée couple : (“torque” en anglais) ti = (q t =  ti x) ⇥ fi i fi 48 Objets rigides Comme pour une force linéaire, le couple génère une accélération : l’accélération angulaire (rd.s-2) Un objet en rotation possède donc une vitesse angulaire 𝜔 (rd.s-1) x(t) 49 𝜔(t) Quantité de mouvement Mouvement d’un objet dont la masse est répartie dans l’espace exprimé par sa quantité de mouvement (momentum) Linéaire : P(t) = Mv(t) F(t) Ṗ(t) = M v̇(t) = M =F M Angulaire : L(t) = I(t)w(t) avec I(t) le tenseur inertiel L̇(t) = t(t) 50 Tenseur inertiel Matrice 3x3 symétrique décrivant la répartition du poids par rapport au centre de masse : 2 3 2 2 I = m (y + z xx i  i i ) Ixy =  mi xi yi Ixx Ixy Ixz I = 4Ixy Iyy Iyz 5 Iyy =  mi (xi2 + z2i ) Ixz =  mi xi zi Ixz Iyz Izz I = m (x2 + y2 ) Iyz =  mi yi zi zz  i i i Doit être orienté de la même façon que le corps qu’il décrit : IR = RIR 1 = RIR> avec R la matrice de rotation de l’objet 51 Simulation État : 0 1 x(t) BR(t)C C X(t) = B @P(t)A L(t) Dérivé : 0 v(t) Bw(t) ⇤ R(t)C C Ẋ(t) = B @ F(t) A t(t) En pratique, il est préférable de représenter l’orientation par un quaternion q(t) plutôt qu’une matrice R(t) 52 1 Objets déformables § Réseaux de masse-ressort § Super-hélices / super-clothoïdes § Éléments finis [Faure et al., 2012] [Casati et al., 2013] 53