# Simulation de tissu et objets gonflables

Bon, d’accord…

  • Si vous voulez absolument les Gizmos, c’est par ici:
  • Et pour le curseur à l’origine du monde (le fameux ⇧ - clique droit de la souris que vous avez en mémoire musculaire Maya et qui vous fait déplacer le curseur), c’est par ici (ou alors ⇧ S → Cursor to World Origin):

Un peu de théorie La simulation de tissu est l'un des aspects les plus difficiles de la 3D; il s’agit en effet d’un élément du monde réel simple en apparence que l'on tient pour acquis, mais qui a en réalité le résultat d’interactions internes et environnementales très complexes (à ce sujet, si vous voulez apprendre à dessiner de manière réaliste, dessinez des drapés!). Le tissu est généralement modélisé comme un maillage 2D pour simuler des objets du monde réel tels que les tissus, les drapeaux, les bannières. Et pourtant, le tissu peut aussi être utilisé pour modéliser des objets 3D tels que les ours en peluche, les oreillers, les ballons, ou les balles. Le tissu interagit avec et est affecté par d'autres objets en mouvement, le vent et d'autres forces, les points de tension, la texture dudit tissue, la gravité, ainsi qu'un modèle aérodynamique général. Not an easy thang to simulate.

La physique du tissu est simulée avec des ressorts virtuels qui relient les sommets (vertices) d’un maillage (mesh). Il existe quatre types de ressorts qui contrôlent la manière dont le tissu se plie:

Ressorts de tension (bleu), ressorts de compression (rouge), ressorts de cisaillement (shear) (cyan), et ressorts de flexion angulaire (bending) (vert).

Ressorts de tensionContrôle la rigidité du tissu.
Ressorts de CompressionContrôle la force requise pour compresser, plier ou froisser le tissu.
Ressorts de cisaillement (Shear)Contrôle la déformation angulaire du tissu.
Ressorts de flexion angulaire (Bending)Contrôle la résistance du tissu au pliage ou au froissement.

Un drapeau qui flotte au vent

