Document

publicité
ANIMATION
PAR
TRAJECTOIRES
° Définition
° Choix de la courbe
° Contrôle du mouvement le long d’une courbe
° Interpolation de rotations représentées par des quaternions
° Suivi du trajet impliquant une modification de l’orientation de l’objet
° Lissage d’un trajet
° Détermination d’un trajet sur une surface
1. Tomas Akenine-Möller, Eric Haines, Real-Time Rendering. A K
Peters, 2002, 835p.
2. Rick Parent, Animatique Algorithmes et techniques. Vuibert, Paris,
1
2003, 530p.
Définition
Toutes les caractéristiques d’une scène peuvent varier dans le temps :
-
un point de référence sur un objet de la scène,
la position de la caméra,
la couleur d’un objet,
la position d’une source lumineuse,
etc.
Pour réaliser de telles animations, nous utilisons des trajectoires i.e.
des chemins qui représentent le parcours à suivre par un objet.
Outre les objets, il est également possible de lier une trajectoire à une
caméra ou à une source lumineuse.
Les trajectoires sont définies à l’aide de courbes paramétriques 3D :
C(u)  (Cx(u), Cy(u), Cz(u)), u  [0, 1].
2
Description du contexte auquel fait face l’animateur
Cette méthode permet de spécifier avec précision le mouvement
d’objets. Les attentes de l’animateur sont claires.
Très peu d’incertitude à propos des positions et orientations à produire,
l’ordinateur sert uniquement à calculer les valeurs réelles.
Choix de la trajectoire
Interpolation ou approximation ou techniques de points de contrôle
Courbe d’interpolation
Positions effectives par lesquelles
la courbe doit passer.
Courbe d’approximation ou
d’ajustement
Échantillon de points rapprochés
de la courbe
3
Critères de choix de la trajectoire
Courbe de Bézier
Liste de points permettant de
contrôler la forme de la courbe
Technique de points de contrôle
Complexité de la trajectoire
Complexité (degré) 
Moins rapide est l’évaluation des
polynômes.
Meilleur choix : les polynômes cubiques par morceau.
Fournissent un tracé suffisamment régulier tout en procurant
suffisamment de flexibilité pour satisfaire aux contraintes de
continuité.
4
Un polynôme d’ordre supérieur n’offre pas d’avantages significatifs.
Critères de choix de la trajectoire
Continuité de la courbe composée (courbe par morceaux)
aux points de jonction entre segments adjacents
La régularité de la courbe obtenue est une considération importante.
Le nombre de dérivées continues de l’équation de la courbe.
Discontinuité positionnelle
Continuité d’ordre 0
mais pas tangentielle
Continuité d’ordre 0 et 1
(en animation, cela est suffisant habituellement)
5
Critères de choix de la trajectoire
Contrôle global par opposition à contrôle local
Lorsqu’on trace une courbe, on procède souvent par raffinements
successifs.
Plus avantageux
Contrôle local : la modification d’un seul point de contrôle a un effet
sur une portion limitée de la courbe.
Contrôle global : le repositionnement d’un point de contrôle redéfinit,
même légèrement, la totalité de la courbe.
Note : Quasiment toutes les courbes composées présentent un
contrôle local.
Les courbes de Bézier de degré élevé présentent un contrôle
global.
Polygone de contrôle
d’une courbe de degré
10
6
Comparaison de l’effet local et global
du déplacement d’un point de contrôle
Contrôle local
Contrôle global
7
En résumé …
Il existe un grand nombre de formulations possibles. La formulation
spécifique choisie dépend des critères précédents.
En animation, les choix suivants sont souvent faits :
- la spline de Catmul-Rom
- la courbe de Bézier de degré N à partir des points P0, P1, …, PN
- le mélange parabolique.
8
Contrôle du mouvement le long de la trajectoire
C(u), u  [0, 1]
1ière étape d’une animation : choisir la forme de la trajectoire.
2ième étape d’une animation : déterminer la vitesse de parcours de la
trajectoire C(u) par rapport à u.
Premier objectif :
Fournir une méthode permettant de progresser
le long de la courbe en incréments égaux.
Notons d’abord que la variation constante du paramètre u ne signifie
pas que les positions euclidiennes varieront d’une quantité constante
i.e. d’une vitesse constante.
C(u)
u
9
Comment assurer une vitesse de parcours
constante ?
Moyen utilisé: la trajectoire doit être paramétrée par longueur d’arc i.e.
selon la distance parcourue sur la courbe.
Les 2 problèmes suivants doivent être résolus :
(a) Étant donné les paramètres u1 et u2, trouver la distance à
parcourir sur la courbe entre u1 et u2.
(b) Étant donné une longueur d’arc s et une valeur paramétrique u1,
trouver u2 tel que s = distance à parcourir sur la courbe entre u1 et u2.
Il faut établir la relation entre u et la longueur d’arc en spécifiant la
fonction s = G(u), qui donne la longueur de la courbe de son point de
départ jusqu’au point correspondant à u.
Si G-1 existe, la courbe peut être paramétrée efficacement par longueur
d’arc, i.e. C(G -1(s)).
Ensuite, l’animateur doit fixer la distance que l’objet doit parcourir le
10
long de la courbe à chaque intervalle de temps.
Approche analytique au calcul de la longueur d’arc
Pour calculer la longueur d’une courbe C(u) entre 2 valeurs u1 et u2,
il s’agit d’évaluer l’intégrale suivante :
u2
s =  C(u) . C(u) du
u1
Impossible à résoudre analytiquement pour une courbe arbitraire.
On doit opter pour des techniques d’intégration numériques.
11
Estimation de la longueur d’arc par différentiation
vers l’avant
Stratégie la plus simple et la plus facile à concevoir pour faire le lien
entre le paramètre u et la longueur d’une portion de la courbe :
- Échantillonner la courbe avec une multitude de valeurs paramétriques.
- À chaque valeur paramétrique est associée un point sur la courbe.
- La longueur d’arc peut être estimée en calculant la distance linéaire
entre points adjacents sur la courbe.
- Un tableau T est construit avec des longueurs d’arc indexées par des
valeurs paramétriques (ui = i * différence entre 2 valeurs de suite de u,
T
i = 0, 1, 2, …, 20).
0
1
2
3
=0
= Distance entre les points C(0) et C(0.05)
= T[1] + Distance entre les points C(0.05) et C(0.10)
= T[2] + Distance entre les points C(0.10) et C(0.15)
18
19
20
= T[19] + Distance entre les points C(0.95) et C(1.00)
12
Utilisation du tableau T pour estimer la longueur
d’arc entre le début de la courbe et le point C(u) sur
la courbe où u est fixé dans [0, 1]
Approximation grossière :
L’indice i de la composante dans le tableau T dont le paramètre est le
plus proche de u est obtenu comme suit :
i = 0.5 + u / différence entre 2 entrées successives de u
où [ x ] désigne la partie entière de x.
Approximation grossière de la longueur d’arc : T[i].
Approximation par interpolation entre les longueurs d’arc correspondant
aux entrées de chaque côté de u :
i = u / différence entre 2 entrées successives de u
Approximation
par interpolation
T[i] + (T[i+1] – T[i]) * (u - ui) / (ui+1 - ui)
13
Utilisation du tableau T pour estimer la valeur de u,
étant donnée la longueur d’arc s
« Étant donné les paramètres u1 et u2, trouver la distance à parcourir sur
la courbe entre u1 et u2 »
revient à :
appliquer la méthode précédente 2 fois et
soustraire les distances respectives obtenues.
Problème inverse :
Approximation grossière du paramètre u associé à s : ui où
l’indice i de la composante dans le tableau T dont la longueur d’arc
est la plus proche de celle de s est obtenu par recherche binaire.
Approximation par interpolation du paramètre u associé à s :
ui + (ui+1 – ui) * (s – T(i)) / (T(i+1) – T(i))
où l’indice i est maximal avec T[i]  s.
14
Utilisation du tableau T pour estimer la valeur de u,
étant donnée la longueur d’arc s
« Étant donné une longueur d’arc s et une valeur paramétrique u1,
trouver u2 tel que s = distance à parcourir sur la courbe entre u1 et u2 »,
cela revient à :
- estimer la longueur d’arc associée à u1,
- ajouter le résultat à s pour obtenir s’,
- utiliser la méthode précédente pour estimer la valeur
paramétrique u correspondant à s’.
Avantages : Approche facile à mettre en œuvre, intuitive et
rapide à calculer.
Désavantages : Les résultats sont des approximations.
Méthodes pour réduire les erreurs :
- suréchantillonner la courbe :10 000 valeurs paramétriques sur la courbe
avec 1000 entrées dans T.
chaque intervalle est subdivisé en 10 sous-intervalles.
15
- utiliser des techniques d’interpolation d’ordre supérieur (non linéaire).
Approche adaptative
Pour mieux contrôler la précision de nos estimés, on peut utiliser une
approche qui effectue plus de calculs dans les zones estimées contenir
des erreurs importantes.
Comme auparavant, il faut construire une structure de données T
où la iième entrée est de la forme :
(une valeur paramétrique ui, la longueur d’arc de l’origine de la courbe
à la position correspondant à ui).
une liste chaînée
(le # d’entrées n’est pas
connu à priori)
16
Description de l’algorithme adaptatif
1. Soit
- la liste vide T,
- la liste vide S des segments de la courbe à traiter,
(chaque entrée renferme les 2 valeurs paramétriques
du segment à traiter).
Ajouter l’élément <0, 0> dans la liste T.
Ajouter l’élément <0, 1> dans la liste S.
2. Choisir la première entrée de S de la forme (u, u).
Calculer um : la valeur médiane entre u et u.
Calculer le point sur la courbe C(um).
Calculer le point sur la courbe C(u).
Calculer le point sur la courbe C(u).
17
Description de l’algorithme adaptatif (suite)
3. Si | ||C(u) – C(u) || - (||C(um) – C(u) || + ||C(u) – C(um) || ) |  seuil
ranger dans T l’élément < um, T(u) + ||C(um) – C(u) || >,
ranger dans T l’élément < u, T(um) + ||C(u) – C(um) || >.
sinon ranger au début de S les 2 éléments suivants :
<u, um> et < um, u >.
alors
4.
Si la liste S n’est pas vide,
retourner à l’étape 2.
FIN
Ces valeurs
sont déjà
dans T.
Inconvénient :
À un stade précoce de la procédure, 2 moitiés de segment peuvent
indiquer qu’il est possible d’arrêter la subdivision.
Solution :
Forcer la subdivision jusqu’à un certain niveau avant
18
d’appliquer la procédure adaptative.
Description de l’algorithme adaptatif (fin)
au-dessus du seuil
Note :
au-dessous du seuil
La recherche d’une entrée dans T n’est pas aussi simple
que précédemment.
On peut opter pour une recherche binaire.
19
Contrôle de la vitesse à laquelle la courbe est
parcourue
Jusqu’ici, nous avons considéré une progression sur la courbe par
intervalles égaux de longueur d’arc (vitesse constante).
Pour un parcours contrôlé de la courbe, on doit définir la fonction :
s(t) : [0, tmax]  longueur d’arc parcouru à l’instant t
où tmax désigne la durée du mouvement.
Note : Pour se simplifier la tâche, on peut normaliser le paramètre
t qui devient t’ = t / tmax.
En atteignant la 2ième extrémité de la courbe à tmax,
s devient :
s’ = s / longueur de la courbe au complet.
 La courbe d’espace C(u) définit le point où il faut se rendre,
