Accélération de la détection
Pour éviter un parcours naïf des segments de la chevelure, qui conduirait à un coût de calcul
quadratique en nombre de segments, nous utilisons une grille 3D mise à jour à chaque pas de temps,
dont les cellules stockent à chaque instant la liste des segments qui intersectent la portion de l’espace
correspondante. À chaque pas de temps, on teste alors uniquement l’interpénétration des segments
se trouvant dans la même cellule de la grille, ce qui limite considérablement le nombre de tests à
effectuer, en particulier lorsque la chevelure comporte un grand nombre de mèches.
La grille 3D est représentée par une table de hachage, associée à la fonction de hachage suivante :
index: pos3D
SRptr_cell
pos3D
oùpos3Dest un vecteur position de l’espace, etptr_cell
pos3D
l’indice de la cellule de la grille 3D
contenant cette position.
FIG. 3.11: Les interactions entre mèches sont détectées efficacement, car les segments de mèches sont de simples cylindres. (a) Des forces de frottement sont générées entre deux segments parallèles ; (b) des forces de répulsion sont appliquées entre deux segments non parallèles ; (c) la réponse à la collision est calculée aux points les plus proches, et distribuée ensuite aux nœuds simulés comme des masses ponctuelles.
Réponse
Notre traitement des interactions entre mèches est basé sur une méthode de pénalité, et s’inspire
du modèle de collision anisotrope de Planteet al.[PCP02]. Ainsi, les segments de mèches orientés
de manière similaire peuvent s’interpénétrer, et sont dans ce cas soumis à des forces de frottement
visqueux. On empêche par contre l’interpénétration entre les segments d’orientations trop différentes
en les soumettant à des forces élastiques répulsives (forces de pénalité), qui permettent d’éviter le
croisement des mèches (voir Figure 3.11, (a) et (b)).
On modélise ce comportement anisotrope à l’aide de forces de frottement visqueux V
1and V
2,
calculées aux points les plus proches P
1etP
2sur les deux segments en collision,
V
1k
fP˙
2˙
P
1; V
2V
1, (3.1)
et en ajoutant des forces de répulsionR
1etR
2lorsque l’angle entre les deux segments est supérieur
à un certain seuil :
R
1k
rr
d
P
1P
2N
P
1P
2N; R
2R
1, (3.2)
oùrest la somme des rayons des deux morceaux de mèches,dla distance entre les deux segments de
mèche,k
fun coefficient de frottement etk
run coefficient de raideur.
La force résultante F
V
R en P (où P représente P
1ou P
2) est alors répartie selon deux
forces F
pet F
cappliquées respectivement aux nœuds N
pet N
cdes extrémités du segment (voir
Figure 3.11, (c)) : siP
λN
p1
λ
N
c, alors
F
pλF; F
c1
λ
F. (3.3)
Le coefficient de frottement k
futilisé dans l’équation (3.1) doit varier selon le niveau de détail
hiérarchique du segment de mèche. Les forces de frottement doivent permettre de réduire la norme
de la vitesse relative entre les nœuds, mais ne doivent en aucun cas changer la direction de la vitesse
relative ; ce problème peut survenir dans le cas où la masse est trop petite par rapport à la force
appliquée. Afin de maintenirk
fà une valeur raisonnable tout en garantissant un frottement équivalent
à tous les niveaux de détail, nous utilisons : k
fαm, où mest la masse du nœud enfant N
c. Nous
vérifions aussi que le pas de temps est suffisamment faible pour éviter l’inversion des vitesses relatives
(αδt
!1).
6 Résultats et discussion
Dans les exemples présentés, la masse de chaque nœud grossier a été fixée de manière à ce que la
masse totale de la chevelure atteigne entre 500 g et 2 kg (à peu près 1 g par nœud grossier), sachant
que le processus de subdivision assure bien évidemment la conservation de la masse de la chevelure.
Par le biais d’une interface interactive, l’utilisateur peut faire varier le seuil de subdivision entre 0
1 et
0
5 N
m
kg
1
. La valeur choisie dépend de la proportion de subdivision que l’on souhaite au cours
du mouvement ; pour des cheveux bouclés par exemple, généralement caractérisés par une tendance à
rester groupés en mèches, on choisira une valeur assez forte (peu de subdivision), tandis que pour des
cheveux lisses, on pourra choisir une valeur plus faible (davantage de séparation en sous-mèches), de
telle sorte que la chevelure puisse s’étendre visiblement au cours du mouvement. Pour l’animation de
cheveux bouclés, nous avons ainsi activé seulement 2 niveaux de détail, tandis que 3 niveaux ont été
utilisés pour la simulation de cheveux lisses, permettant d’obtenir un bon compromis entre réalisme
visuel et efficacité des calculs. Plus de niveaux de détail pourraient être employés pour augmenter le
réalisme visuel de ces animations.
Résultats qualitatifs
Quelques résultats sont illustrés ci-après. Différents styles de coiffure ont ainsi été simulés pour
différents types de mouvement. Grâce au procédé de fusion, le mouvement des cheveux se stabilise
lorsque la chevelure revient au repos, car les micro-collisions entre petites mèches voisines sont alors
évitées.
Les animations montrées sur la Figure 3.12 ont été rendues en affichant environ 10000 cheveux
individuels. Le rendu de notre méthode a été effectué par Kim, en utilisant une version modifiée des
cartes d’opacité [KN01] pour le calcul de l’auto-ombrage. Le modèle local de réflexion utilisé est
celui de Kajiya-Kay [KK89], implémenté sur la carte graphique. Pour chaque image, les cheveux
individuels sont tracés comme des polylines OpenGL, avec un antialiasage basé sur un algorithme de
tri défini dans [KN02]. Le coût du rendu peut varier d’environ une fraction de seconde à quelques
secondes par image, selon la précision souhaitée.
Performances
Modèle de cheveux animé Algorithme naïf Algorithme adaptatif
(N, L) temps/image (s) temps moyen/image (s)
Court (5149, 2) 3,1 0,32
Court bouclé (4909, 2) 2,7 0,27
Long (6065, 3) 3,8 0,09
Long bouclé (9853, 3) 7,9 0,29
TAB. 3.1:Performances de l’algorithme adaptatif.
Le tableau ci-dessus compare notre méthode adaptative avec l’algorithme naïf qui consisterait
à simuler le niveau de détail le plus fin tout au long de l’animation. Le tableau indique le temps (en
secondes) mis pour calculer un pas d’animation, pour quatre types différents de chevelures (N indique
le nombre total de nœuds de la hiérarchie au niveau le plus fin, et L le nombre de niveaux de détail
simulés pour chaque coiffure) et pour un mouvement du personnage identique dans les quatre cas. Ces
valeurs ont été obtenues en simulant l’algorithme sur un processeur Pentium de 1.7 GHz. Nous avons
utilisé 4 pas d’intégration par image (i.e., dt
10ms). Le calcul pour une animation de 10 secondes a
pris au maximum 5 minutes.
7 Bilan
En terme de performances, on constate que notre algorithme est efficace : les chevelures sont
animées avec un coût très raisonnable, en comparaison avec les heures de calcul nécessaires à la
mé-thode de Planteet al.[PCP02], qui utilise de manière similaire des mèches volumiques pour
l’anima-tion mais sans exploiter la multirésolul’anima-tion. Nos temps de calcul sont comparables à ceux de Wardet
al.[WLL
03] obtenus avec une représentation de la chevelure par niveaux de détail. Notre approche
a également l’avantage de pouvoir traiter des mouvements importants de la chevelure, contrairement
à la plupart des méthodes qui ne montrent que les mouvements lents de chevelures lors de légers
mouvements de la tête, ou sous un léger vent.
Cependant, notre méthode ne prend pas en compte les déformations géométriques d’une mèche ;
les mèches restent donc toujours assez visibles (même si elles changent de niveau de détail), ce qui
n’est pas toujours souhaitable, surtout lorsque l’on veut animer une chevelure très lisse. Dans ce cas,
des méthodes basées sur des interpolations locales entre cheveux sont certainement plus appropriées.
De plus, nos critères de subdivision et de fusion ont été définis de manière trèsad hoc, et ces choix
mériteraient donc d’être approfondis. Enfin, le modèle physique utilisé dans cette approche est très
approximatif donc peu réaliste. Dans la suite de nos travaux (Chapitres 5, 6, et 7), nous nous proposons
de construire un modèle de chevelure mécaniquement réaliste.
FIG. 3.12: Animations finales. De haut en bas : des cheveux courts et lisses dans un mouvement de course ; des cheveux longs et épais dans un mouvement de pencher en avant ; des cheveux longs bouclés dans un mouvement de pencher en avant ; des cheveux courts et bouclés dans un mouvement de pencher en avant.
Représentation volumique de la
chevelure pour le rendu
A certaines heures, la campagne est noire de so-leil. Les yeux tentent vainement de saisir autre chose que des gouttes de lumière et de couleurs qui tremblent au bord des cils.
CAMUS,Noces à Tipasa
E