From BlenderWiki

Jump to: navigation, search

Un "Softbody" ("corps mous", "souples") est une simulation physique de ce qui arriverait "dans le monde réel" si le mesh avait vraiment de la substance, était une "chose" réelle. En utilisant les corps souples, vous pouvez simuler la forme qu'un mesh prendrait s'il était réel et avait du volume, était rempli avec quelque chose, et était soumis à de vraies forces.

Quelle est la différence entre une barre de métal, une barre de caoutchouc, et une barre de gélatine? Chacune se pliera, se déformera sous la force de la gravité si vous la tenez par une extrémité, mais en quantité fort différente. Pour modeler un objet se déformant, vous pourriez ajuster avec précision chaque vertex vous-même, ou vous pourriez ajouter un squelette ("bone armature") dans votre objet. Cependant, avec ces méthodes, vous ne faites finalement que deviner ce qui arriverait "en vrai". Blender vous propose une alternative bien plus simple, appelée simulation de "corps mous" ("soft bodies"). Si vous activez Enable Soft Body pour un mesh, Blender calculera les interactions entre ce mesh et les différentes forces présentes (comme le vent, la gravité, …), et il le déformera en conséquence.

La simulation des corps souples est similaire à une animation automatique. Bien que vous contrôliez ce que le monde fera à votre sofbody, et où il est fixé, attaché ("pinned"), c'est Blender qui s'occupe des calculs déterminant la forme du mesh à tout instant donné. Cela signifie que votre objet pourrait rebondir à travers votre scène, si c'est ce qui arriverait dans le monde réel, d'après les réglages de votre "réalité" virtuelle. Les corps mous sont donc affectés par:

  • Les déflexions causées par les "corps durs" (les meshes "normaux");
  • Les déflexions causées par les autres corps mous (par exemple, collision entre deux morceaux de gelée);
  • La gravité;
  • Les champs de force (Fields, par exemple, le vent, un vortex, une répulsion/attraction sphérique, …)
  • Eux-même (par exemple, une pièce de tissu, se repliant sur elle-même, subit des collisions internes qui limitent ce repliement).

Seuls les objets Mesh peuvent devenir des softbodies.

[edit] Corps souples

Mode: Mode Object

Panneau: Contexte Object → sous-contexte PhysicsSoft Body, et Contexte EditingModifiers

Raccourci clavier: F7 Pour passer en contexte Object; à répéter pour passer d'un sous-contexte à l'autre.


[edit] Description

Simulation d'une nappe.

Dans le mesh, vous créez typiquement entre chaque vertices voisins une arête ("edge"), pour les relier. Imaginez maintenant chaque arête comme un ressort. Tout ressort "réel" est capable de s'étirer lorsqu'il subit une traction, et de se rétracter lorsqu'il subit une compression. Tous les ressorts ont une longueur idéale (au repos), et une raideur ("stiffness") qui limite leur extension/compression.

En ce qui concerne Blender, la longueur idéale (= au repos) est la longueur d'origine de l'arête dans votre mesh, avant activation du Soft Body. Tant que vous ne l'activez pas, tous les ressorts/arêtes sont supposés d'une raideur infinie: pas de déformation possible.

A partir du moment où vous activez le Soft Body, vous pouvez ajuster la raideur de tous ces ressorts/arêtes, ce qui permet à votre mesh de s'affaisser, de se plier/déformer, de flotter dans le vent, ou de se répandre sur le sol (NdT: traduction estimée de "to puddle up on the ground").

Il y a deux méthodes principales pour contrôler cet effet de corps mou:

