Simulation numerique de vetements

De Ensiwiki
Aller à : navigation, rechercher

Mycomputer.png  Deuxième Année  CDROM.png  Informatique  Mathematiques.png  Mathématiques 

Project schedule.png
Titre du projet Modélisation Mécanique et Simulation Numérique de Vêtements
Cadre Projets de spécialité
Page principale Projet de spécialité

Encadrants Florence Bertails-Descoubes, Romain Casati


Introduction

Dans les films d'animation et l'industrie des effets visuels, les artistes souhaitent se concentrer avant tout sur le mouvement, les expressions et les émotions du personnage animé. Or, quand les personnages sont en mouvement les jupes entrent en collision avec les jambes, les vêtements se plient, se contractent, et plus généralement se déforment. Rendre cette déformation réaliste prendrait énormément de temps aux artistes, c'est pour quoi des méthodes pour automatiser le rendu des vêtements sont de plus en plus développées.


Durant notre projet de spécialité nous avons implémenté un modèle mécanique (décrit dans l'article [1]) pour simuler un tissu rectangulaire qui tombe et se plie sous l'effet de son propre poids. Nous le présenterons en détail dans une première partie. L'état du tissu est à chaque pas de temps mis à jour selon la loi fondamentale de la dynamique m\mathbf{a} = \sum \mathbf{f}.

Dans l'article [1], Baraff et Witkin affirment que les forces internes gardant la cohésion d'un tissu réaliste sont trop rigides pour résoudre cette équation avec une méthode explicite. Les grandes constantes de raideur des forces obligeant à prendre un pas de temps trop petit pour garantir la stabilité du schéma. Nous présenterons dans un deuxième temps notre implémentation du simulateur et une comparaison expérimentale entre la résolution avec Euler explicite et Euler implicite. Nous finirons par présenter les résultats obtenus par simulation et nos perspectives.


Présentation du Modèle Mécanique

Le Problème

L'objectif est de simuler un tissu rectangulaire qui tombe et se déforme sous l'effet de son poids. Le tissu sera approché par un maillage triangulaire. Chaque noeud du maillage représente une particule, la position d'une particule i est déterminée à chaque étape par la seconde loi de Newton m_i\mathbf{\ddot{x}_i} = \sum \mathbf{f_i} .

Maillage triangulaire

Les forces qui s'appliquent à chaque particule peuvent être séparées en deux catégories: les forces internes et les forces externes. Dans les forces externes on trouve par exemple le poids, les frottements dûs au vent, les forces générées par l'utilisateur qui tirerait sur une particule, des forces de tension et autres. Les forces internes sont celles responsables de la cohésion du système de particules. Les tissus ont une certaine résistance aux déformations, et cherchent à revenir à un état d'équilibre. Si on étire un t-shirt il se recontractera, ce sont ces forces de résistance aux déformations que l'on modélise par les forces internes d'étirement, de cisaillement et de tension (stretch, shear et bend en anglais). L'effet précis et la formulation de chacune seront présentés par la suite.

Dans un système de masses et de ressorts, différents types de ressorts paramétrés adéquatement modélisent ces forces. L'approche empruntée par Baraff et Witkin est un peu différente, ils considèrent que chacune de ces forces dérive d'une énergie potentielle interne, et c'est à partir de la définition de cette énergie  E qu'est déduite la force  \mathbf{f} = - \frac{\partial E}{\partial x} .

Cependant il est difficile d'en déduire une force d'amortissement à partir de l'énergie. Un vecteur condition  \mathbf{C(x)} que l'on souhaite nul est donc défini. Et l'énergie associée est  E_C = \frac{k_s}{2} \mathbf{C(x)}^T \mathbf{C(x)} . Où k_s est al constante de raideur associée à la force. On a donc

 \mathbf{f_i} = - k_s\frac{\partial \mathbf{C(x)}}{\partial \mathbf{x_i}}\mathbf{C(x)}

 \mathbf{d_i} = - k_d\frac{\partial \mathbf{C(x)}}{\partial \mathbf{x_i}}\mathbf{\dot{C}(x)}

 \mathbf{f_i} et  \mathbf{d_i} , sont les vecteurs de  \mathbb{R}^3 représentant la force appliquée à la particule i et son amortissement.

Sachant évaluer toutes ces forces il est possible de faire évoluer le système de particules dans le temps en résolvant l'équation de la dynamique avec un schéma numérique.

Forces Internes

Lors de la définition des conditions pour les forces d'étirement et de cisaillement, nous aurons besoin d'une fonction  \mathbf{w}(u,v) , qui associe les coordonnées constantes du vêtement dans le plan et en position de repos,  (u_i, v_i) avec ses coordonnées  \mathbf{x}_i de l'espace  \mathbb{R}^3 , qui changent au cours de la simulation. Cette fonction est définie, pour un triangle de vertexs  i ,  j et  k de la façon suivante :  
\begin{pmatrix}
  \mathbf{w}_u & \mathbf{w}_v
\end{pmatrix} 
 =
\begin{pmatrix}
  \Delta \mathbf{x}_1 & \Delta \mathbf{x}_2
\end{pmatrix}
\begin{pmatrix}
  \Delta u_1 & \Delta u_2 \\
  \Delta v_1 & \Delta v_2
\end{pmatrix}

 \Delta \mathbf{x}_1 = \mathbf{x}_j - \mathbf{x}_i ,  \Delta \mathbf{x}_2 = \mathbf{x}_k - \mathbf{x}_i ,  
\begin{pmatrix}
\Delta u_1 \\
\Delta v_1
\end{pmatrix}
= 
\begin{pmatrix}
u_j - u_i \\
v_j - v_i
\end{pmatrix}
 et  
\begin{pmatrix}
\Delta u_2 \\
\Delta v_2
\end{pmatrix}
= 
\begin{pmatrix}
u_k - u_i \\
v_k - v_i
\end{pmatrix}
 C'est-à-dire,  \mathbf{w}(i, j) est une fonction linéaire d'une référence en  \mathbb{R}^3 du triangle, car les  \Delta u_i et les  \Delta v_i sont constantes.

Référence du triangle

Étirement et Compression

La force d'étirement et compression (angl.: stretch force) control l'allongement ou respectivement la contraction du tissu. Elle est mesurée par la relation de la vraie distance entre deux points \Delta x par rapport à la distance entre deux points dans le maillage \Delta u, \Delta v. Pour mesurer si les arêtes sont étirées ou pas, la norme des quotients \mathbf{w}_u et \mathbf{w}_v est calculé. Supposons qu'il n'y a pas d'étirement si la relation entre les deux distances (\Delta x et \Delta u/\Delta x) est égale à 1 car ils ont la même longueur. Comme on veut obtenir une position stable - c'est le cas si la condition  C(x) est zéro - on soustrait la valeur 1. Ces calculs sont faits par rapport des triangles en regardant deux de ses trois arêtes et la force est calculée pour chaque sommet de ce triangle. Les forces d'étirement et compression sont des forces antagonistes pour les deux forces F_1 et F_2 qui déplace le sommet en haut à droite du triangle comme on peut l'observer dans la figure suivante :

Force d'étirement et compression

Par contre, supposons un carré dont un coin est déplacé vers l'intérieur cette force fait une déplacement de ce coin vers l'extérieur

L'équation correspondante de cette force d'étirement et compression est calculée séparément pour chacun des deux arêtes. On obtient l'équation suivante :  \mathbf{C}(x) = a \begin{pmatrix}   \| \mathbf{w}_u(\mathbf{x})\| - b_u  \\ \| \mathbf{w}_v(\mathbf{x})\| - b_v \end{pmatrix}  .

Dans le cas régulier on utilise b_u = b_v = 1, mais cette valeur peut être modifiée pour obtenir des résultats différents. Une augmentation d'une valeur b a par conséquence un tissu qui est plus large dans cette direction de b. Supposons que nous avons un carrée qui est composé de deux triangles dont un des quatre sommets est déplacé (cf. la figure ci-dessus), la force d'étirement et compression veut obtenir une position où tous les arêtes ont la même longueur en x,y,z comme en u, v.

Les vidéos suivantes montrent des expériences qui expliquent le comportement de cette force. La configuration au repos est un carré de vertexs (0,0), (0,1), (1,0), (1,1). La configuration de départ de la simulation a un vertex étiré : (-0.3, -0.3), (0,1), (1,0), (1,1). Nous fixons les vertexs de l'arête diagonale (0,1) et (1,0). La seule force qui agit est l'étirement. Les constantes utilisées lors de cette simulation sont k_{stretch} = 100, pas de temps = 0.001s, k_{ damping} = 0.2*k_{stretch}.

L'effet d'introduire une force d'amortissement sur la force d'étirement est observé dans les images suivantes, qui représentent la condition sur chacune des deux faces ou triangles du maillage au long du temps de la simulation, pour les cas des deux intégrateurs, explicit et implicite, et avec et sans amortissement.

Comme la condition de cette force est une fonction véctorielle, c'est la norme de la condition qui est représentée.

Condition de cisaillement, intégrateur explicite, pas d'amortissement Condition de cisaillement, intégrateur explicite, avec amortissement Condition de cisaillement, intégrateur implicite, pas d'amortissement Condition de cisaillement, intégrateur implicite, avec amortissement

Dans ces images nous observons que quand il y a une force d'amortissement, la norme de la condition de la force d'étirement et compression converge rapidement vers zéro, pendant que s'il n'y a pas d'amortissement, la norme de la condition oscille. Dans le cas de l'intégrateur explicite sans amortissement, la condition diverge, pendant que dans le cas implicite elle converge. Ce fait est dû à l'amortissement numérique introduit par l'intégrateur implicite.

Pout implementer la force d'étirement et compression, nous avons déterminé des dérivées de premier et deuxième ordre. Vous trouvez les résultats dans ce fichier

Calcul de la force d'étirement et comrpession

Cisaillement

Une force de cisaillement (angl. : shear force) est une tension qu'un objet expérimente quand il y a deux forces de sens opposés qui agissent sur lui. Par exemple, imaginons un tissu rectangulaire dont deux coins diagonalement opposés sont étirées dans des sens opposés. Ce tissu reviendra à sa position originale grâce à sa force interne de résistance au cisaillement.

Force de cisaillement

Considérant la représentation du tissu sous forme d'un maillage triangulaire, la condition à partir de laquelle le cisaillement du vêtement est mesuré est  C(\mathbf{x}) = a \mathbf{w}_u(\mathbf{x})^T 
\mathbf{w}_v (\mathbf{x}), où  \mathbf{w}_u(\mathbf{x}) et  \mathbf{w}_v(\mathbf{x}) sont des fonctions linéaires sur les vecteurs de  \mathbb{R}^3 qui représentent deux côtés du triangle, et  a est l'aire du triangle en repos. Comme expliqué précédemment sous la rubrique étirement, cette condition est multiplié par l'aire parce que les déformations souffertes par les petits triangles n'ont pas la même influence que les déformations souffertes par les grands triangles du maillage.

Cette condition est définie pour chaque triangle, donc pour définir la force de cisaillement sur une certaine particule, nous considérons la condition sur chaque triangle auquel la particule appartient, et la force sur cette particule sera la somme des forces dérivées des conditions, comme décrit précédemment.

La force de résistance au cisaillement sera nulle quand la condition  C(\mathbf{x}) est nulle. Comme nous cherchons à annuler un produit scalaire, nous pouvons traduire cette condition en la recherche d'angles droits pour les côtés de chaque triangle du maillage.

Sur la figure qui représente une force de cisaillement sur un rectangle maillé en deux triangles, nous voyons que quand il y a une force de cisaillement qui agit sur le maillage, les angles des côtés des triangles ne sont pas des angles droits, au contraire que quand la configuration est en position de repos.

Les vidéos suivantes montrent des expériences qui expliquent le comportement de cette force interne. La configuration au repos est un carré de vertexs (0,0), (0,1), (1,0), (1,1). Nous faisons une translation d'un des côtes du carré pour obtenir la configuration (0,0.5), (0,1.5), (1,0), (1,1), et nous fixons le côté (1,0), (1,1). Dans cette simulation il n'y a aucune force sauf la force de cisaillement, même pas du poids. Donc c'est attendu d'avoir un déplacement dans le plan des particules pour retrouver une position dont les triangles ont ses côtés en angle droit.

Cette simulation est faite en utilisant les paramètres suivants :  k_{shear} = 100 , un pas de temps de 0.001s,  k_{damping} = 0.2 k_{shear} .

Dans ces simulations, les différentes configurations arrivent à l'équilibre mais les particules ne s'arretent pas. Cela est dû au fait que s'il y a seulement una force de cisaillement qui agit, la condition à annuller a seulement une influence sur les angles des triangles, mais pas sur la longueur des côtés. Lors de la simulation, les particules ont acquis une vitesse constante au moment où la force de résistance au cisaillement cesse d'agir. Cet effet est dû à la manque de force d'étirement. La vidéo suivante montre la simulation avec damping de l'intégrateur implicite avec une force d'étirement ajoutée, où la configuration arrive bien à sa position de repos.

Cisaillement et étirement, intégrateur implicite, avec amortissement

Si nous considerons maintenant un maillage constitué de quatre triangles dont deux d'entre eux sont déplacés, nous pouvons voir clairement l'influence de la force d'étirement/compression et de la force de cisaillement séparémment. Dans la première simulation il y a seulement une force d'étirement/compression, et les angles des triangles n'arrivent pas à être angles droits, mais la longueur des côtés est conservée. Dans la deuxième simulation il y a les deux effets au même temps.

L'effet d'introduire une force d'amortissement sur la force de cisaillement est observé dans les images suivantes, qui représentent la condition sur chacune des deux faces ou triangles du maillage au long du temps de la simulation, pour les cas des deux intégrateurs, explicit et implicite, et avec et sans amortissement.

Condition de cisaillement, intégrateur explicite, pas d'amortissement Condition de cisaillement, intégrateur explicite, avec amortissement Condition de cisaillement, intégrateur implicite, pas d'amortissement Condition de cisaillement, intégrateur implicite, avec amortissement


Dans le cas des deux intégrateurs, explicite et implicite avec une force d'amortissement, la condition converge rapidement vers zéro, et le système atteint une configuration stable.

Dans le cas de l'intégrateur implicite sans amortissement, la condition oscille beaucoup plus autour de zéro, mais elle converge de toute façon car l'intégrateur implicite a un effet d'amortissement numérique, comme expliqué sous la rubrique Choix du Schéma d'intégration.

Par contre, dans le cas de l'intégrateur explicit sans amortissement, la condition diverge, comme nous pouvons vérifier au regard de la vidéo correspondante. Ce fait confirme le besoin d'utiliser un intégrateur implicite.

Flexion

La force de flexion (ou bend force en anglais) est la force responsable de la résistance du tissu à sortir du plan lorsqu'il est perturbé. Cette force est définie pour chaque paire de triangles adjacents. La condition est simplement  \mathbf{C(x)} = \theta , c'est l'angle entre les normales aux triangles. Lorsque le tissu est plat dans le voisinage de l'arête, la tension est nulle et l'angle \theta entre les normales est null.

Bend.png

Pour illustrer l'effet de cette force nous avons fait l'expérience suivante : en prenant une configuration de carré divisé en deux triangles rectangles et en déplaçant un sommet verticalement, on observe l'évolution de la condition à l'arête commune (l'hypothénuse) en fonction du temps. Aucune autre force que celle de tension n'est présente.

Theta No Damping.png Theta With Damping.png

Ceci est obtenu en prenant comme schéma d'intégration Euler explicite avec un pas de temps de 0.1s et une constante  k_{bend} = 0.1 Nm^{-1}. Sans amortissement on observe des oscillations autour de 0 (la condition au repos), avec amortissement on observe une convergence immédiate vers la condition au repos.

Les vidéos correspondantes à ces simulations sont les suivantes :

On remarque sur la première vidéo que les triangles s'étirent beaucoup, pour éviter cet effet il faut ajouter la force de Stretch.

Résolution du Problème

Démarche

Le projet se compose de trois étapes essentielles:

  • La compréhension du problème [1]
  • L'implémentation du simulateur: Ça inclut les définitions précédentes de l'architecture globale (cf. ci-dessous) et des structures données à utiliser dans les différents modules. En suite, les structures de bases sont implémentées qui sont nécessaires pour la simulation finale. En outre, nous appliquons l'approche incrémentale qui nous permet d'avoir toujours un système en état de marche et où nous ajoutons des fonctionnalités plus élaborées.
  • L'analyse des résultats avec des différents méthodes et données

Architecture

Nous avons utilisé l'architecture suivante pour implémenter le simulateur:

Diagramme des Classes

Nous avons crée une classe abstraite Darray avec des classes dérivées Dmatrix et Dvector, qui implémente des méthodes d'algèbre linéaire comme le produit scalaire ou la multiplication d'une matrice avec un vecteur. Pour la simulation nous avons besoin un tissu qui est crée par la classe Cloth qui connecte tous les modules différents:

  • Le maillage de la classe Mesh, qui est construit basé sur les Vertex, Edge et Face.
  • Les forces qui sont subdivisée en Weight, Stretch, Shear et Bend.
  • L'integrator qui résoudre le système et calcule les incréments de la vitesse et position.

Finalement, le Viewer affiche le tissu de la classe Cloth en fonction du temps.

Outils

Pour faciliter la travail en parallèle nous utilisons Git comme gestionnaire de versions. En plus, ce logiciel nous permet d'avoir des sauvegardes à notre disposition. Nous avons mis dans le dépôt en plus, un document partagé de questions, un document décrivant l'état d'avancement du projet, ainsi que la documentation html du code pour faciliter la compréhension et l'utilisation de nos modules.

L'implementation s'effectue en C++ en utilisant OpenGL pour réaliser le graphique et la librairie QGLViewer qui nous facilite à créer un viewer. En outre, nous appliquons la librairie de Eigen pour résoudre le système implicite.

Nous utilisons le logiciel DesktopRecorder pour enregistrer des vidéos de nos simulations. Pour tracer les valeurs des variables et créer des diagrammes, nous utilisons les fonctions d'affichage de R.

Choix du Schéma d'intégration

Soit n le nombre de particules du tissu et \mathbf{x} \in \mathbb{R}^{3n} l'état du tissu.  \mathbf{x}_i \in \mathbb{R}^3 représente la position dans l'espace de la particule i, \mathbf{f}_i \in \mathbb{R}^3 la force totale appliquée à cette particule et \mathbf{f} \in \mathbb{R}^{3n} le vecteur des forces sur toutes les particules. Soit M \in \mathbb{R}^{3n*3n} la matrice des masses. L'objectif est de résoudre l'équation différentielle :

\ddot{\mathbf{x}} = M^{-1}\mathbf{f}(\mathbf{x},\dot{\mathbf{x}})

En posant  \dot{\mathbf{x}} = \mathbf{v} , on se ramène au système d'équations différentielles ordinaires (1):

 \dot{\mathbf{v}} = M^{-1}\mathbf{f}(\mathbf{x},\mathbf{v})
 \dot{\mathbf{x}} = \mathbf{v}


Méthode explicite

L'équation à laquelle on appliquera la méthode d'Euler Explicite est 
  \begin{pmatrix}
    \Delta \mathbf{x} \\
    \Delta \mathbf{v}
  \end{pmatrix} =
  h \begin{pmatrix}
   \mathbf{v}_0 \\
   \mathbf{M}^{-1} \mathbf{f}_0
  \end{pmatrix}

Cette méthode présente l'avantage d'être simple à mettre en oeuvre, elle nécessite uniquement l'évaluation des forces et une multiplication matrice-vecteur, il n'y a pas des système à résoudre. Cependant, cette méthode n'est pas inconditionnellement stable, ce qui est bien connu, et comme l'avaient annoncé Baraff et Witkin, pour le cas particulier d'un vêtement la condition de stabilité impose un pas de temps très petit. Nous avons tracé l'énergie mécanique d'un système constitué de 3x3 particules sans amortissement. Nous constatons que l'énergie mécanique ne se conserve pas tout à fait, le schéma numérique explicite introduit artificiellement de l'énergie au système. Et ceci pour un pas de temps de  h = 10^{-4}s. Si l'on prenait  h = 5 10^{-4}s l'énergie devient très rapidement infinie, le système explose.

  • EmExplicitNoDamp.png
  • EpExplicitNoDamp.png

Avec de l'amortissement, on obtient un résultat plus stable.

  • EmExplicit.png
  • EpExplicit.png

Méthode implicite

L'équation à laquelle on appliquera la méthode d'Euler Implicite est 
 \begin{pmatrix}
    \Delta \mathbf{x} \\
    \Delta \mathbf{v}
  \end{pmatrix} =
   h \begin{pmatrix}
    \mathbf{v}_0 + \Delta \mathbf{v} \\
     \mathbf{M}^{-1}(\mathbf{f}_0 + \frac{\partial \mathbf{f}}{\partial \mathbf{x}} \Delta \mathbf{x} + \frac{\partial \mathbf{f}}{\partial \mathbf{v}} \Delta \mathbf{v})
   \end{pmatrix}

Cette méthode présente l'avantage d'être plus stable, permettant des pas de temps plus grands donc une simulation plus rapide pour des equations rigides comme celle du tissu. Nous pouvons effectuer la même expérience que dans la section précedente avec un pas de temps cette fois ci cent fois plus grans, c'est à dire  h = 10^{-2}s.

Théoriquement elle est inconditionnellement stable, mais nous avions ici un problème non linéaire (la condition de bend est par exemple  \theta(x_0,x_1,x_2,x_3) = \arctan{\frac{(\mathbf{n1}\times\mathbf{n2})\cdot\mathbf{e}}{\mathbf{n1}\cdot\mathbf{n2}}} . Et la valeur de f au temps t_{k+1} a été approchée par un développement de Taylor à l'ordre 1 en utilisant les valeurs connued de f et ses dérivées au temps t_{k}. Donc ce n'est pas le schéma classique d'Euler implicite pur.(Remarque : e est vecteur unitaire parallèle à l'arête commune des deux triangles et les xi sont les 4 sommets).

Cette méthode présente comme inconvénient d'avoir un système à résoudre, en plus de devoir évaluer non seulement les forces mais aussi leurs dérivées en position et en vitesse.

Nous avons tracé l'énergie mécanique du système et nous constatons l'effet contraire que pour Euler Explicite, au lieu d'avoir un apport artificiel d'énergie, il y a une dissipation artificielle d'énergie. Ce schéma introduit ce que l'on appelle des frottements numériques. Les courbes suivantes ont été obtenues en abscence de forces d'amortissement.

  • EmImplicit.png
  • EpImplicit.png

Résultats

Nous avons réalisé des simulations pour un tissu de dimensions 1m par 1m, d'une densité surfacique de 0.1 kg\cdot m^{-2}, avec des coefficients k_{stretch} = 10 Nm^{-1} k_{shear} = 1 Nm^{-1} et k_{bend} = 1.e-5 Nm^{-1} . Les coefficients d'amortissement sont chacun k_{di} = 0.2\cdot k_s . Le tissu a été discrétisé en 25 particules. Le tissu est tenu par deux coins.

  • Avec Euler Explicite:

Il faut avoir un pas de temps de 5\cdot 10{-4}s. La fréquence de calcul d'image de cette simulation est de 0.4Hz, il faut alors un peu plus de 2s par image.

Fichier:Explicite.avi

  • Avec Euler Implicite:

Il faut avoir un pas de temps de 5\cdot 10{-2}s. La fréquence de calcul d'image de cette simulation est de 3.3Hz, il faut alors environ 0.3s par image.

Fichier:Imlicite.avi


La complexité de notre simulateur vient donnée par le temps de calcul de la résolution du système. L'algorithme utilisé pour la résolution est, pour l'instant, la décomposition LU, qui a un coût de  \frac{2 n^3}{3}. Notre programme n'exploite pas encore le fait que la plupart des matrices manipulées sont creuses, il faudrait l'adapter et utiliser l'algorithme de gradient conjugué modifié (en introduisant des contraintes la symetrie est perdue), proposé par Baraff et Witkin, pour avoir des temps de calcul raisonnables pour des maillages plus grands.

Conclusion

D'après les résultats obtenus lors de notre projet, nous considérons que dans le cadre de la modélisation mécanique et la simulation numérique de vêtements c'est très important d'avoir un amortissement, soit mécanique introduit par des forces, soit numérique introduit par un schéma numérique implicite. De cette façon nous obtenons des résultats beaucoup plus réels à cause des pertes d'énergie du système. En plus, comme décrit dans l'article [1], les constantes de raideur des vêtements doivent être assez élévées pour avoir des résultats réalistes. Lors de l'utilisation de grandes constantes, nous avons besoin d'un pas de temps très petit pour le schéma explicite, pendant que l'implicite nous permet d'augmenter le pas de temps sans perte de stabilité.

Il y a plusieurs perspectives de continuation et amélioration du projet, du côté graphique, nous considérons l'implémentation de collisions d'un vêtement avec des objets, d'abord simples comme une sphère, et après plus complexes, ainsi que l'implémentation des auto-collisions.

Du côté calcul scientifique, dans notre simulateur nous ne nous profitons pas du fait que les matrices et les vecteurs qu'on obtient pour resoudre le système sont creuses. Cette caractéristique peut être profitée en améliorant l'utilisation de la mémoire, en utilisant un stockage approprié pour matrices et vecteurs creuses et aussi en faisant le simulateur plus efficace en temps, en implémentant la méthode du Gradient Conjugué décrite dans l'article de Baraff et Witkin. Si nos structures sont creuses avec  O(n) entrées non nulles, la méthode du gradient conjugué prend un temps  O(n) à chaque itération, ce qui est beaucoup plus efficace que la résolution du système en utilisant la décomposition LU.

Bibliographie

[1] David Baraff, Andrew Witkin. Large Steps in Cloth Simulation. In ACM SIGGRAPH Conference Proceedings, pages 43-54, 1998.

[2] David Pritchard. Implementing Baraff & Witkin's Cloth Simulation. http://www.davidpritchard.org/freecloth/docs/report.pdf. accedé 14/06/2012.