20
alors que la fonction s(t) en définit l’instant.
Procédure à suivre pour contrôler la vitesse
À chaque instant t = t0, t1 = t0 + , t2 = t0 + 2, …, tmax,
>0
- calculer s(t),
- calculer u tel que la longueur d’arc de l’origine de la courbe
à la position correspondant à u est égale à s(t),
- déterminer la position C(u) sur la courbe.
Hypothèses souvent utilisées :
•
La totalité de la longueur d’arc de la courbe doit être parcourue
pendant la totalité du temps donné.
•
La fonction s(t) doit être monotone croissante i.e. la courbe doit
être parcourue sans déplacement arrière.
•
La fonction s(t) doit être continue, i.e. il ne doit pas y avoir de
sauts instantanés sur la courbe.
21
Exemple courant de contrôle de la vitesse
(parcours à 2 phases de type démarrage / arrêt)
Un objet accélère à partir d’une position arrêtée, atteint une vitesse
maximale et ralentit à nouveau progressivement jusqu’à l’arrêt.
s(t) = sin( t –  / 2) + 1 / 2,
s(t)
s(t) est normalisée.
t  [0, 1]
1
0
t
1
s'(t) =  cos( t –  / 2) / 2,
t  [0, 1]
La vitesse est nulle à t = 0 et t = 1.
Elle est maximale à t = 0,5.
Cela indique une accélération à partir d’une position d’arrêt en début de
22
mouvement et une décélération jusqu’à l’arrêt en fin de course.
Exemple de contrôle de la vitesse
(parcours à 3 phases : accélération – vitesse
constante - décélération)
En posant t = t1 et t = t2, les début et fin du parcours intermédiaire
à vitesse constante, on obtient :
s(t)
2 t1 . sin  t - 
f
2 t1 2
s(t) =
2 t1