Goal
L'option Goal (~= "but") fonctionne comme une référence sur un ensemble de vertices sélectionnés, permettant de choisir la quantité d'effet "corps souple" qui s'applique à ces vertices. Avec Goal: au maximum (1.0), l'objet se comportera comme un objet normal (pas d'effet soft body). Lorsque Goal: est à 0.0, l'objet n'obéit qu'aux lois de la physique. Entre 0.0 et 1.0, l'objet est plus ou moins influencé par celles-ci, vous permettant de mélanger animations "standard" et "physique" (effet "corps mou"). Activer Use Goal permet également de disposer d'une "mémoire" de la forme de départ, ce qui permet d'éviter que les objets ne se déforment de trop, finissant en "bouillie de polygones". En exploitant le système de pondération dans les groupes de vertices, vous pouvez régler la quantité de Goal à appliquer à chaque vertex individuellement. Pour rendre cela plus naturel, vous pouvez définir les paramètres des ressorts/arêtes pour définir une limite aux déformations de la forme originale.
Springs
Une fois activé Use Edges, E Stiff: (pour "Edge Spring Stiffness", raideur des ressorts/arêtes) indique de combien les arêtes essayent de conserver leur longueur d'origine. Pour une même valeur ici, plus il y aura d'arêtes, plus votre objet se "tiendra", par exemple, ajouter des diagonales à un cube le rendra moins mou, moins "jelly". Ajuster E Stiff: permet donc de régler la tendance de l'objet à garder (plus ou moins) sa forme originale, tout en répondant toujours librement à la physique ambiante.

Les vertices d'un corps souple interagissent avec toutes les forces (généralement utilisées avec des particules) présentes sur le même calque, comme le vent (Wind), les champs de force, …, et tout autre effet physique présent sur ce calque.

Les softbodies sont aussi affectés par les fluides, du moment que le domaine de simulation du fluide est marqué comme déflecteur. Et que le corps mou se trouve dans ce domaine!

Les corps souples ont des matériaux et textures, exactement comme n'importe quel autre mesh, ils peuvent être "multires", et avoir d'autres modificateurs (subdivision de surface, …). En fait, quand vous faites d'un mesh un corps mou, vous avez peut-être déjà remarqué le modificateur Sofbody qui apparaît dans la pile des modificateurs. Quand il est utilisé avec d'autre modificateurs, comme Subsurf, le modificateur Softbody doit être le premier,en haut de la pile, car il doit pouvoir opérer sur le mesh de base. De fait, le modificateur Subsurf est un excellent moyen d'adoucir un corps mou sans trop ajouter de vertices (et donc ralentir les calculs). Un softbody peut aussi avoir des clefs de forme (shape keys).

[edit] Interaction avec les déflecteurs

Une part importante de la simulation concerne les interactions entre deux objets (ou plus): le corps mou, et un déflecteur ("deflector", il peut être un mesh "dur", normal, ou un autre softbody). Les réglages du déflecteur travaillent en conjonction avec les réglages du corps souple pour fournir des résultats précis, réalistes. Donc, si votre simulation ne vous satisfait pas, assurez-vous de contrôler les deux objets.

En particulier, les deux objets ont des réglages d'amortissement ("damping"), mais de leur propre point de vue. Un coussin de canapé, un terrain de football et un terrain de basketball sont tous des déflecteurs. Un coussin bien pelucheux absorbera toute l'énergie d'un corps mou souple (restons poli!) s'asseyant dessus: il a un amortissement de 1.0. Un terrain de football est gazonné et a donc bien plus d'amorti que la dure surface d'un parquet en bois de pin. En conséquence, un terrain de football amortira tout corps mou interagissant avec lui, peut-être de 0.5, en fonction de la hauteur et de la densité de l'herbe, du degré de tassement et d'humidité du sol, … Il absorbera une partie de l'énergie de collision, mais pas la totalité. Un sol de bois dur, au contraire, a un amortissement de 0.0: il n'absorbe pas du tout l'énergie du choc.

Quand un ballon rebondit sur le parquet de bois dur, ses rebonds sont de moins en moins hauts, jusqu'à ce qu'il s'arrête finalement. Donc, si le sol ne l'a pas "freiné" (puisqu'il n'absorbe – théoriquement – aucune énergie), c'est que quelque chose en lui-même amortit le rebond, sinon il continuerait éternellement. En conséquence, le corps mou lui-même doit avoir un amortissement non-nul.

Il en est de même pour Error Limit (limite d'erreur); le déflecteur et le corps souple ont tous deux des réglages tampon intérieur/extérieur (qui donnent une sorte "d'épaisseur" virtuelle à leurs surfaces). Ajustez les deux en tandem pour obtenir des résultats acceptables.

[edit] Processus de travail

Définir et utiliser un corps souple est quasiment un travail d'animation. Cependant, d'importantes considérations sont à prendre en compte avant l'animation, ce qui rallonge le processus de travail normal:

  • Phase de conception:
    • Désigner quels objets seront des corps mous;
    • Définir leur comportement, et la gravité;
  • Réalisation du storyboard:
    • Notez les forces physiques simulées (vent, vortex, …);
    • Notez les actions des déflecteurs par des flèches;
    • Sélectionnez les angles de caméra qui cachent d'éventuelles collisions (???);
  • Modelage:
    • Utiliser un modelage de basse définition pour les objets sofbody (en fonction de votre puissance CPU);
    • Utilisez des modificateurs Subsurf;
  • Éclairage;
  • Animation:
    • Appliquez le modificateur Softbody et commencez le travail sur le Goal et la peinture des poids;
    • Lancez les simulations.


[edit] Options

Réglages Softbody.
Soft Body
Cela active le modificateur soft body pour l'objet sélectionné.
Calculs automatiques
Dans les versions antérieures à la v2.50, vous deviez "cuire" ("to bake"), pré-calculer, les déformations du mesh. Cette approche présentait des problèmes lors de l'utilisation de fermes de rendu, ou quand vous modifiiez des paramètres et oubliiez de "re-cuire"… À partir de Blender v2.50, les calculs de la simulation sont effectués automatiquement quand c'est nécessaire. Un cache, en fait en ensemble de fichiers dans un dossier sur le disque dur, enregistre les formes du mesh. Ces fichiers sont automatiquement créés pour vous, et sauvegardés quand vous enregistrez votre fichier .blend. Utiliser un cache élimine du processus de travail (workflow) l'étape du baking, ce qui rend la mise au point de la simulation bien plus interactive et efficace.
Protect
Vous pouvez protéger ("to protect") le cache des modifications de paramètres du softbody. Activez cette option quand votre simulation vous convient, pour éviter tous changements malvenus.
Clear
Si vous effectuez des changements sur le corps mou ou les objets avec lesquels il entre en collision, vous devriez nettoyer ("to clear") le cache non-protégé (bouton Protect désactivé), afin de forcer Blender à re-calculer les formes du softbody quand cela est nécessaire. Autrement, votre corps souple pourrait ne pas détecter les modifications et continuer à vous servir les résultats mis en cache. Un exemple de ce problème est quand vous avez changé le chemin "guide" d'un objet "collisionneur"; vous devriez sélectionner le softbody qui entre (ou entrait) en collision avec lui et nettoyer (Clear) son cache.
Cache:
Vous devez enregistrer votre fichier .blend, pour que le "solveur" sache où enregistrer les résultats de ses calculs. Quand vous enregistrez votre fichier la première fois, un dossier //blendcache_softbody/ est créé pour contenir toutes les formes de mesh mises en cache. Si vous déplacez le fichier .blend, vous devriez déplacer en même temps ce dossier, sinon Blender devra les re-calculer à leur nouvel emplacement. Un corps souple de 500 vertices, calculé sur 250 images, occupe 1Mo d'espace disque. Si vous n'avez pas encore enregistré votre fichier .blend, Blender n'a aucun emplacement où placer ces fichiers. Assurez-vous également que Blender a les droits d'accès nécessaires pour créer répertoires et fichiers.


Friction
Réglez la (force de) friction qu'exerce l'environnement (le vide, un gaz, un liquide) sur l'objet. 50.0 empêche tout glissement, 1.0 correspond à de la soie, ça glisse facilement. Le seul poids du corps mou peut suffire à le faire glisser d'un objet, si sa friction est suffisamment basse.
Grav
La gravité, alias la force s'exerçant dans la direction de l'axe des Z négatifs. La gravité terrestre est proche de 9.8m.s-2. Les valeurs positives font tomber les corps souples, les valeurs négatives les font s'envoler.
Mass
La masse à donner aux vertices. Une masse plus importante "ralentit" les mouvements (augmente l'inertie de l'objet, en fait), excepté pour la force de gravité, constante quelle que soit la masse. Il est peut-être temps de dépoussiérer quelque peu vos bouquins de physique (oui, ce vieux manuel qui est tombé "accidentellement" derrière votre collection de BDs)… et de revoir les lois du mouvement de Newton. Le mesh est supposé avoir une densité constante (dans tout son volume).
Speed
Vous permet de faire varier la vitesse interne de la simulation des corps mous. 1.0 correspond à une situation normale (masse, friction, gravité standard). Utilisez des valeurs inférieures à un pour simuler un air plus dense, ou la chute d'un tissu très léger, ou un tissu très lourd ou rigide dans la brise…
Use Goal
Activer cette option indique à Blender d'utiliser les animations "standards" (IPO, Deform, Parents, etc.) dans la simulation. Le "goal" ("but") est la position finale souhaitée pour les vertices, définie par ces animations "standard". Comment un soft body essaye de se conformer à ce but dépend des paramètres de raideur ("stiffness") et d'amortissement ("damping").
Goal
L'image d'exemple ci-dessus a un groupe de vertices "Hand", constitué de deux ensembles de vertices sur le bord du mesh, simulant là où deux mains pourrait le tenir, et le tirer vers le bas. Ces vertices se déplacent en suivant fidèlement les mouvements, l'animation de l'objet, transmettant ainsi une force aux mouvements du mesh mou.
Si aucun groupe de vertices n'est utilisé, il s'agit d'un champ numérique donnant le poids "goal" par défaut de tous les vertices. Sinon, ce contrôle affiche le nom du groupe de vertex sélectionné pour le Goal – et vous permet d'en changer!
G Stiff
La raideur des "ressorts" qui relient l'objet à son "goal". Une faible valeur donne un objet très peu contraint par son "but", une forte valeur crée des ressorts raides, rendant l'objet plus conforme à son "goal".
G Damp
La friction, l'amortissement des ressorts reliant l'objet à son "goal": de fortes valeurs évitent au premier de "sauter comme un cabri" autour du second.
G Min/G Max
Lorsque vous assignez un poids aux vertices d'un groupe (que ce soit numériquement, ou avec le mode WeightPaint), cela vous permet de régler la valeur minimale/maximale de ce poids pour le softbody (c-à-d qu'une valeur de 0.0 (bleu) correspondra à G Min, une valeur de 1.0 (rouge), à G Max, les valeurs intermédiaires étant réparties sur l'intervalle entre ces deux extrêmes – notez que ces couleurs bleu-rouge peuvent être modifiées par les préférences de l'utilisateur).
Use Edges
Les arêtes ("edges") de l'objet Mesh fonctionnerons comme des ressorts entre les vertices, comme les fils dans un tissu.
Stiff Quads
Pour les quadrangles (faces à quatre côtés), les diagonales sont aussi utilisées comme ressorts. Cela évite à ces quadrangles de se "liquéfier" complètement. Activer cette option peut faire se comporter un carré de tissu comme s'il était une feuille de métal ou une épaisse pièce de caoutchouc.
CEdge
Activez cette option pour que les arêtes du mesh participent à la détection des collisions.
CFace
Activez cette option pour que n'importe quelle partie de la surface du corps souple participe à la détection des collisions (très exigeant en puissance de calcul!). Bien qu'activer CFace donne d'excellents résultats et résolve beaucoup des erreurs de collision, il ne semble pas y avoir de réglage d'amortissement pour cette option, donc les parties du corps mou proches d'une collision ont tendance à s'agiter, à rebondir légèrement en permanence, même lorsque tous les meshes impliqués sont parfaitement immobiles. Les collisions sur les arêtes ont un amortissement, ce phénomène peut donc y être contrôlé, mais même l'amortissement de l'objet déflecteur semble sans effet dans le cas des collisions avec une face.
E Pull
La raideur des arêtes/ressorts, en traction (la facilité à étirer les arêtes). Une faible valeur signifie des ressorts forts mous (un matériau très élastique), une forte valeur donne des ressorts durs (un matériau plus rigide), peu étirables. 0.5 correspond au latex, 0.9, à un pull, et 0.999, à du cuir ou une serviette fortement amidonnée.
E Push
La raideur des arêtes/ressorts, en compression. De faibles valeurs pour du tissu, de fortes valeurs pour des objets gonflés ou raides.
E Damp
La friction, l'amortissement des arêtes/ressorts. De fortes valeurs (maximum de 50.0) permettent de tempérer l'effet d'élastique de E Stiff, et de calmer l'agitation des tissus.
Aero
Activez le bouton N (?) si vous voulez utiliser un modèle aérodynamique plus proche des lois de la Physique, donnant des résultats plus intéressants. Désactivez-le pour une simulation plus tempérée.
Les arêtes peuvent sentir le vent lorsqu'elles se déplacent, et ainsi flotter dans la brise. Un modèle aérodynamique simple d'un drapeau claquant au vent. Une bonne valeur, autour de 30. Vous devez utiliser un objet séparé pour générer le champ de force du vent (Wind), ou déplacer le corps souple dans l'espace 3D, qui est supposé rempli d'air (immobile, lui!).
Techniquement, une force perpendiculaire à l'arête lui est appliquée. L'intensité de cette force varie avec la projection de la vitesse relative de l'arête (produit scalaire). Notez que cette force est la même si le "vent" souffle, ou si vous déplacez l'arête dans "l'air ambiant" à la même vitesse.
Cela signifie qu'une arête parallèle à son propre mouvement ne ressent aucune force, et qu'une arête perpendiculaire à son propre mouvement ressent une force maximale.
Pour des inclinaisons intermédiaires, les forces s'appliquent aux arêtes comme à un cerf-volant (ou une aile d'avion, …).
Bend
Plus de rigidité et le softbody est plus raide sur une plus vaste zone (un plus grand nombre de vertices). Par exemple, un jean neuf est bien plus rigide que de la soie. Une barre d'acier est bien plus raide qu'un tube d'acier.
Shear
De "to shear off": céder, pour un métal. Indique le "point de rupture" du matériau, la force maximale supportée avant qu'il ne cède brusquement et se plie. Un ressort, ou un tube de cuivre, par exemple, ont un point de rupture bien plus bas qu'un tube d'acier!


