next up previous
suivant: Lois de physique utilisées monter: Simulation de deltaplanes et précédent: Intégration Verlet

Simulation de tissu par satisfaction de contraintes

Maintenant que les principles de base sont acquis, intéressons nous plus précisément à la simulation de tissus avec une technique proposée par [Jak01]. Au lieu de recourir à des ressorts pour préserver la forme des tissus, on utilise des contraintes de distance. Ces dernières peuvent être vues comme des tiges reliant deux particules. À chaque itération de la simulation, on va tenter de préserver toutes les contraintes de distance en les corrigeant de façon itérative. À la figure 6, on apperçoit les règles appliquées. Le code nécessaire à cette étape est présenté à la figure 7. Dans le cas où les particules n'ont pas toutes la même masse, on peut adapter le code afin d'en tenir compte. Au lieu de multiplier par $ 0.5$, il suffit de multiplier par un ratio inversement proportionnel à la masse de la particule à corriger.

Figure 6: Contrainte de distance
Image contrainte2

Figure 7: Code de satisfaction de contrainte
\begin{figure}\centering
\begin{verbatim}void satisfaireContrainte(Contrainte ...
... c.a.pos += v * d * 0.5;
c.b.pos -= v * d * 0.5;
}\end{verbatim}\end{figure}

Dans un cas réel ayant plusieurs contraintes de distance, il faut porter une attention particulière à la façon d'effectuer les calculs afin d'éviter que l'ordre du parcours des contraintes ait un impact sur le résultat de la simulation. Pour ce faire, à chaque contrainte, on calcule des corrections qui doivent être appliquées aux positions des particules. Après avoir passé à travers toutes les contraintes, pour chacune des particules, on applique la moyenne de toutes les corrections. Enfin, pour donner de bons résultats, il faut appliquer cette procédure plusieurs fois. En pratique, 40 à 55 itérations de satisfaction de contrainte par itération de simulation donnent de bons résultats. Le code associé à cette partie est à la figure 8.

Figure 8: Code de satisfaction de contraintes
\begin{figure}\centering
\begin{verbatim}int n; // nb de particules
int m; // ...
....nb++;
c.b.correction -= v * d * 0.5;
c.b.nb++;
}\end{verbatim}\end{figure}

L'avantage de cette méthode est qu'elle est très simple et très rapide. Contraintement aux réseaux de masse-ressorts, la satisfaction de contrainte de distance ne requiert pas d'ajustement de paramètres comme des coefficients de tension et des facteurs d'amortissement qui ne sont pas toujours facile à paramétrer correctement. Ici, pour modifier la rigidité, on n'a qu'à jouer avec le nombre d'itérations. Plus il est grand, plus les tiges seront rigides. Par contre, plus on désire de la rigidité, plus le temps de calcul requis pour la simulation sera important. Il est à noter que la technique discutée ici ainsi que le code à la figure 8 ne sont pas optimisés. Certaines optimisations possibles sont présentées dans [Jak01].


next up previous
suivant: Lois de physique utilisées monter: Simulation de deltaplanes et précédent: Intégration Verlet
Eric Beaudry 2005-01-31