+ t - t1
+1
f
t  t1
t1  t  t2
2 t1 + t2 - t1 + (1 – t2) 2 sin t - t2 . 


1 - t2 2
où f = 2 t1 + t2 - t1 + 2(1 – t2)


1
•
•
t1 t2
0
f
t
1
t2  t
s(t) est définie de telle sorte que:
s(0) = 0 et s(1) = 1,
s(t) est continue,
s'(t) est continue. 23
Exemple de contrôle de la vitesse où des
hypothèses sont faites concernant l’accélération
Pour éviter l’évaluation des fonctions trigonométriques, une approche
consiste à établir des hypothèses de base concernant l’accélération.
Cas élémentaire :
accélération
accélération nulle
durée
temps
vitesse
vitesse constante = v = longueur de la courbe
durée de l’animation
v
durée
temps
24
Cas élémentaire (suite)
s(t)
longueur de la courbe
durée
temps
La fonction s(t) peut être obtenue par intégration.
L’intégration introduit une constante; celle-ci est nulle car s(0) = 0.
25
Exemple de contrôle de la vitesse où des
hypothèses plus générales sont faites concernant
l’accélération
Accélération et décélération constantes en début et fin de mouvement.
Accélération nulle en milieu de mouvement.
Accélération / décélération
a1
a(t) =
a1
0
t2
1
temps
t1
a2
où
0
a2
t  t1
t1  t  t2
t2  t
a1 > 0
a2 < 0.
26
Exemple de contrôle de la vitesse où des
hypothèses plus générales sont faites concernant
l’accélération
Hypothèses :
a1 t + v0
v(t) =
v(0) = v0
v(t) est continue
a1 t1 + v0
a2 t + a1 t1 – a2t2 + v0
t  t1
t1  t  t2
t2  t
Vitesse
On peut en déduire v(1).
a1 t1 + v0
v0
0
t1
t2
1
temps
27
Exemple de contrôle de la vitesse où des
hypothèses plus générales sont faites concernant
l’accélération
distance à parcourir
Hypothèses :
s(0) = 0
s(t) est continue
s(1) = L > 0
½ a1 t2 + v0t
s(t) = (a1 t1 + v0) t - ½ a1 t12
½ a2 t2 + (a1 t1 – a2t2 + v0 ) t + ½ a2 t22 - ½ a1 t12
s(t)
Note :
L
0
a2 < 0 
a1 t1 + v0 - ½ a1 t12 > L
•
(a1 t1 + v0) t2 - ½ a1 t12
(½ a1 t1 + v0) t1
t  t1
t1  t  t2
t2  t
•
t1
t2
1
temps
28
Exemple de contrôle de la vitesse où des
hypothèses plus générales sont faites concernant
l’accélération
En fixant a1, v0 , t1, t2 et L, l’animateur détermine facilement a2.
s(1) = L  a2 = L - a1 t1 - v0 + ½ a1 t12
0.5 – t2 + 0.5 t22
Cas particulier :
v(1) = v0 = 0 