[edit] "Solveur" de corps mou

Mode: Mode Object

Panneau: Contexte Object → sous-contexte Physics → onglet Soft Body Collision


[edit] Description

L'étape suivante est d'indiquer à Blender comment utiliser ces informations de base au moment de la simulation. Un "solveur" ("solver") est en quelque sorte le moteur utilisé par Blender pour réaliser cette simulation. Il comporte également des réglages, par ex. pour contrôler le niveau d'erreur permis, la précision de l'algorithme, …

[edit] Options

Sélection du Solver
Blender peut utiliser deux algorithmes "solveurs" différents:
  • Soft – Un algorithme adapté à la plupart des situations;
  • Runge Kutta Correct Physics – Un algorithme mathématiquement correct, intéressant du point de vue éducatif, mais tendant à être "instable".
Error Limit
Contrôle la qualité globale de la simulation, par défaut à 0.1. Le réglage le plus critique, indiquant au "solveur" avec quelle précision il devrait tester les collisions. Commencez avec une valeur d'environ 1/2 longueur moyenne des arêtes. S'il y a des erreurs visibles, tremblements ou réponses (rebondissements…) très exagérés, diminuez cette valeur. Le "solveur" garde une trace de la "qualité" de ses résultats, et l'Error Limit le force à réaliser du "adaptive step sizing" ("modification adaptative de la taille des étapes" ?).
Contrôle de Vélocité
Activez cette option pour aider le "solveur" à déterminer la quantité de travail nécessaire, en fonction de la vitesse de déplacement des objets.

