10.03.2014 Views

IN - Chapitre 4 - Animation - IUT d'Arles

IN - Chapitre 4 - Animation - IUT d'Arles

IN - Chapitre 4 - Animation - IUT d'Arles

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Imagerie Numérique<br />

Synthèse d’images<br />

4. <strong>Animation</strong><br />

Licence Pro SIL <strong>IN</strong> 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


Le phénomène de Persistance rétinienne nous permet de faire d'une<br />

succession d'images une animation.<br />

Lorsque nous regardons un objet, l'image s'imprime sur la rétine au fond<br />

de l'œil. Chaque image captée par la rétine met une fraction de seconde<br />

à disparaître (environ 1/16 s). C'est la persistance de la rétine.<br />

3


Pour réaliser une animation en synthèse d'images, nous<br />

allons nous aussi produire une suite d'images à partir<br />

d'une scène 3D, qui seront affichées successivement au<br />

cours du temps.<br />

4


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 />

5


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 />

6


<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 />

7


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 />

8


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 />

9


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 />

10


Quelques techniques d’animation :<br />

Transformations<br />

Interpolation de positions-clés<br />

Motion capture<br />

Utilisation d’expressions mathématiques<br />

Cinématique directe et inverse<br />

Systèmes de particules<br />

<strong>Animation</strong> physique<br />

11


Transformations géométriques<br />

Opérations sur les sommets d'un objet 3D permettant de déplacer cet<br />

objet :<br />

• Translation (glTranslate)<br />

• Rotation (glRotate)<br />

• Mise à l'échelle (glScale)<br />

Matrice active : matrice qui combine toutes les transformations<br />

demandées.<br />

12


Transformation de visualisation<br />

Transformation qui consiste à définir la position et l'orientation de la<br />

caméra :<br />

gluLookAt( ex,ey,ez, rx,ry,rz, ox,oy,oz);<br />

ex,ey,ez : position de la caméra<br />

rx,ry,rz : point visé par la caméra<br />

ox,oy,oz : orientation de la caméra vers le haut<br />

GluLookAt génère une matrice M appliquant un positionnement de la<br />

caméra, puis multiplie la matrice active avec M.<br />

13


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 />

14


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 />

15


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 />

16


Vitesse<br />

La vitesse peut être modifiée au cours de l'interpolation, pour simuler<br />

une accélération, un amortissement, etc.<br />

Ease in : débute lentement et prend de la vitesse<br />

Ease out : débute rapidement puis décélère.<br />

17


Déformation<br />

L'objet si il est élastique (ballon, muscle, etc.) peut être déformé au<br />

cours du mouvement tout en gardant son volume.<br />

Déformations : compression (“squash”) et étirement (“stretch”).<br />

Objet rigide,<br />

non déformable<br />

Objet élastique,<br />

déformable<br />

18


2. 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


3. 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 />

22


3.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 />

23<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 />

24


3.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 />

25


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 />

26


Performance capture<br />

= Combinaison de motion capture et de facial motion capture.<br />

L'acteur peut jouer sans aucune contrainte technique de placement, de<br />

décor, d'éclairage.<br />

Utilisé pour la première fois au cinéma par Robert Zemeckis dans son<br />

film « Le Pôle Express » (2004).<br />

27


3.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 />

28


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 />

29


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 />

30


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 />

31


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 />

32


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 />

33


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 />

34


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 />

35


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 />

36


Logiciels d'animation de personnages<br />

En 2D<br />

Flash<br />

...<br />

En 3D<br />

3D Studio Max<br />

Anim8or<br />

Anima<br />

Autodesk Motion Builder<br />

Blender<br />

iClone<br />

iPi Soft<br />

Poser 3D<br />

...<br />

http://www.axyz-design.com/anima/<br />

http://www.reallusion.com/iclone/<br />

http://ipisoft.com<br />

http://poser.smithmicro.com/<br />

37


5. <strong>Animation</strong> de foule<br />

Applications :<br />

- Cinéma (foule de figurants virtuels)<br />

- Dessin animé<br />

- Jeu vidéo<br />

- Simulation de comportement de foule (ex : étude d'un<br />

mouvement de panique dans un lieu)<br />

38


Dessin animé<br />

L'animation par ordinateur permet de réaliser rapidement des<br />

animations trop complexes pour être dessinées à la main.<br />

Charge de gnous dans Le Roi Lion (Disney, 1994)<br />

39


5.1 Intelligence de groupe<br />

Un comportement de groupe (oiseaux, poissons, insectes,<br />

troupeaux, etc.) émerge du respect de quelques règles :<br />

- Minimisation de l'effort (mécanique des fluides)<br />

- Positionné pour observer les voisins<br />

- Profite des yeux du reste du groupe (repérer les prédateurs, trouver<br />

la nourriture)<br />

- Protection contre les prédateurs<br />

40


Boid<br />

Craig W. Reynolds propose en 1987 une méthode permettant de<br />