Modélisation et simulation

  • Ouvrir nouveau projet Blender (File → New → General) dans un dossier intitulé “Drapeau”
  • Copiez une image dans votre dossier “Drapeau” (par exemple celle-ci: https://drive.google.com/file/d/1H51xBe3DCgpHPHMArblzj9WcycXGrR70/view?usp=sharing)
  • Créer un plan, le tourner de 90 degrés par rapport à l’axe des X
  • Il est très important de subdiviser le plan d’abord avant de lui donner une forme plus rectangulaire d’un drapeau, sinon les subdivisions ne seront pas carrées et cela créera de drôles de comportements lors de la simulation.
  • Avec l’objet toujours sélectionné, passer en mode “Edit” (Tab → Edges)
  • Ajoutons de la géométrie à l’objet. Cliquer droit sur l’object en mode Edit et choisir subdivide.
  • Ouvrir le menu des paramètres de la subdivision (en bas à gauche du viewport)
  • Choisir 40 pour la valeur de “Number of Cuts” puis faire ↩ et revenir en mode objet (Tab → Object)
  • Maintenant on peut rendre le carré rectangulaire et les subdivisions seront correctes. Revenir en mode Object, S X 2 ↩ puis Apply Scale (⌃ A → Scale).

  • Remarquez que “Number of Cuts” = 40 donne une subdivision de 41 x 41 n-gons et non pas 40 x 40 n-gons car un Cut de 1 = 2 x 2 n-gons.

  • Avec l’objet sélectionné choisir les paramètres physiques et choisir “Cloth”

📌

Note, on peut choisir des tissus prédéfinis dans le petit menu hamburger à droite de l’intitulé “Cloth”, comme Cotton, Soie, etc. Mais nous allons régler nos paramètres manuellement.

  • Donc ne pas choisir de tissu prédéfini, choisir Cloth et nous allons régler les paramètres manuellement.

  • Si on fait “Play” de l’animation, on constatera que “tissu” tombe raide comme un bloc à cause de la gravité. Bon, c’est déjà ça.

  • Nous allons maintenant fixer un groupe de sommets (Vertices) de manière à ce que le tissu soit comme accroché (on l’accrochera à un poteau tout à l’heure)

  • Passer en mode Objet, édition des sommets (Tab → Edit Vertex). Dans les propriétés “Object Data”, ajouter un Vertex group et nommez-le “Accroche”.

  • Sélectionner les deux premiers sommets (Vertices) en haut à gauche et les deux derniers en bas à droite du mesh, puis cliquer sur le bouton “assign” dans le “Data property”, en s’assurant que le Vertex Group “Accroche” soit sélectionné. Cela va assigner les 4 sommets au groupe Accroche avec un poids de 1.

  • Pour vérifier que la chose a fonctionner, Sortir du mode Object et passer au mode Weight Paint:

  • Maintenant, revenons aux propriétés physiques et dans la section “Shape”, choisir le “Pin Group” “Accroche”.

  • Passer en mode Object et faire Play. Vous devriez constater que la gravité a toujours un effet sur le tissu, mais les points d’accroche ne bougent pas. Mais on remarque que le drapeau se traverse lui-même, normalement ce n’est pas normal. Il faut activer le “Self collision” afin que l’objet entre en collision avec lui-même.

  • Vous devriez maintenant constater que, si vous faites Play, l’animation est plus lente car Blender doit calculer les collisions de l’objet avec lui même.

  • Ajoutons un peu de vent. ⇧ A → Force Field → Wind.

  • On veux que le vent parte de la gauche vers la droite dans la direction de l’axe des X, derrière le drapeau. R Y 90 ↩ puis G X -5 ↩

  • Sélectionner le drapeau, passer à l’espace de travail Shader, choisir Object au lieu de World puis choisir New. Un Principled BSDF va apparaître. Ajouter une Image texture (⇧ A → Texture → Image Texture). Faire Open et choisir l’image Akira.jpg. Connecter la sortie Color de noeud Image Texture à l’entrée Base Color du Principled BSDF.

  • Passer en vue orthogonale frontale (Numpad 1), changer en mode “Material Preview” (Z → Material Preview) et changer la force du vent (entre 15 000 et 30 000 environ). Faire Play. Vous devriez voir l’effet du vent sur le drapeau.

  • Changer également la durée de l’animation à 500 frames. N’oubliez pas de mettre 500 pour le End Frame également dans la propriétés physiques, sous “Cache”.

  • Dans les Modifiers du drapeau, ajouter un Subdivision Surface (3 pour le viewport, 4 pour le render) et un “Smooth by angle”. S’assurer que le Smooth by angle soit le dernier en bas dans la pile (stack). Donc dans l’ordre, les modifiers devraient être : Cloth, Subdivision puis Smooth by Angle.

  • Il est temps de régler les paramètres de simulation du tissu. Dans les propriétés Physiques:

PropriétéValeurDescription
Quality Steps7Un peu plus élevée mais pas trop pour ne pas ralentir la simulation pendant qu’on travaille dessus. Au moment du rendu, on augmentera le steps à une bien plus grande valeur (e.g. 256).
Speed Multiplier1Le facteur influençant la durée du temps écoulé. 1 = “temps réel”.
Stiffness → Tension15Contrôle la rigidité du tissu.
Stiffness → Compression15Contrôle la force requise pour compresser, plier ou froisser le tissu.
Stiffness → Shear5Contrôle la déformation angulaire du tissu.
Stiffness → Bending2Contrôle la résistance du tissu au pliage ou au froissement.
Damping → Tension5Même chose que pour Stiffness, mais comme une suspension de voiture, ici Damping indique l’intensité avec laquelle les effets de stiffness s’estomperont. Par analogie, s’il n’y avait que le ressort dans une suspension de voiture (comme au début), la voiture oscillera beaucoup; l’amortisseur amorti les oscillations du ressort.
Damping → Compression5
Damping → Shear5
Damping → Bending2
Caching → Simulation Start1début de la simulation
Caching → Simulation End500Fin de la simulation.
Collision → Quality6Contrôle la qualité du calcul des collisions, autant avec l’objet lui-même qu’avec les autres objets. Évidemment, plus le chiffre est élevé, plus ça va coûter cher en calculs.
Object CollisionActivéOn veut que l’objet entre en collision avec les autres objets de manière réaliste.
Distance0.01
Self CollisionActivéOn ne veut pas que l’objet passe à travers lui-même.
Distance0.01
  • Le champ de force Vent donne une force constante dans une seule direction, le long de l’axe Z local de l’objet de force. La puissance de cette force est visualisée par l’espacement des cercles affichés et la taille de la flèche.
  • Pour le vent, les paramètres sont comme suit:
PropriétéValeurDescription
ShapePlaneLa forme selon laquelle le vent sera calculée
Strength30 000La puissance du vent
Flow1La facteur “vitesse” du fluide “air”. 1 = réaliste.
Affect → LocationOui
Affect → RotationOui
Noise Amount0.5Histoire de ne pas avoir un vent qui ne varie jamais.
Seed21Changer le seed changera la génération des nombres aléatoires
AbsorbtionOuiUne partie de l’énergie du vent est absorbée par les objets ayant la propriété Collision
Wind Factor1Le degré avec lequel l’énergie du vent est absorbée par des tissus
FalloffPas utiliséParamètres contrôlant le degré avec lequel la force du vent diminue avec la distance. Dans notre cas, ne pas le spécifier signifie que la force du vent ne diminuera pas, ce qui fera en sorte que la distance du Force Field par rapport au drapeau n’importera pas.
  • Dans les propriétés Render, choisir Cycles, retirer la transparence dans la section “Film”. En mode Render (Z → Rendered) vous devriez voir le HDRI.
  • Passer en mode Shading, choisir World au lieu de Object, diminuezl’intensité du HDRI à 0.7. Dans le preview, passer en mode Rendered, puis changer les valeurs de rotation Z et X de la texture Environment HDRI jusqu’à que vous ayez un point de vue satisfaisant:
  • Dans l’espace de travail “Layout”, ajuster un peu plus le point de vue, puis ajouter une caméra et faire ⌃ ⌥ Numpad 0 pour fixer la position de la caméra. S’assurer que le drapeau soit un peu vers le premier tiers à gauche du cadre de la caméra.
  • Passons maintenant à la texture du drapeau. Sélectionner le drapeau et passer en mode Shading. S’Assurer de sélection Object et non pas World. Vous devriez voir la texture Akira (ou l’image que vous aviez choisie au début).
  • Allons d’abord chercher des textures de tissu, une pour le maillage lui-même, l’autre pour des défauts de tissu, pour un peu plus de réalisme. Poliigon.com est super chouette, mais il y’en a des tonnes. Je vous en ai préparé deux, télécharger ces deux fichiers .zip dans un dossier que vous nommez “Textures” dans votre dossier Drapeau et y décompresser les fichiers .zip:
  • Nous avons déjà la couleur pour notre drapeau (l’image Akira), ce dont nous avons besoin, c’est de la texture de tissu, pas sa couleur. Dans Le shading Editor, ajouter une “Image Texture” et ouvrir le “Displacement” map 2K de la texture FabricCanvas001, en l’occurence le fichier FabricCanvas001_DISP_2K.jpg
  • Maintenant, on veut connecter cette texture à l’entrée “Normal” du Principled BSDF, mais pour ce faire, il faut passer à travers un Noeud Bump pour convertir l’entrée “Color” du Displacement Map en information de variation de la normale. Enfin, il faut connecter Color du displacement map à l’entrée “Height” du Bump, pas “Normal”. La couleur des connecteurs vous indiquent dans Blender si la connexion est compatible ou pas.
  • Par exemple, avec la connexion suivante, on constate que le bump map ne fonctionne pas, que le connecteur passe du jaune au violet et qu’on ne voit pas l’effet de la texture dans le rendu:
  • La texture est trop grande. Cliquer sur le noeud Displacement, faire ⌃ T pour, via le Node Wrangler, ajouter les coordonnées de la texture, et augmenter l’échelle (scale) à 5 sur les trois axes. On va également réduire l’intensité du bump node à 0.4 et mettre la distance a 0.5
  • Ajoutons maintenant des plis et défauts, en utilisant la texture “FabricCreasesWrinkles001”.
  • D’abord sélectionner dans le node editor la texture Displacement et faire ⇧ D pour le dupliquer.
  • Dans la nouvelle instance de l’image texture node, faire X pour retirer l’image actuelle et faire Open ou ouvrir le fichier normal map intitulé “FabricCreasesWrinkles001_NRM_VAR1_2K.jpg”.
  • Connecter ce nouveau noeud à un noeud “Normal Map” dont vous changez l’intensité (Strength) à 0.4. La sortie Normal de ce noeud Normal Map devrait être connecté à l’entrée “Normal” du Bump Node.
  • Maintenant, notre drapeau est trop mince, ajoutons un “Solidify Modifier”, mais s’assurer qu’il se trouve avant le dernier modifier intitulé “Smooth by Angle”.
  • Il est temps de créer le poteau. Revenir dans l’espace de travail “Layout”, en mode Solid, en vue orthogonale frontale (Numpad 1) et créer un cylinder (⇧ A → Mesh → Cylinder)
  • Dans les paramètres de création, changer le diamètre (Radius) à 0.03, la hauteur (Depth) à 4. Cliquer dans un endroit vide fera disparaître le menu des propriétés de création.

  • Sélectionner le cylindre derechef, et déplacer le à la gauche du drapeau et bien évidement le haut du cylindre doit être aligné à peu près avec le haut du drapeau.
  • Comme nous n’avons pas déplacé le drapeau suite à sa création, le cylindre devrait être aligné quand on regarde le tout en vue orthogonale d’élévation (Numpad 7). Vérifier que c’est bien le cas et corriger si nécessaire.
  • Ajoutons une sphère au bout d’une petite extrusion au sommet du poteau.
  • D’abord sélectionner le poteau, passer en mode édition “Face”, sélectionner la face du haut.
  • Faire “Inset” (I), déplacer la souris de manière à créer un cercle concentrique au diamètre extérieur du cylindre, puis faire Extrude dans l’axe des Z (E Z) et déplacer encore une fois la souris pour obtenir cette petite extrusion.
  • Ajoutons une petite boule au sommet du poteau et ce sera assez. ⌃ A → Mesh → UV Sphere. Donnez-lui un diamètre de 0.05 et déplacez-la au sommet du poteau.
  • Une petite texture métallique maintenant pour le poteau et la sphère. Sélectionner le poteau, et dans les paramètres “Material”, faire New pour un créer un Princpled BSDF. Nommer ce Material “Poteau”. Choisir une couleur gris-bleu, Mettalic à 1. C’est assez.
  • Maintenant sélectionner la sphère, est dans les paramètres Material, ne pas faire New mais choisir “Poteau” comme material. Les deux vont partager la même texture maintenant.
  • Cliquer droit sur le poteau et faire “Shade Smooth”. Même chose pour la sphère.
  • Le drapeau doit entrer en collision avec le poteau, il faut donc s’assurer que ce dernier ait la propriété physique “Collision”. Sélectionner le poteau, et choisir “Collision” dans les propriétés physiques:
  • Nous sommes prêts à faire un “Bake” de la simulation. Sélectionner le drapeau, aller dans les propriété “Physics” et augmenter la qualité (Quality Steps) à 128. Pour un rendu de production, augmenter la qualité à 256, 512, voire plus.
  • Augmenter également la qualité des collisions, dans la section “Collisions”, choisir 10 par exemple.
  • Dans la section “Cache”, mettre le End Frame à 120, le changer également dans l’animation, sinon à 500 frames, le calcul de la simulation va prendre trop de temps.
  • Cliquer sur Bake. C’est le temps d’une pause.
  • Faites Play en mode Render. Faites un rendu d’un des frames. C’est zoli quand même non?

Animation

  • On va quand même rendre ça cool, avec de la brume et la caméra qui tremble à cause du vent.

  • Commencer par créer un cube qui couvre toute la scène qui apparaît devant la caméra:

  • Ce cube servira de volume qui contiendra l’effet volumétrique de brume.

  • Dans le shading Editor, avec le cube sélectionné, s’assurer d’être en mode Object et faire New pour créer un nouveau Material.

  • Effacer le Principled BSDF et créer plutôt un noeud “Principled Volume”. Connecter la sortie Volume de ce dernier à l’entrée Volume du Material Output. Tout va devenir noir car le volume est très dense. Baisser la densité à environ 0.1.

  • Créer un noeud Noise Texture et un noeud Color Ramp; connecter la sortie Factor du Noise Texture à l’entrée Factor du Color Ramp puis connecter la sortie Color du Color Ramp à l’entrée Density du Principled Volume.

  • Faire ⌃ T en ayant le Noise Texture sélectionné pour rajouter des Mapping Coordinates. On veut les coordonnées du cube, donc connecter la sortie “Object” du noeud Texture Coordinates à l’entrée Vector du noeud Mapping.

  • Changer l’échelle du Noise Texture à 15 et déplacer la couleur noire du color ramp vers le milieu. Ici le Color Ramp agit comme un pinceau : la couleur noire complètement à gauche apparaîtra quand la valeur du facteur est 0, puis graduellement vers le blanc quand cette valeur se rapproche de 1.

  • Maintenant, on veut animer le mouvement de la brume. Pour ce faire, on va passer de 3D à 4D pour le Noise Texture, ce qui va rajouter la dimension temporelle “W”.

  • Augmenter le niveau de détail à 16 pour le Noise Texture.

  • Ce qu’on veut animer c’est la position X (déplacement vers la droite dans le sens du vent) et le paramètre W.

  • S’assurer, dans le layout Editor, d’être au Frame 1. Dans le Shading Editor, cliquer droit sur la coordonnée X du noeud Mapping et faire “Insert Keyframes”. Si vous avez déjà un keyframe à cet endroit, le sous-menu contextuel sera “Replace Keyframes” au lieu de “Insert Keyframes”.

  • Aller au frame 120, changer la valeur X à, disons 5, 10 ou 30, et faire “Insert Keyframes” derechef. Il faut jouer avec cette valeur jusqu’à ce que vous obteniez un effet satisfaisant (et c’est là qu’une carte graphique performante aide grandement!).

📌

Vous pouvez temporairement ajouter une section montrant le timeline dans le shading editor pour ne pas avoir à changer de layout à chaque fois que vous voulez déplacer la tête de lecture dans le timeline.

  • À bien y penser, je vais baisser l’intensité du HDRI à 0.4 au lieu de 0.7 (World dans le shading Editor, ou alors la propriété World dans la section des propriétés à droite). Vous savez comment faire.

  • Revenir au frame 1. Cliquer droit sur la coordonnée W et faire Insert Keyframes.

  • Aller au frame 120, changer la valeur de W pour, disons, 10, et faire encore une fois Insert Keyframes.

  • Woot woot! Maintenant, on va faire trembler la caméra.

  • En vue Layout, ajouter un workspace pour voir le Graph Editor. Sélectionner la caméra.

  • Au frame 1, faire I pendant que la caméra est sélectionnée et que la souris est dans le 3D viewport.

  • Sélectionner l’Axe des X du keyframe de la caméra dans “Object Transform” du Graph Editor. On peut ajouter des modifiers aux courbes!

  • Faire “N” dans le graph editor pour faire apparaître le “N” menu s’il n’est pas visible. Dans la section Modifiers, faire Add Modifier et choisir Noise.

  • Du bruit a été ajouté au mouvement selon l’axe des X de la caméra!

  • Changer l’échelle à 6-10 (Scale) du modifier pour un mouvement saccadé certes, mais pas débile mental.

  • Changer le depth à environ 5, cela donnera un aspect moins robotique au noise.

  • Vous pouvez jouer avec les paramètres, comme le strength si le noise est trop fort (je l’ai baissé à 0.7).

  • Vous pouvez ajouter des noise modifiers aux autres axes (Y et Z) si vous voulez, pour plus de réalisme.

  • Vous pouvez également animer un mouvement à la caméra si l’idée vous en dit.

  • Et voilà, on a terminé. Ce qui est cool, c’est qu’un effet Parallax nous donne l’impression que le poteau bouge également (ce que l’on pourrait faire!).

  • Maintenant le rendu! Utilisez SheepIt Render Farm si vous pouvez, sinon votre carte graphique locale. Générez des PNGs puis faites un montage vidéo avec son et tout le toutim et générer la vidéo!

  • Voici ce que ça donne de mon côté (P.S., je suis allé chercher un poteau dans BlenderKit et j’ai modélisé des oeillets au niveau des accroches; j’ai également joué avec les paramètres du Noise Texture, ceux de la valeur des Keyframes X du mapping et W du Noise Texture jusqu’à satisfaction). Le bruitage, j’ai tout trouvé ça sur artlist.io. Si vous les voulez, c’est par ici:

    https://drive.google.com/drive/folders/1KMvh9JOHhtWA1y4HkoR-OaF2d0sfCKc5?usp=sharing

  • À votre tour, soyez créatifs, changez le HDRI, ajouter un soleil comme source de lumière tiens, changer la texture du drapeau, ajouter des lampadaires avec émission de lumière, have fun, soyez fous!

Devoirs

  • Un coussin gonflable à votre effigie, similaire à ceci:

  • Critères

    • Changer la texture pour quelque chose qui vous représente
    • Vous pouvez modifier le End Frame pour une rotation plus lente: 360 au lieu de 80. Moi, pour la démo, j’ai tout simplement doublé la séquence, en inversant l’ordre de la deuxième série d’images.
    • Ajouter des effets sonores
    • Laisser aller votre imagination, surprenez-moi
  • Walkthrough