Les réglages suivants vous permettent de contrôler comment Blender réagira (déformera) le corps souple quand il s'approche ou "coupe" un autre objet "collisionneur" sur le même calque.

Choke ("étouffement")
À 0.0 par défaut. "Calme" (en réduisant sa vitesse de rebond) un vertex ou une arête quand il/elle pénètre un mesh de collision.
Fuzzy
À 1.0 par défaut. Vraiment la dernière chance d'obtenir des collisions à haute vitesse de qualité avec un temps de calcul raisonnable. Ce nombre est multiplié à l'Error Limit quand des vertices sont détectés à l'intérieur du mesh de collision. Compromis entre la stabilité et le temps de calcul de la simulation.
M
Si vous activez le Moniteur, vous pourrez suivre dans la console l'avancement de la simulation.
MinS
"Minimum frame step" ("nombre minimum d'étapes par image"), à 10 par défaut. Pour éviter la non-détection de collisions, ce nombre d'étapes minimum devrait être d'environ 10, ou plus. Les positions des objets "collisionneurs" sont alors interpolées pour obtenir, au minimum, MinS sous-positions par image. Par exemple, si votre frame rate est de 25fps,alors un réglage de MinS à 10 signifierait que Blender testerait les collisions dix fois par image au minimum (soit des intervalles d'au maximum 4ms pour une animation temps-réel). Pensez à un cube qui serait à droite de votre corps mou à la frame n, et à sa gauche à la frame n+1. Si vous ne contrôlez pas ce qui se passe entre ces deux images, vous manquerez tout simplement cette collision!

MaxS

Comme vous l'avez sans doute deviné, il s'agit du nombre maximum d'étapes par image, à 0 par défaut. Il s'agit en fait d'une sorte de frein d'urgence pour forcer certaines situations particulièrement difficiles à produire quand même un résultat au bout du compte. Entrez-y un nombre bien plus grand que pour MinS. Ce réglage pose une limite à la taille adaptative des étapes calculée à partir de Error Limit, si celle-ci devient trop petite. Mais les résultats sont dès lors moins précis. Une valeur de 0 désactive cette option (et Blender peut alors passer le temps qu'il veut pour résoudre les cas complexes… ça peut être long!).


[edit] Vitesse versus Stabilité

À la mise en place d'une simulation, il existe une large variété d'usages pour la simulation de softbody recouvrant une large variété de réglages et de situations. En conséquence, il n'y a pas de "recette miracle" pour ces réglages. Si c'était le cas, nous les aurions automatisés. En général, la simulation a des buts divergents:

  • Temps de calcul: vous n'êtes généralement pas près à attendre deux jours que Blender ait calculé les emplacements exact de chaque vertex, mais vous ne voulez pas non plus d'une simulation totalement fantaisiste.
  • Détection des collisions: si un objet en mouvement rapide traverse un corps mou, même en une fraction d'image, vous voulez voir les effets de cette collision dans une image suivante, même si le "collisionneur" à disparu depuis longtemps.
  • Résolution des collisions: si deux meshes entrent en collision et peut-être s'inter-pénètrent, vous voulez que Blender les fasse rebondir rapidement, mais pas trop, pour qu'ils ne s'envolent pas au diable vauvert.
  • État au repos: Quand le corps souple se retrouve au repos (immobile), vous ne souhaitez pas le voir trembloter, même si dans la vie réelle toute chose est toujours plus ou moins en vibration.

En général, donc, vous réaliserez votre simulation avec les réglages par défaut, augmentant éventuellement Error Limit (et donc diminuant les temps de calcul) jusqu'à ce que des problèmes apparaissent.

[edit] Collision de corps mou

Mode: Mode Object

Panneau: Contexte Object → sous-contexte Physics → onglet Soft Body Collision


[edit] Description

Un softbody est un mesh qui se déforme au cours du temps. Cette déformation est calculée à partir de la physique du monde réel. Une partie de celle-ci concerne la déformation du mesh quand il entre en collision avec des objets "solides", y compris d'autres corps mous, présents sur le même calque. Ce panneau vous permet de contrôler comment votre softbody interagit avec ces autres objets solides.

La raison d'être de la restriction au calque est de permettre une utilisation optimale des ressources de calcul. La simulation d'un corps souple, comme celle d'un fluide, peut prendre beaucoup de temps. Donc, normalement, réservez un calque à l'usage de votre softbody, et des éventuels autres objets entrant en collision avec lui. Pour accélérer encore plus les choses, si seule une partie d'un mesh entre en contact avec votre corps mou, dupliquez cette seule partie et placez-la sur le même calque que le softbody.

[edit] Options

Réglages de collision.

Ce panneau est composé de deux parties:

  • Self-collision (auto-collision) – réglages utilisés pour s'assurer que le corps souple ne se "coupe" pas lui-même (pensez à un rideau ou à un drapeau dans le vent);
  • Deflection (déflexion) – réglages reflétant ceux du panneau Fields and Deflection (plus pratique de les avoir à disposition également dans ce panneau…).


[edit] "Self Collision"

Quand ce bouton est activé, il vous permet de contrôler comment Blender empêchera votre corps mou de se re-couper.

Ball Size
par défaut, à 0.49 BU, ou proportion de la taille des arêtes attachées. La taille d'arête calculée dépend de l'algorithme que vous avez choisi. Vous connaissez cette sensation d'inconfort quand quelqu'un se trouve "trop" proche de vous? Nous appelons cela notre "espace personnel"… Ce réglage est donc le facteur multiplié avec la longueur du ressort/arête. Il s'agit du rayon d'une sphère: si un autre vertex du même mesh "rentre" dans cette sphère, le vertex au centre de la sphère commence à le "repousser", pour éviter une collision. Réglez cette valeur à la fraction de la distance entre vertices dont vous voulez faire leur "espace personnel". Trop haut, ce réglage inclura trop de vertices et ralentira le calcul de la simulation. Une valeur trop faible laissera trop s'approcher les autres vertices avant de réagir, ce qui pourrait causer des intersections.
Algorithme de calcul de la Ball Size
À cause du nombre infini de façons de modeler un corps mou, et donc de la variété de dispositions des vertices et arêtes, Blender vous propose cinq différents algorithmes de calcul de "l'espace personnel" (Ball Size) de chaque vertex, à choisir en fonction de la forme de votre softbody. Par défaut, l'algorithme Average (moyenne) est utilisé, qui fonctionne ainsi: la longueur moyenne de toutes les arêtes liées à un vertex est multipliée avec la valeur de Ball Size. Donc, pour un mesh normal et un Ball Size à 0.49, les "espaces personnels" des vertices sont calculés de façon que tout le monde se sente bien à sa place, sans avoir vraiment envie de se rapprocher de ses voisins.
NdT: cette partie ne semble pas complète pour l'instant…
B Stiff
À 1.0 par défaut. Détermine l'élasticité de chaque "boule d'espace personnel". Une dureté (stiffness) élevée signifie que le vertex réagit vivement à toute intrusion dans son espace.
B Damp
À 0.5 par défaut. Détermine la "violence" de la réaction du vertex: une valeur d'amortissement (damping) faible se contente de ralentir l'intrus, une valeur élevée le repoussera.


[edit] "Deflection"

Utilisez ce panneau pour faire de votre corps mou un objet "collisionneur". Ces réglages sont les mêmes que ceux utilisés pour créer des corps durs (hardbodies).

Damping
L'amortissement du rebond causé par la collision entre les objets, allant de:
  • 0.0 – aucun amortissement, les corps souples rebondiront un maximum, à
  • 1.0 – amortissement complet, les corps souples ne rebondiront pas du tout.
Inner / Outer
Une "distance de sécurité" artificielle, qui "épaissit" (uniquement pour la simulation!) l'intérieur et l'extérieur de chaque face, pour aider à éviter les intersections. Le corps mou restera au repos à cette distance des faces de l'objet "collisionneur" qui le "supporte". Réglez ces réglages pour éviter déchirures et pénétration du "corps dur" à travers une face du "corps mou".
Les objets "collisionneurs" doivent être réels
Les modificateurs (comme Array, Mirror ou Duplicate) doivent être appliqués pour que leurs effets deviennent "réels" sur les objets mesh, afin qu'ils soient détectés et correctement utilisés par le corps souple…

[edit] Exemples

Beaucoup d'utilisateurs ont demandé: "quels réglages devrai-je utiliser pour obtenir des résultats utiles?" Cette section vous suggère quelques réglages qui ont fait leurs preuves. Le problème étant qu'un corps mou peut être tant de choses différentes:

  • Du tissu, et toutes ses applications: nappes, drapeaux, vêtements, …;
  • Plus généralement, toute étoffe tissée ou tricotée;
  • Un trampoline et tout autre tissu élastique; planches de plongeoir;
  • De la chaire, des "water balloons" ("ballons d'eau" ???), des pneus gonflés;
  • Des objets extensibles, en latex, en mylar, …;
  • De la gelée, de la gélatine, de l'éponge;
  • Des balles(ballons) de caoutchouc, de baseball, de basketball, de football, …;
  • Des aimants, des victimes de Darth Vader;
  • De la moquette épaisse ("carpet with a thick under padding" ?), oreillers, coussins, …;
  • Des tapis de catch ou de gymnastique, gants de boxe, punching ball;
  • Des objets supportés par de la mousse/des ressorts (fauteuils, canapés, …);
  • Des jouets, particulièrement ceux en mousse, comme "pool noodles" (?), "#1 fan gloves"(?), …;
  • Des ballons (de baudruche ?), matelas gonflable, et autre objets remplis d'air à basse pression;
  • Des choses fondantes, coulantes (et là, les softbodies marchent sur les plates-bandes des fluides!);
  • Un "gazoubeur" (laissons à votre imagination le soin de déterminer ce que c'est…).

En utilisant une Gravity négative, vous pouvez simuler:

  • Des ballons remplis d'hélium;
  • Des gouttes d'huiles remontant à la surface dans une scène sous-marine;
  • Des bulles d'air sous l'eau;
  • De l'air chaud (courants thermiques);
  • Des montgolfières…


[edit] Nappe

Dans cet exemple, nous utilisons un cube comme objet "collisionneur", de 2BU de côté. Le corps souple, quant à lui, est un carré de 4BU de côté, subdivisé 19fois, de façon que chacune de ses faces fasse 0.2BU de côté. Ces données sont importantes, car beaucoup des réglages des corps mous sont mesurés en Unités Blender (BU), et la détection de collision – et les déformations subséquentes – ne peuvent survenir qu'au niveau de arêtes. Pour l'objet "collisionneur" (le cube représentant la table), réglez la déflexion des softbodies) comme montré ci-contre en haut:

  • Damping à 0.5 (pour simuler un peu d'air entre la table et la nappe; 0.2 ferait s'envoler la nappe de la table, et 1.0 l'y maintiendrait comme collée par de la glue);
  • Inner à 0.2;
  • Outer à 0.20.1, les coins de la "table" traversent la nappe…).

La clef est ici l'amortissement (damping): vous ne voulez pas que la table renvoie la nappe au plafond, mais vous ne souhaitez pas non plus qu'elle paraisse enduite de colle! De plus, vous souhaiterez une "distance de sécurité" extérieure au cube suffisante pour éviter toute percée de celui-ci à travers la nappe. Si cette distance est trop grande, votre nappe semblera en lévitation au dessus de la table; si elle est trop petite, les coins du cube traverseront la nappe… Vous pouvez aussi biseauter votre table: notre cube a des coins forts agressifs…

Les réglages du softbody (la nappe) reflètent une table sur Terre (Grav), propre et cirée (Friction). La nappe est faite d'un tissu léger, légèrement extensible (E Stiff), pas du coton, et assez "calme" (E Damp). Elle est utilisée dans un restaurant, donc elle est amidonnée (Rigidity). Les arêtes doivent être utilisées pour détecter les collisions (CEdge).

Activez l'auto-collision (Self Collision),pour que votre nappe ne se replie pas sur elle-même. l'Error Limit est d'un dixième de la taille d'une arête. Le Moniteur vous permet de suivre l'avancement de la simulation dans la console – tellement excitant!

[edit] Ballon de foot

Le terrain de foot est un plan "collisionneur" avec les réglages de déflexion montrés ci-contre. L'herbe du terrain est assez courte (amortissement, Damping), ce qui permet au ballon de rouler et glisser, mais pas trop.

Pour le ballon, utilisez une Icosphere avec 2 de subdivision, et un rayon (Radius) de 0.5. Voila votre corps mou. Il est assez glissant (Friction), car sa surface est faite de cuir poli/ciré. Il est léger (Mass) et a des réactions très rapides (Speed).

Bien que le cuir puisse se déformer (E Stiff) quand il est frappé, il revient rapidement à sa forme normale (E Damp). Le vent ne le déforme pas (Aero) et il est très rigide (Rigidity) quand il repose sur une surface dure.

Nous ne prenons pas en compte le cas de quelqu'un frappant le ballon si fort qu'il en explose (Self Collision). Quand il touche le sol, il s'enfonce un peu dans l'herbe (Error Limit) et s'immobilise (MinS).

[edit] Drapeau

Cet exemple va vous montrer une manière de réaliser un simple drapeau claquant au vent. Les étapes sont:

  1. Créer le drapeau;
  2. Y créer un groupe de vertices pondérés;
  3. En faire un softbody;
  4. Ajouter du vent.

Créez un plan en vue de face, et subdivisez-le trois fois. Dans le panneau des modificateurs, créez-en un de type Subsurf. Dans le contexte Editing (F9), panneau Link and Materials, cliquez sur Set Smooth.

Exemple de réglage des poids.

Ajoutons deux épingles ("pins") à notre drapeau au deux points (haut et bas) ou il semblera attaché au mât. Créez un nouveau groupe de vertices, et réglez le poids (Weight) à 0.0. Sélectionnez tous les vertices, et cliquez sur Assign. Maintenant, sélectionnez les deux seuls points d'attache, réglez Weight à 1.0, et cliquez de nouveau sur Assign. Cela forcera ces vertices à conserver leur position actuelle lors de la simulation du corps souple. En mode Weight Paint, vous devriez voir quelque chose comme dans l'image ci-contre.

Quittez maintenant le mode Edit, et passez au panneau Softbody (dans le contexte Object, F7). Cliquez sur Enable Soft Body. Réglez la Gravité à 9.8. Activez le bouton Use Goal, et cliquez sur la liste déroulante qui apparaît à sa droite pour sélectionner le vertex group à utiliser comme but (goal) – dans notre cas, vous devriez n'avoir qu'un choix! Réglez maintenant la raideur des arêtes (E Stiff) à 0.9, la Masse à 0.5, la Friction à 0.14 et la vitesse (Speed) à 2. Réglez Aero à 40. Enregistrez votre travail.

Vous pouvez maintenant taper Alt A, et admirer votre drapeau réagissant à la gravité et à la résistance de l'air en prenant sa position de repos.

Exemple de scène avec du vent.
Exemple d'IPO contrôlant la force du vent.

Nous allons maintenant faire souffler un peu de vent sur la simulation:

  • Ajoutez un objet Empty à la scène, qui sera la source du vent. Dans le panneau Particle Interaction, activez le bouton Wind. Réglez sa force (Strength) à 1.0.
  • Déplacez et faites tourner votre empty jusqu'à ce que son axe Z pointe vers votre drapeau. Voyez Exemple de scène avec du vent. Vous pouvez temporairement augmenter la force du vent, pour mieux visualiser ses effets.

Pressez de nouveau Alt A pour prévisualiser les réactions du drapeau au vent.

Ajouter une courbe IPO pour simuler des variations dans la force du vent ajoutera du réalisme à votre animation. Voyez Exemple d'IPO contrôlant la force du vent.

[edit] Pendule

Le "solveur" de la simulation des corps souples connaît les concepts de masse et de gravité. Puisque vous pouvez fixer certaines parties du mesh en leur assignant un poids de goal maximal, vous pouvez créer un pendule très facilement. Ajoutez un plan, et supprimez-en la moitié, de façon qu'il ne reste plus que deux vertices reliés par une arête. Sélectionnez-en un et faites-en le seul membre d'un groupe de vertices. Quittez le mode Edit et activez la simulation de corps mous pour cet objet. Activez Use Goal, et sélectionnez le vertex group. Réglez le poids du but ("goal weight" ? G Stiff, peut-être?) à 0.0, et enregistrez votre fichier .blend. Cela crée une sorte de "squelette" ("rig") où l'un des vertex est fixe, mais l'arête et l'autre vertex sont totalement affectés par la simulation.

Quand vous parcourez ou prévisualisez (Alt A) votre animation, le vertex "épinglé" reste immobile, mais l'autre est librement affecté par la physique. Puisque l'arête est assez dure, et qu'il y a gravité et masse, et donc inertie, l'autre vertex fait le pendule, jusqu'à finir par trouver une position de repos.

Vous pouvez maintenant rendre ce vertex parent d'un Empty, et celui-ci oscillera d'avant en arrière, bien mieux que ce que vous auriez pu espérer avec une animation "à la main"! Vous pouvez maintenant ajouter une armature, et régler la cible IK (cinématique inverse) d'un de ses bones (os) vers cet empty. Et c'est maintenant votre bone qui oscille d'avant en arrière!

[edit] "Jelly"

Cet exemple illustre l'utilisation d'un solide volumétrique. Un "solide volumétrique" est un mesh qui a des arêtes intérieures. La simulation des corps mou fonctionne bien mieux quand il y a des arêtes à l'intérieur d'un mesh, pour lui donner de l'élasticité, et surtout empêcher l'effondrement de ses parois!

[edit] "Jelly" marchant

Cet exemple illustre l'utilisation d'une Armature pour contrôler/déformer un softbody.

[edit] "Crash Test"

Les corps mous peuvent se rappeler de leurs déformations en réglant Plas (pour "plastique" ?) supérieur à 0.0, la "force de traction" ("tensile strength") étant simulée par un Be supérieur à 0.0.

[edit] Caméra "molle"

Un mini-tutoriel sur "Blender Artists" (en anglais) décrivant comment "monter" une caméra sur un corps souple. Les effets de rebonds qui résultent de la simulation du softbody donne à la caméra des mouvements de balancement assez réalistes, comme si elle était tenue par un être humain, dont les muscles ne peuvent produire des déplacements parfaitement lisses.

[edit] Astuces

Lorsque vous activez l'effet Soft Body sur un objet, la simulation n'aura lieu qu'en avançant dans le temps. Si vous reculez, ou avancez de plus de neuf images à la fois, la simulation est réinitialisée. Utilisez la fenêtre TimeLine pour un réglage interactif de l'effet.

Pourquoi rien ne se passe?
Lorsque vous faites d'un objet un corps mou (Enable Soft Body), tous ses vertices deviennent des particules flottant librement dans le vide. Cela signifie que, en l'absence d'interactions avec le "reste du monde", ils conservent leur mouvement ad libitum (1ere loi de Newton). Puisque rien n'agit sur eux, ils restent à leur position de départ. Cela peut provenir de ce que:
  1. Le corps mou est en mode Edit;
  2. Vous n'avez pas enregistré votre fichier .blend, et Blender ne peut donc pas sauvegarder la simulation dans le cache;
  3. Rien n'agit sur votre softbody, que ce soit un objet "collisionneur" ou une force;
  4. Il n'y a pas de Gravité et/ou de Masse;
  5. Use Edges (utilisation des arêtes comme ressorts) est désactivé;
  6. Vous avez activez Use Goal, et celui-ci est réglé pour que le corps souple reste immobile et indéformable.
Je voulais juste une légère agitation…
Utilisez Goal. Il connecte les particules "libres" entre elles (vertices dans un mesh, mais cela devrait aussi fonctionner avec les courbes et lattices – NdT: je croyais que seuls les meshes pouvaient devenir des softbodies???) avec un "ressort amorti". Utilisez G Min et G Max (ou Goal si vous n'utilisez pas de groupe de vertices) pour régler la force de ces liaisons (et donc l'amplitude, la quantité d'"agitation").
Mais je le veux en train de tomber.
La Gravité ou une animation font tomber les objets. N'utilisez pas Goal s'il n'y a pas d'animation.
Je veux juste certains vertices mous… les autres restant inébranlables!
Dans ce cas, vous devez assigner un groupe de vertices comme Goal.
Les poids des vertices dans ce groupe (réglés, par exemple, par Weight Painting: rouge = 1.0, bleu = 0.0) déterminent la fidélité des vertices à leur position d'origine (celle à la sortie de la pile des modificateurs): 1.0 pour une immobilité totale, 0.0 pour une liberté totale (de répondre à toutes les autres forces présentes).
En utilisant le Weight Painting, vous pouvez limiter la liberté du mesh softbody, en le faisant "adhérer" à un mesh parent. Par exemple (en anglais), l'extrémité "cuir chevelu" des cheveux reste immobile par rapport à la tête, tout en laissant les "mèches" bouger librement. La "peinture de poids" est la "colle" qui maintient la "perruque" en place. Dans l'image, le rouge correspond au poids maximal (1.0) pour maintenir la racine des mèches en place, et passe ne douceur vers le bleu (0.0) à leur extrémité. Ce n'est pas un problème ici d'utiliser des valeurs extrêmes pour les poids – les réglages des corps souples permettent aisément de régler les limites maximum/minimum au poids des vertices.
Mon tissu traverse sans complexe d'autre objets "durs" (comme un fantôme).
Vous devez faire de ces objets des obstacles (des "collisionneurs"), et ils doivent être sur le même calque que le tissu. Vous pouvez également augmenter MinS (le nombre minimum d'étapes par image, dans le panneau Solver).
Mon objet "collisionneur" traverse par endroits mon tissu.
Vous devez régler les tolérances (distance, timing) pour indiquer à Blender la précision de calcul requise pour éviter ces intersections. Voyez la partie sur la collision des corps mous. Vous pouvez aussi augmenter MinS (panneau Solver).
Il y a comme une couche d'air entre mon corps souple et l'objet "collisionneur".
Réduisez les réglages Inner/Outer de l'objet "collisionneur". Si cela entraîne de nouveau des intersections avec votre tissu, activez CEdge. Si le problème persiste, activez CFace. Envisagez de faire des "coutures", d'ajouter des arêtes donnant de l'épaisseur au softbody. Changez d'angle de caméra.
Mon tissu se froisse comme du papier…
Essayez d'utiliser la méthode Old ("ancienne" ?). Augmentez Damping, Choke et Ball Size.

Mon tissu est sautillant, tremblotant…

Il peut y avoir deux problèmes: les ressorts/arêtes ne sont pas amortis (E Damp), ou alors, quand une collision est détectée, Blender essaye d'y répondre trop rapidement, trop vivement. Dans ce dernier cas, vous devez augmenter MinS afin que plus de tests soient effectués, réduire l'Error Limit pour que les collisions soient mieux détectées et résolues, et/ou diminuer Fuzzy et augmenter Choke, afin de "calmer" votre tissu.
Mon tissu glisse de la table.
Augmentez la Friction.
Mon tissu rebondit sur la table.
Augmentez l'amortissement (Damping) de la table (objet "collisionneur").
Qu'est-ce que c'est long à calculer!
Réduisez le nombre de vertices dans le mesh de votre corps mou. Désactivez CFace. La densité d'un mesh augmente les temps de calcul, mais un mesh pas assez dense est anguleux: utilisez la subdivision de surface (modificateur Subsurf).
J'ai fait des modifications, mais elles ne semblent pas effectives.
Nettoyez (Clear) le cache. Assurez-vous que Blender peut créer les fichiers du cache, et que ceux-ci ne sont pas protégés en écriture.
Mon ballon atteint une position de repos, mais il continue ensuite à s'agiter, comme soumis au mouvement brownien…
Augmentez MinS afin de stopper la sur-correction de la position des vertices.


[edit] Détails techniques

Schéma d'un amortisseur.

Dans le monde des SoftBodies, les vertices des meshes, lattices, curves, …, sont traités comme des particules ayant une masse. Leur mouvement est déterminé par les forces qui s'exercent sur eux. Entre autres forces, une particule individuelle peut interagir avec une autre via les arêtes/ressorts, selon un modèle physique très proche des amortisseurs d'une voiture. Les éléments actifs en sont:

  • Un ressort essayant de conserver les deux particules à une distance donnée. La raideur de ce ressort (l'"énergie" qu'il met à conserver cette distance) est réglée par E Stiff: pour les corps mous.
  • Un élément amortisseur, pour … amortir (les oscillations engendrées par le ressort lorsqu'il est déformé). La résistance de cet élément au mouvement est réglée par E Damp: pour les corps mous.


[edit] Le "goal" des corps souples

  • Il y a un autre "amortisseur" pour chaque vertex, qui relie la particule correspondante à la position originale du vertex. Cela définit un "but" ("goal") que la particule essaye d'atteindre (une "position au repos"). La raideur du ressort est ici réglée soit pour tout l'objet dans le contrôle Goal:, soit par les poids respectifs des vertices dans le groupe de vertex rattaché au "Goal".
  • Un effet particulier du "Goal" lorsque le poids d'un vertex est de 1.0: la particule correspondante est alors "verrouillée" sur la position du vertex d'origine. Le mouvement de cette particule est alors exactement le même que celui du vertex d'origine, comme s'il n'y avait pas de softbody. Un poids inférieur à 1.0 fera que la particule "dansera" autour de sa "position de repos".
  • Cela étant dit, il n'est pas vraiment surprenant qu'un poids de 0.0 "casse" complètement l'"amortisseur": celui-ci est alors inexistant.


[edit] "Solveur" malin

Pour que la simulation soit menée à son terme aussi rapidement que possible, le "solveur" applique une stratégie appelée "modification adaptative de la taille des étapes" ("adaptative step sizing"), qui fonctionne comme suit:

  • D'abord, nous essayons de passer directement à l'image n+1 (ou à l'étape intermédiaire suivante imposée par MinS), avec les données à notre disposition actuellement;
  • Nous utilisons quelques "tours de magie" pour détecter la quantité d'erreur que nous avons ainsi produite;
  • Si cette quantité est inférieure à la limite imposée par Error Limit, nous en avons fini avec cette étape (et pouvons joyeusement remettre nos résultats au patron!).
  • Sinon, nous avons dépassé les bornes, il nous faut appliquer le plan B;
  • Plan B:
    • Nous présumons que quelque chose est survenu dans l'intervalle de notre étape, qu'il nous faut examiner de plus près;
    • Nous essayons donc d'effectuer une étape intermédiaire, si nous en avons le droit (le "frein d'urgence" MaxS étant ici la limite), avec les données actuellement à notre disposition;
    • Nous utilisons quelques "tours de magie" pour détecter la quantité d'erreur que nous avons ainsi produite;
    • Si nous n'avons pas violé la limite d'erreur permise par Error Limit, nous essayons l'étape intermédiaire suivante (en conservant le même intervalle pour l'instant) avec toutes les données à notre disposition, jusqu'à ce que nous arrivions à destination. Et on espère que nous pourrons revenir voir le boss avec le sourire!
    • Et nous pouvons même nous permettre d'être optimiste: si nos "tours de magie" nous indiquent que les résultats sont très bons, nous pouvons même allonger de nouveau l'intervalle entre les étapes…;
    • Mais si nous n'avons toujours pas pu nous conformer au niveau d'erreur requis, nous devons appliquer le plan B récursivement, tant que nous en avons le droit (limite imposée par notre "frein d'urgence" MaxS);
    • Quand nous atteignons la limite imposée et ne pouvons plus diminuer la taille de nos étapes, nous faisons de notre mieux, et retournons nos pauvres résultats au patron.

Note: Vous pouvez frapper, mettre au feu, tuer votre ordinateur, il ne vous donnera pas de meilleurs résultats!

[edit] "Cuire" les corps mous

Blender pre-2.50+

Mode: Mode Object

Panneau: Sous-contexte PhysicsSoft Body


[edit] Description

Avant la v2.50, vous deviez manuellement "cuire" la simulation. Cette partie est conservée pour les lecteurs utilisant une ancienne version de Blender.

Une fois que vous avez une simulation de corps mou bien au point, vous pouvez la "cuire" ("to bake", en fait, pré-calculer la simulation et en stocker le résultat) pour en faire une animation statique (bouton Bake settings). Un softbody "cuit" s'affiche beaucoup plus vite, et ne subit plus les limitations dans l'avancement/recul dans l'animation (remise à zéro de la simulation si vous reculez, ou avancez de plus de neuf images à la fois).

Il vous est recommandé de "cuire" vos softbodies avant de rendre une animation, car la simulation des corps souples ne fonctionne pas très bien avec le flou cinétique ("motion blur"), ou lors d'un découpage en multiples parties dans le cadre d'un rendu en réseau.

Impossible de "cuire" en mode Edit
Vous ne pouvez effectuer une "cuisson" qu'en mode Object. Cliquer sur Bake en mode Edit semblera déclencher les calculs, mais ne fera absolument rien en réalité.

[edit] Options

Réglages Bake.
Start/End
Règle le laps de temps pendant lequel la simulation sera calculée ("cuite").
Interval
Permet de régler l'intervalle entre chaque "image clé" calculée. Les positions (images) intermédiaires seront interpolées via des B-Splines.
Bake
Démarre la "cuisson". En fonction de la complexité de l'objet et de la simulation, cela peut prendre un certain temps. Vous pouvez tapez Echap pour stopper le processus. Une fois "cuit", ce bouton devient Free Bake. Vous devez cliquer dessus (libérer la "cuisson"!) avant de modifier les réglages du corps souple.


Notes des Développeurs (en anglais)







Redirects to fix

  • Manual.fr/Fluid Simulation → Doc:FR/Manual/Physics/Fluids
  • Manual.fr/Force Fields and Deflection → Doc:FR/Manual/Physics/Force Fields
  • Manual.fr/Modifier Stack → Doc:FR/Manual/Modifiers/The Stack
  • Manual.fr/Static Particles → Doc:FR/Manual/Physics/Particles/Hair
  • Manual.fr/Subsurf Modifier → Doc:FR/Manual/Modifiers/Mesh/Subsurf