modéliser le comportement d'individus au sein de groupes (de<br />

poissons, oiseaux, troupeaux, etc. qu'il appelle boids, contraction<br />

de « bird-oid », c'est-à-dire « qui ressemble à des oiseaux ») au<br />

moyen de trois règles très simples d'orientation qui décrivent<br />

comment un individu manoeuvre en se basant sur les positions et<br />

les vitesses de ses plus proches voisins :<br />

Séparation<br />

S'orienter pour éviter les collisions, avec des obstacles<br />

dans la scène ou avec les autres individus du groupe.<br />

Alignement<br />

S'orienter vers la direction moyenne prise par les individus<br />

se trouvant dans un proche voisinage.<br />

Cohésion<br />

S'orienter pour aller dans la position moyenne des<br />

individus se trouvant dans un proche voisinage, afin de<br />

rester avec le groupe.<br />

41


Intelligence artificielle<br />

Les règles de déplacement des individus peuvent être plus<br />

complexes, jusqu'à faire appel à de l'intelligence artificielle.<br />

Ex : le moteur d'IA ALICE développé par la société d'effets<br />

spéciaux Framestore CFC pour le film Troie.<br />

http://www.cgsociety.org/index.php/CGSFeatures/CGSFeatureSpecial/the_cg_vfx_of_troy_part_2<br />

Troie (2004)<br />

42


Problématique<br />

Les temps de calcul peuvent vite être très élevés en fonction du<br />

nombre d'individus simulés.<br />

Une implémentation « naïve » de l'algorithme des boids a une<br />

complexité en O(n 2 ), car chaque boid doit considérer tous les<br />

autres pour déterminer si il se trouve dans son proche voisinage.<br />

La complexité peut être largement réduite en utilisant des<br />

structures spatiales (grille régulière ou adaptative de type<br />

quadtree ou octree) dans lesquelles on range les boids afin de<br />

n'avoir à rechercher des voisins que dans une partie restreinte du<br />

groupe.<br />

43


5.2 Automates cellulaires<br />

= Grille de cellules contenant un état parmi un ensemble fini et<br />

pouvant évoluer au cours du temps.<br />

L'état d'une cellule au temps t+1 est fonction de l'état au temps t<br />

de cellules voisines.<br />

À chaque itération de temps, les mêmes règles sont appliquées<br />

simultanément à toutes les cellules de la grille, produisant une<br />

nouvelle « génération » de cellules dépendant entièrement de la<br />

génération précédente.<br />

44


Exemple d'automates cellulaire : le jeu de la vie<br />

Le « jeu de la vie » (John Conway, 1970) est un automate<br />

cellulaire bidimensionnel où chaque cellule peut prendre 2 valeurs<br />

(« vivante » ou « morte ») et où son état futur est déterminé par<br />

son état actuel et par le nombre de cellules vivantes parmi les 8<br />

qui l'entourent :<br />

- Si la cellule est vivante et entourée par 2 ou 3 cellules<br />

vivantes, elle reste en vie à la génération suivante, sinon elle<br />

meurt.<br />

- Si la cellule est morte et entourée par exactement 3 cellules<br />

vivantes, elle naît à la génération suivante.<br />

45


Simulation de foule par automate cellulaire<br />

Personnes = pions se déplaçant de<br />

case en case.<br />

Mouvement possible que si la case est<br />

vide.<br />

46


5.3 Scripts<br />

= fichier contenant sous la forme d'un langage plus ou moins<br />

complexe la description d'une succession d'animations de<br />

personnages et d'objets.<br />

<strong>Animation</strong> scriptée dans un jeu, dans le scénario d'une mission<br />

d'un simulateur, etc.<br />

47


5.4 Logiciels d'animation de foules<br />

Anima<br />

http://www.axyz-design.com/anima/<br />

CrowdFX<br />

Massive (Multiple Agent Simulation System in Virtual Environment)<br />

Utilisé dans le film Le seigneur des Anneaux<br />

48


6. Simulation dynamique<br />

6.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 />

49


6.2 Systèmes de particules<br />

6.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 />

50


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 />

51


6.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 />

53


6.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 />

54


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 />

55


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 />

56


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 />

57


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 />

58


6.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 />

59


6.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 />

60


<strong>Animation</strong> d’objets rigides<br />

61


<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 />

62


<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 />

63


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 />

64


<strong>Animation</strong> de liquides<br />

http://physbam.stanford.edu/~fedkiw/<br />

65


<strong>Animation</strong> de gaz<br />

http://physbam.stanford.edu/~fedkiw/<br />

66


6.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 />

67


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 />

68


7. 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 />

69


7.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 />

70


7.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 />

71


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 />

72


7.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 />

73


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 />

74


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 />

75


7.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 />

76


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 />

77


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 />

78


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 />

79


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 />

80


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 />

81


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 />

82


8. 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 />

83


8.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 />

84


8.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 />

85


8.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 />

86

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!