a2 + a1 t1 – a2t2 = 0
a2 = - a1 t1 / (1 - t2) < 0.
Cette dernière méthode est beaucoup plus souple; elle permet à
l’animateur d’avoir un plus grand contrôle du mouvement final grâce
à la possibilité de définir divers paramètres.
29
Exemple de contrôle de la vitesse qui consiste à
fixer des positions et des vitesses
à des instants précis (ti, v(ti), s(ti)), i = 1, 2, …, N
Des techniques d’interpolation sont utilisées pour définir v(t). Cela peut
donner lieu à des formes bizarres.
s(0) = 0, s(1) = L, v(0) = 0, v(1) = 0, s(t1) = s1,
Exemple :
v(t1) = v1.
v(t) est définie à partir de 2 fonctions du second degré :
u(t), t  t1
v(t)
v(t) =
w(t), t  t1
v1
v1
t1
temps
t1
temps
On revient sur nos pas.
Plusieurs fonctions sont possibles pour u(t) selon que s1 > t1v1 / 2 ou non.
30
Plusieurs fonctions sont aussi possibles pour w(t) selon la valeur : L - s1.
Interpolation de rotations représentées par des
quaternions
Les quaternions sont utiles pour la représentation d’orientations.
L’une des principales raisons de choisir des quaternions tient au fait
qu’ils peuvent être aisément interpolés.
Il faut d’abord noter qu’une interpolation linéaire directe de
quaternions produit un mouvement non linéaire.
Intervalles inégaux
Intervalles égaux
Des interpolations linéaires également espacées de trajet rectiligne
entre 2 points d’un cercle génèrent un espacement inégal des points
31
après projection sur un cercle.
Interpolation de rotations représentées par des
quaternions
Afin d’éviter les effets d’agrandissement sur l’interpolation, on
utilise généralement des quaternions unitaires
i.e. des points de la sphère unitaire dans l’espace 4D.
Une interpolation linéaire à intervalles égaux entre 2 quaternions
unitaires ne produira pas des intervalles espacés de manière égale
sur la sphère unité.
Nous allons plutôt considérer une interpolation linéaire sphérique:
où
slerp(q1, q2, t) = [q1 sin(1 – t) + q2 sin t ] / sin 
où cos  = q1. q2 > 0
q1 et q2 sont des quaternions unitaires.
produit scalaire
32
Interpolation linéaire sphérique
Propriétés :
Soient q1 et q2 des quaternions unitaires,
(1) slerp(q1, q2, 0) = q1
(2) slerp(q1, q2, 1) = q2
(3) Si  est très petit, sin    et slerp(q1, q2, t)  (1 – t) q1+ t q2
(4) slerp(q1, q2, t)  sphère 4D unitaire,
 t  [0, 1]
