IN - Chapitre 4 - Animation - IUT d'Arles
IN - Chapitre 4 - Animation - IUT d'Arles
IN - Chapitre 4 - Animation - IUT d'Arles
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Imagerie Numérique<br />
Synthèse d’images<br />
4. <strong>Animation</strong><br />
DUT Informatique 2012-2013<br />
Sébastien THON<br />
<strong>IUT</strong> de l’Université de Provence, site d’Arles<br />
Département Informatique
Introduction<br />
<strong>Animation</strong> = succession d’images fixes, à une fréquence suffisante pour<br />
tromper l’œil (cinéma : 24 images/sec).<br />
(FPS : « Frames Per Second »)<br />
Pour produire une animation : modifier la position d’objets<br />
au cours du temps.<br />
2
En synthèse d’images, 2 types d’animation :<br />
- <strong>Animation</strong> 3D temps réel<br />
Ex: simulateur, jeu, …<br />
Produit avec une librairie graphique (OpenGL, DirectX, …).<br />
Il faut calculer suffisamment d'images par seconde. Le nombre de FPS<br />
dépend de la machine.<br />
- <strong>Animation</strong> 3D précalculée<br />
Ex: film d’animation, effets spéciaux, …<br />
Produit avec un logiciel de synthèse d’images (3D Studio Max, Maya,<br />
Lightwave, …).<br />
On peut passer plusieurs minutes ou heures pour calculer une image.<br />
3
3 étapes :<br />
- Modélisation<br />
Représenter les objets par des modèles 3D.<br />
- <strong>Animation</strong><br />
Associer un mouvement aux objets.<br />
- Rendu<br />
Créer les images qui composent l’animation.<br />
Modélisation<br />
<strong>Animation</strong><br />
Rendu<br />
Dans le cas d’une animation<br />
temps-réel, il faut que cette<br />
boucle soit la plus rapide<br />
possible (effectuée au moins<br />
20 fois par seconde 20<br />
FPS)<br />
4
<strong>Animation</strong> temps réel<br />
Modélisation<br />
<strong>Animation</strong><br />
Rendu<br />
Si lors de l’étape de rendu<br />
on efface l’écran et on<br />
affiche directement les<br />
différents éléments à<br />
l’écran, alors on observe un<br />
effet de scintillement.<br />
5
Solution : affichage en « double buffer »<br />
On utilise deux buffers d’image. On affiche la scène dans un<br />
buffer en mémoire alors que l’autre buffer est affiché.<br />
Lorsque l’image est construite, on permute les deux buffers.<br />
L’image qui apparaît à l’écran est complète<br />
Pas de scintillement<br />
Affichage<br />
échange<br />
Mémoire Écran Mémoire<br />
Écran<br />
6
affichage en « double buffer » avec OpenGL<br />
// Lors de l’initialisation de l’affichage Glut,on requiert un affichage<br />
// en double buffer.<br />
glutInitDisplayMode( GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH );<br />
// Méthode appelée par Glut pour l’affichage<br />
GLvoid callback_display()<br />
{<br />
// On efface l’image du buffer en mémoire<br />
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );<br />
// On affiche la scène dans le buffer en mémoire<br />
affiche_scene();<br />
}<br />
// Permutation des deux buffers. Le buffer en mémoire devient visible.<br />
glutSwapBuffers();<br />
7
Remarque:<br />
Si on utilise un affichage en « double buffer », alors on prend<br />
en mémoire vidéo le double de la mémoire nécessaire pour le<br />
« Color buffer ».<br />
Ex: en 1024x768, 24 bits : taille color buffer = 2.25 Mo<br />
en double buffer : 2.25 x 2 = 4.5 Mo<br />
8
Quelques techniques d’animation :<br />
Interpolation de positions-clés<br />
Motion capture<br />
Utilisation d’expressions mathématiques<br />
Cinématique directe et inverse<br />
Simulation dynamique<br />
9
1. Interpolation de positions clés<br />
Permet à l’utilisateur de ne pas avoir à définir toutes les étapes de<br />
l’animation :<br />
• L’utilisateur définit des positions clés (« key frame »)<br />
• L’ordinateur se charge de calculer les positions intermédiaires<br />
par interpolation des positions clés.<br />
10
Interpolation linéaire<br />
Soit un point P(x,y,z) en mouvement. On veut l’amener de (x 0<br />
,y 0<br />
,z 0<br />
) au<br />
temps t 0<br />
au point (x 1<br />
,y 1<br />
,z 1<br />
) au temps t 1<br />
. On peut utiliser une interpolation<br />
linéaire :<br />
Y<br />
X<br />
P(x 1<br />
,y 1<br />
,z 1<br />
)<br />
P(x,y,z)<br />
Z P(x 0<br />
,y 0<br />
,z 0<br />
)<br />
Si on considère que t 0<br />
=0 et t 1<br />
=1, alors :<br />
X(t) = (1-t).x 0<br />
+ t.x 1<br />
avec t ∈ [0 ,1]<br />
= x 0<br />
+ t.(x 1<br />
-x 0<br />
)<br />
Autres interpolations possibles : bicubique, spline, etc.<br />
11
Exemples<br />
<strong>Animation</strong> de personnages dans les jeux (Quake2, Quake3, etc.)<br />
<strong>Animation</strong> de visage par interpolation entre des expressions clés.<br />
Au repos Joie Peur Colère<br />
12
2. Capture de mouvement<br />
« Motion capture » (MoCap) : on enregistre les mouvements d'un acteur<br />
pour les appliquer ensuite sur un modèle virtuel.<br />
Cette technique est très utilisée dans les films et dans les jeux vidéos.<br />
Plusieurs techniques existent, utilisant ou non des capteurs sur le<br />
corps de l'acteur, et utilisant ou non des caméras.<br />
13
2.1 Utilisation de capteurs<br />
L'acteur porte des capteurs sur le corps, positionnés sur des points de<br />
références (articulations).<br />
L'acteur est filmé sous plusieurs angles de vue par plusieurs caméras<br />
(très rapides. Vicon MX13 : 484 fps).<br />
Un ordinateur analyse les différentes vues pour retrouver la position en<br />
14<br />
3D de tous les capteurs.
Capture d'expressions faciales<br />
“Facial motion capture”<br />
Utilisation de plusieurs dizaines de capteurs disposés sur le visage.<br />
15
2.2 Analyse sans capteur (« markless »)<br />
Le mouvement est analysé par traitement d'image, en filmant un acteur<br />
avec une ou plusieurs caméras, sans utiliser de capteur.<br />
On peut ainsi capturer des mouvements très subtils (ex: mouvements du<br />
visage) qui nécessiteraient beaucoup trop de capteurs.<br />
(société Image Metrics)<br />
16
Kinect (Microsoft)<br />
La caméra Kinect permet d'obtenir des images optiques, mais aussi une<br />
image de profondeur grâce à un faisceau infrarouge. Des algorithmes<br />
dans le SDK Kinect permettent de repérer la présence de jusqu'à 6<br />
personnes, dont 4 joueurs actifs dont le squelette doté de 20<br />
articulations est calculé en temps réel.<br />
17
2.3 Bilan<br />
Avantages<br />
• Les mouvements obtenus par motion capture sont très réalistes.<br />
• L'animation de personnages est obtenue automatiquement, évitant du<br />
travail à un animateur.<br />
Inconvénients<br />
• Le mouvement est figé, prédéterminé<br />
18
3. Expressions mathématiques<br />
La position des objets 3D en mouvement peut être donnée par une<br />
expression mathématique quelconque dépendante du temps :<br />
x = f 1<br />
(t)<br />
y = f 2<br />
(t)<br />
z = f 3<br />
(t)<br />
Courbes paramétriques (paramétrées par le temps t)<br />
(x L<br />
,y L<br />
,z L<br />
)<br />
Ex: Trajectoire circulaire d’une lune autour<br />
d’une planète :<br />
x L<br />
= x P<br />
+ r . cos(2.π.f.t)<br />
y L<br />
= y P<br />
+ r . sin(2.π.f.t)<br />
z L<br />
= z P<br />
(x P<br />
,y P<br />
,z P<br />
)<br />
r<br />
19
<strong>Animation</strong> de vagues<br />
Profil d’une vague<br />
Gerstner (1804): le profil d’une vague est une trochoïde.<br />
Chaque particule de l’eau a un mouvement circulaire de<br />
rayon r autour d’un point fixe (x 0<br />
, z 0<br />
)<br />
x = x 0<br />
+ r.sin(k.x 0<br />
-ω.t)<br />
z = z 0<br />
- r.cos(k.x 0<br />
- ω.t)<br />
z<br />
x<br />
20
Modèle : superposition de plusieurs trochoïdes 2D<br />
z<br />
y<br />
n<br />
∑<br />
i = 1<br />
( k ( x.cosθ<br />
+ y.sinθ<br />
) − . t )<br />
h( x,<br />
y,<br />
t)<br />
= A . trochoide<br />
ω<br />
i<br />
Chaque trochoïde est caractérisée par son<br />
amplitude A i<br />
, sa direction θ i<br />
et sa fréquence ω i<br />
.<br />
Ces paramètres peuvent être déterminés à<br />
partir d'un spectre de vague (ex: Pierson-<br />
Moskowitz)<br />
i<br />
x<br />
i<br />
i<br />
i<br />
21
4. Cinématique directe et inverse<br />
Méthodes très utilisées, notamment pour l’animation de personnages<br />
(Half-Life, Unreal Tournament, Max Payne, etc.)<br />
Permet plus de souplesse d’animation qu’une interpolation entre des<br />
positions clés.<br />
On peut obtenir des positions qui n’étaient pas prédéfinies.<br />
(Ex: un personnage qui tombe au sol ne passera pas au travers d’un<br />
mur mais restera adossé).<br />
22
4.1 Squelette et enveloppe<br />
Squelette<br />
Définit la charpente d’un objet.<br />
On anime l’objet en animant le squelette.<br />
En général, le squelette est définit par un ensemble de chaînes.<br />
Enveloppe<br />
Définit l’extérieur visible de l’objet.<br />
L’enveloppe est déformée par le squelette.<br />
23
4.2 Chaînes<br />
Racine (1)<br />
Point de départ de la chaîne.<br />
Os (2)<br />
Ligne droite qui relie deux joints.<br />
Joint (3)<br />
Point de rotation entre deux os.<br />
Point de contrôle (effector) (4)<br />
Placé au bout de la chaîne,<br />
permet d’invoquer la cinématique<br />
inverse.<br />
1<br />
2<br />
4<br />
3<br />
24
Rigging<br />
Rigging = positionnement du squelette par rapport au modèle 3D<br />
du personnage.<br />
Exemple de rigging en vidéo :<br />
http://dbdaishu.com/design/index.php/3d-lab-rigging/114-3d-mayaanimation-rigging-a-model-part-1<br />
25
4.3 Contrôle d’une chaîne<br />
Cinématique directe (« forward kinematics »)<br />
On spécifie directement l’angle de chaque joint de la chaîne.<br />
Cinématique inverse (« inverse kinematics »)<br />
On spécifie la position du bout de la chaîne (« effector ») et on<br />
calcule automatiquement les angles des joints.<br />
26
Exemple de chaîne<br />
Θ 2<br />
l 1<br />
l 2<br />
X=(x,y)<br />
(0,0)<br />
Θ 1<br />
• (0,0) est la racine<br />
• l 1<br />
et l 2<br />
sont les os<br />
• X est le bout de la chaîne (« effector »)<br />
∀Θ 1<br />
et Θ 2<br />
sont les angles des joints<br />
27
Cinématique directe<br />
Θ 2<br />
l 1<br />
l 2<br />
X=(x,y)<br />
(0,0)<br />
Θ 1<br />
• On spécifie directement Θ 1<br />
et Θ 2<br />
• Ensuite on calcule X<br />
28
Cinématique inverse<br />
Que faire si l’animateur connaît la position du bout de la chaîne X ?<br />
Θ 2<br />
l 1<br />
l 2<br />
X=(x,y)<br />
(0,0)<br />
Θ 1<br />
On va calculer les angles des joints Θ 1<br />
et Θ 2<br />
à partir de X<br />
Cinématique inverse.<br />
29
5. Simulation dynamique<br />
5.1 Principe<br />
Certaines animations seraient trop complexes à régler manuellement.<br />
Utilisation d’une simulation dynamique en utilisant des lois de la<br />
physique.<br />
30
5.2 Systèmes de particules<br />
5.2.1 Présentation<br />
Ensemble d’éléments dont les mouvements sont régis par des lois<br />
physiques (gravité, forces de frottement, collisions, etc.)<br />
Ensemble de particules<br />
dotées de vitesses propres<br />
31
Les système de particules permettent de représenter des objets qui<br />
n’ont pas forme bien définie (pluie, neige, feu, fumée, chute d’eau,<br />
explosion, feu d’artifice, etc.)<br />
Les particules peuvent être représentées par de simples points, des<br />
polygones ou des objets 3D. On utilise souvent des quadrilatères<br />
texturés avec une texture RGBA, orientés face à l’utilisateur<br />
(« billboarding »).<br />
32
5.2.2 Attributs des particules<br />
Chaque particule du système est caractérisée par un ensemble<br />
d’attributs, comme par exemple :<br />
• Position<br />
• Vitesse<br />
• Masse<br />
• Taille<br />
• Couleur<br />
• Transparence<br />
• Durée de vie<br />
• etc.<br />
34
5.2.3 Utilisation<br />
Système dynamique : lorsque les particules sont crées, elles ont un<br />
temps de vie au cours duquel leurs attributs peuvent être modifiés, puis<br />
elles disparaissent.<br />
Création Utilisation Suppression<br />
Temps de vie<br />
Modification des attributs<br />
Gestion d’une particule au cours du temps<br />
35
Gestion d’un ensemble de particules<br />
A chaque nouvelle image de l’animation, on effectue les étapes<br />
suivantes :<br />
1. Génération de nouvelles particules<br />
2. Réglage des attributs des nouvelles particules<br />
3. Les particules en fin de vie sont détruites<br />
4. Les particules restantes sont déplacées et transformées en<br />
fonction de leurs attributs<br />
5. Les particules restantes sont affichées<br />
36
Structures de données<br />
class Particule<br />
{<br />
float x, y, z;<br />
float masse;<br />
int duree_de_vie;<br />
};<br />
class Systeme<br />
{<br />
list liste;<br />
};<br />
37
Calcul de la position au cours du temps<br />
Discrétisation du temps, car affiche un certain nombre d’images par<br />
seconde dt = intervalle de temps écoulé entre deux images.<br />
Calcule la distance parcourue pendant un intervalle de temps dt et<br />
l’ajoute à la dernière position connue.<br />
Schéma d’intégration d’Euler :<br />
P(t+dt) = P(t) + V(t).dt<br />
38
Logiciels<br />
Des logiciels permettent de configurer facilement des systèmes de<br />
particules et de les sauver dans des fichiers à des formats (souvent en<br />
XML) qui peuvent être lus par des moteurs de jeu (XNA, Cocos2D, etc.)<br />
ParticleDesigner<br />
http://particledesigner.71squared.com<br />
39
5.3 Simulations dynamiques avancées<br />
Pour représenter de manière très réaliste certains mouvements de la<br />
réalité (solides, liquides, tissus, etc.), on a besoin d’utiliser des modèles<br />
physiques = des équations qui décrivent ces mouvements au cours du<br />
temps en fonction des forces en jeu, selon les lois de la mécanique (des<br />
solides, des fluides, etc.)<br />
Problème : les temps de calculs sont souvent très élevés.<br />
Solution : faire le moins de calculs possible, approximation des<br />
équations on peut obtenir du temps réel. De telles animation<br />
physiques apparaissent dans les jeux vidéos.<br />
40
5.3.1 Utilisation de la mécanique des solides<br />
Utilisation des lois du mouvement énoncées par Newton :<br />
• principe d’inertie :<br />
S'il n'y a pas de force qui s'exerce sur un corps ou si la somme des forces s'exerçant<br />
sur lui est égale au vecteur nul, la direction et la norme de sa vitesse ne changent<br />
pas (=accélération nulle).<br />
• principe fondamental de la dynamique :<br />
L'accélération subie par un corps dans un référentiel galiléen est proportionnelle à<br />
la résultante des forces qu'il subit, et inversement proportionnelle à sa masse m.<br />
• principe des actions réciproques :<br />
Tout corps A exerçant une force sur un corps B subit une force d'intensité égale, de<br />
même direction mais de sens opposé, exercée par le corps B.<br />
Prise en compte des objets, des relations de jointure entre ces objets,<br />
des forces appliquées aux objets (gravité, collisions, frictions).<br />
<strong>Animation</strong> très réaliste de véhicules, de collision d’objets (billard,<br />
bowling), d’objets articulés (personnage, grue, robot), de cordes, de<br />
cheveux, etc.<br />
41
<strong>Animation</strong> d’objets rigides<br />
42
<strong>Animation</strong> de tissus<br />
Principe: maillage 2D de sommets reliés par<br />
des liaisons plus ou moins élastiques (système<br />
masses-ressorts). Des forces sont appliquées<br />
sur les sommets (gravité, etc.)<br />
43
<strong>Animation</strong> de cheveux<br />
De nombreux modèles ont été proposés par<br />
des chercheurs, cherchant un compromis entre<br />
temps de calcul et réalisme.<br />
Cheveu modélisé par un<br />
système masses-ressorts<br />
Laboratoire GRAVIR, Grenoble<br />
44
Utilisation de la mécanique des fluides<br />
Utilisation des équations de Navier et Stokes, qui décrivent le<br />
comportement de fluides (liquides, gaz) en fonction de leur viscosité, de<br />
la pression, de la température, du temps, des forces en présence.<br />
L’espace qui sera rempli par l’eau est discrétisé en un maillage 3D de<br />
sommets. Au cours du temps, des vecteurs vitesse de fluide sont<br />
calculés en chaque sommet du maillage grâce aux équations de Navier-<br />
Stokes. Des particules de fluide sont placées dans cette matrice 3D.<br />
Leur position est donnée par interpolation des vecteurs vitesse.<br />
Maillage 3D de sommets<br />
45
<strong>Animation</strong> de liquides<br />
http://physbam.stanford.edu/~fedkiw/<br />
46
<strong>Animation</strong> de gaz<br />
http://physbam.stanford.edu/~fedkiw/<br />
47
5.4 API physiques<br />
HAVOK<br />
http://www.havok.com<br />
Utilisé dans plus de 200 jeux sur PC, PS2, PS3,<br />
PSP, Wii, XBOX, XBOX 360.<br />
(Assassin's Creed, Bioshock, Company of Heroes, Fable 2,<br />
Fallout 3, FEAR, Halo 3, Spore…)<br />
NVIDIA PhysX<br />
http://www.nvidia.com/object/physx_new.html<br />
TOKAMAK (Gratuit)<br />
http://www.tokamakphysics.com/<br />
ODE (Open Dynamics Engine) (Gratuit)<br />
http://www.ode.org<br />
BULLET (Gratuit)<br />
http://bulletphysics.org<br />
…<br />
48
Box2D<br />
Moteur physique open source (C++,<br />
Flash, iPhone/iPad, ...) permettant de<br />
simuler la mécanique des solides<br />
rigides en 2D.<br />
http://box2d.org<br />
PhysicsEditor<br />
Angry Birds<br />
49
6. Collisions<br />
Le test de collisions entre des objets dans une scène 3D est<br />
indispensable dans une application 3D interactive (simulateur, jeu, …) :<br />
- Est-ce que l’avion a touché le relief du sol ?<br />
- Est-ce que le personnage est contre le mur du couloir?<br />
- Est-ce que le boulet de canon a touché le bateau ?<br />
- …<br />
50
6.1 Principe<br />
Dans le cadre d’animation d’objets, on est confronté au problème des<br />
collisions entre ces objets.<br />
Détection de collision<br />
Déterminer quand et où deux objets se touchent.<br />
Résolution de collision<br />
Déterminer comment la collision affecte le mouvement des objets.<br />
51
6.2 Détection de collision<br />
Pour détecter si deux objets sont entrés en collision, il faudrait vérifier si<br />
le volume de l’un intersecte celui de l’autre, en testant chacun de leurs<br />
triangles.<br />
Très lourd en temps de calcul.<br />
60000 triangles<br />
5000 triangles<br />
52
Accélération de la détection de collision<br />
Il est nécessaire de mettre en œuvre des stratégies d’accélération de la<br />
détection de collision :<br />
- Partition de l’espace<br />
- Volumes englobant les objets<br />
On utilise souvent les deux simultanément.<br />
53
6.2.1 Partition de l’espace<br />
On divise l’espace de la scène 3D en régions.<br />
On peut accélérer la recherche de collisions entre 2 objets :<br />
si les 2 objets appartiennent à des régions différentes, alors ils ne sont<br />
pas en collision.<br />
54
1) Partition uniforme de l’espace<br />
On divise l’espace de la scène 3D en régions de mêmes tailles.<br />
Problème : certaines régions peuvent contenir des milliers de<br />
polygones, et d’autres très peu voire aucun.<br />
55
2) Partition adaptative en quadtree ou octree<br />
On divise l’espace de la scène 3D en régions de telles manière à ce<br />
qu’elles ne contiennent pas plus de polygones qu’un nombre donné.<br />
56
6.2.2 Volumes englobants<br />
Pour accélérer le test de collision entre 2 objets : test d’intersection entre<br />
leur volumes englobants (sphère, boîte, objet simplifié, etc.)<br />
Beaucoup plus rapide.<br />
Test de collision de deux objets 3D, en testant l’intersection<br />
entre leurs boîtes englobantes<br />
57
1) Sphère englobante<br />
Test de collision très simple :<br />
R 1<br />
R 2 d > R 1<br />
+ R 2<br />
Pas de collision<br />
d<br />
R 1<br />
R 2<br />
d<br />
d < R 1<br />
+ R 2<br />
Collision<br />
Deux sphères entrent en collision si la distance qui sépare leurs<br />
centres est inférieure à la somme de leurs rayons.<br />
58
2) Boîte alignée par rapport aux axes<br />
(AABB : Axis Aligned Bounding Box)<br />
z<br />
x<br />
Des collisions peuvent être détectées à tort.<br />
59
3) Boîte à l’orientation quelconque<br />
(OBB : Oriented Bounding Box)<br />
z<br />
x<br />
Plus précis que AABB, mais plus coûteux à calculer.<br />
60
Algorithmes d’intersections entre différents types de volumes:<br />
http://www.realtimerendering.com/int/<br />
Test de collision entre volumes englobants :<br />
- Très rapide<br />
- Mais approximatif<br />
Améliorations :<br />
Liste de volumes englobants<br />
Hiérarchie de volumes englobants<br />
61
Dans le moteur physique Reactor utilisé par 3D Studio Max, on peut<br />
détecter plus ou moins finement les collisions en utilisant une boîte<br />
englobante, ou un sphère englobante, ou une enveloppe convexe, ou<br />
une enveloppe concave, etc.<br />
Enveloppe englobante<br />
de + en + précise<br />
( temps de calculs<br />
plus élevés)<br />
62
Problème<br />
<strong>Animation</strong> : échantillonnage du temps (x images/sec)<br />
Si les objets se déplacent rapidement, ou si le nombre d’images par<br />
seconde est insuffisant, on risque de manquer une collision.<br />
t 0<br />
t 1<br />
Est ce que la boîte est entrée en collision avec la sphère entre le<br />
temps t 0<br />
et le temps t 1<br />
?<br />
63
7. ODE (Open Dynamics Engine)<br />
http://www.ode.org<br />
Bibliothèque open source de fonctions.<br />
Simulation physique basée sur la mécanique des solides ( objets<br />
rigides, donc pas de tissus, de fluides, etc.)<br />
ODE comporte deux composantes principales :<br />
• Un moteur de simulation dynamique<br />
• Un moteur de détection de collision<br />
64
7.1 Body et Geom<br />
Chaque élément de la scène pouvant être animé physiquement doit être<br />
doté :<br />
• D’un body : propriétés dynamiques (vitesse, masse, etc.)<br />
• D’un geom : propriétés géométriques (enveloppe géométrique<br />
servant à la détection de collision, position, orientation) mais ne<br />
servant pas à l’affichage.<br />
Classes de géométrie possibles pour l’enveloppe géométrique :<br />
• Sphere<br />
• Box<br />
• Plane<br />
• Cylinder<br />
• Ray<br />
• Triangle mesh<br />
65
7.2 Jointures<br />
Différents types de jointures peuvent être défini entre les body de deux<br />
objets afin de d’imposer des contraintes :<br />
Ball and socket Hinge Universal<br />
Slider<br />
Hinge2<br />
66
7.3 Structure typique d’un programme<br />
• Créer un monde dynamique<br />
• Créer des bodies dans le monde dynamique<br />
• Définir l’état de tous les bodies (position, etc.)<br />
• Créer des jointures dans le monde dynamique<br />
• Attacher les jointures aux bodies<br />
• Définir les paramètres des jointures<br />
• Créer un groupe de jointures temporaires pour les points de collision<br />
• Boucle :<br />
• Appliquer des forces sur les bodies si nécessaire<br />
• Ajuster les paramètres des jointures si nécessaire<br />
• Appeler la détection de collision<br />
• Créer une jointure de contact pour chaque point de collision et<br />
l’ajouter au groupe de jointures temporaires<br />
• Faire un pas de simulation<br />
• Supprimer toutes les jointures du groupe temporaire<br />
• Supprimer le monde dynamique<br />
67