slerp(q1, q2, t) . slerp(q1, q2, t) = 1
produit scalaire
(5) La courbe slerp(q1, q2, t)
 (sphère 4D unitaire  plan formé par q1, q2 et l’origine)
(q1 x q2) . P = 0
(6) slerp(q1, q2, 0.5) = sin /2 (q1+ q2)
sin 
On peut calculer q1+ q2
et normaliser le résultat.
Interpolation linéaire sphérique et
discontinuité du 1er ordre
Difficulté rencontrée avec l’approche précédente :
discontinuité du premier ordre.
Solution :
utiliser une interpolation cubique de
Bézier pour lisser l’interpolation.
K. Shoemake, Animating Rotation with Quaternion Curves,
Computer Graphics (Proceedings of SIGGRAPH 85), 19(3),
p. 143-152.
Tomas Akenine-Möller, Eric Haines, Real-Time Rendering.
A K Peters, 2002, pp. 47-53.
34
Modification de l’orientation de l’objet en se
déplaçant le long d’un trajet
Soit C(u), u  [0, 1] la trajectoire courante,
C(s), la position courante,
(u, v, w) le système de coordonnées local de l’objet,
l’origine de ce système est C(s),
C(u), u  [0, 1]
v
w
u
C(s)
Plusieurs moyens de définir le repère de l’objet :
Utilisation du repère de Frenet
Il est déterminé par la tangente à la courbe et sa courbure :
w = C'(s),
u = C'(s) x C''(s) et
v = w x u.
35
Modification de l’orientation de l’objet en se
déplaçant le long d’un trajet
Exemple : Courbe de Bézier de degré 2 où P, Q et R sont dans le même plan.
Q
C(u) est dans le plan PQR
v=wxu
C'(u)
P
u
R
C'(u) est tangent au plan PQR
u est normale au plan PQR.
Problèmes rencontrés :
- lorsque C''(s) = 0,
- lorsqu’il y a discontinuité dans le vecteur de courbure,
- les mouvements résultants sont généralement trop extrêmes
et d’une allure peu naturelle :
utiliser le vecteur de tangente comme direction de vue
n’est pas souhaitable.
Une orientation plus naturelle, pour une personne
circulant en voiture ou à bicyclette, consisterait à regarder
36
plus loin vers l’avant sur la courbe.
Modification de l’orientation de l’objet en se
déplaçant le long d’un trajet
Utilisation d’un centre d’intérêt I sur un point fixe de l’environnement
Méthode satisfaisante lorsque le trajet que suit la caméra cerne une
zone d’action sur laquelle doit se porter l’attention de la caméra.
w = I – C(s)
On cherche ensuite à fixer le vecteur v généralement dans la direction
positive de l’axe y :
u = w x axe des y
v=uxw
ou encore,
v = le vecteur est spécifié explicitement par l’utilisateur
37
u=vxw
Modification de l’orientation de l’objet en se
déplaçant le long d’un trajet
Utilisation d’un centre d’intérêt C(s + ) où  est fixe
Lorsque s +  > 1, on peut procéder par interpolation en utilisant le
vecteur tangent à la courbe à u = 1.
Cela peut donner lieu à des images saccadées.
Pour solutionner ce problème, on considère la moyenne de plusieurs
centres d’intérêt pour tenter de lisser la direction de vue.
Utilisation d’un centre d’intérêt défini à l’aide du trajet I(u), u  [0, 1]
lequel est complètement indépendant de la trajectoire de parcours de
l’objet à déplacer
w = I(s) – C(s)
u = w x (U(s) – C(s))
v=uxw
où U(s) désigne un trajet de vecteur généralement dans la direction
38
positive de l’axe y.
Lissage d’un trajet
En utilisant des techniques numériques, la courbe résultante issue
d’un ensemble de points peut s’avérer trop saccadée.
Rick Parent, Animatique Algorithmes et techniques. Figure 3.34 & 3.35, p. 112-113.
On peut tenter de lisser les coordonnées des points de plusieurs
manières :
Lissage avec interpolation linéaire
de valeurs adjacentes
Pi'
=
Pi + Pi-1 + Pi+1
2
2
1 Pi-1 + 1 Pi + 1 Pi+1
=4
2
4
Tendance à réduire la courbure (à aplatir la courbe)
39
Lissage avec interpolation cubique
de valeurs adjacentes
Les points adjacents Pi-2, Pi-1, Pi+1, Pi+2 placés de part et d’autre d’un
point Pi peuvent servir à définir une courbe cubique P(u).
La courbe cubique est évaluée en son point médian.
On calcule la moyenne entre le point médian et le point d’origine.
P(u) = a u3 + b u2 + c u + d
Pi-2 = P(0) = d
Pi-1 = P(1 / 4) = a / 64 + b / 16 + c / 4 + d
Pi+1 = P(3 / 4) = 27a / 64 + 9b / 16 + 3c / 4 + d
Pi+2 = P(1) = a + b + c + d
40
Lissage avec interpolation cubique
de valeurs adjacentes
a=
-16 Pi-2 + 32 Pi-1 - 32 Pi+1 + 16 Pi+2
3
3
3
3
b=
32 Pi-2 - 56 Pi-1 + 40 Pi+1 – 16 Pi+2
3
3
3
3
c=
-19 Pi-2 + 8 Pi-1 - 8 Pi+1 + Pi+2
3
3
d = Pi-2
P(1 / 2) = -1 Pi-2 + 2 Pi-1 + 2 Pi+1 - 1 Pi+2
6
3
3
6
(P(1 / 2) + Pi) / 2
41
Lissage avec interpolation cubique
de valeurs adjacentes
Note : Aux extrémités de la courbe, on peut prolonger celle-ci à
l’aide d’une parabole.
Rick Parent, Animatique Algorithmes et techniques. Figure 3.40, p. 115.
42
Détermination d’un trajet sur une surface
Si un objet se déplace à la surface d’un autre objet, il faut déterminer
un trajet sur cette surface.
Si les points de départ et de destination sont connus, il peut être
coûteux de trouver le trajet le plus court entre ces points.
Solution alternative pour déterminer des trajets sous-optimaux
Soit un plan qui contient les points de départ et de destination et
dont la normale devrait être à peu près perpendiculaire à la surface :
moyenne des normales aux points de départ et de destination,
En considérant un maillage polygonal de la surface, on peut calculer
l’intersection entre ce plan et la surface.
43
FIN
Téléchargement