# Optimisation Océan, corps souples

Optimisation pour un océan “infini”

  • Dans un nouveau dossier, créer un nouveau fichier que vous nommerez ocean.blend
  • Créer un cube, lui donner un Ocean Modifier avec les paramètres suivants:
Resolution Viewport16
Render16
Waves → Choppiness0.9
Wind Velocity4 m/s

  • Dans les propriétés de l’output, changer le Frame rate à 30 et le End Frame à 300 (Note: ça va le changer automatiquement dans le timeline également).

  • Amener la tête de lecture au Frame 1. Dans le Ocean Modifier, enter la valeur 0 à Time et insérer un Keyframe.

  • Au frame 30, changer la valeur de Time à 0.5 et insérer un autre Keyframe.

  • Passer au Graph Editor. Assurez-vous de sélectionner la variable Time (Ocean).

  • Sélectionner tous les points (A) et changer l’interpolation à “Linear” (T puis choisir Linear). Vous devriez avoir ces deux points, l’un au frame 1, l’autre au frame 30:

  • On peut ajouter des modifiers dans le graph editor. Avec la souris dans le Graph Editor, Faites N pour faire apparaître le “N Menu”.

  • Cliquer sur un des points de la courbe (keyframe au frame 1 ou 30) pour le rendre actif (blanc).

  • Dans le tab vertical Modifier, ajouter un Cycles Modifier.

  • S’assurer que Before Mode et After Mode soient “Repeat with Offset”. Cela va créer un cycle mais avec un calcul du gradient entre la valeur de départ et celle de fin afin d’avoir un transition douce.

  • Revenir au Timeline et faire play.

  • Dans les propriétés du Ocean Modifier, changer le render à 32 au lieu de 16

  • Dans la section Bake, choisir votre dossier pour l’export (genre un dossier “Bake” dans le dossier de votre fichier blend: “//Bake\” )

  • Il est très important que le dossier de la cache soit au même endroit que le fichier .blend car on va, dans ce dossier, créer un autre fichier qui va utiliser cette cache.

  • Changer le End Frame à 300.

  • Cliquer sur “Bake” et attendre que la cache du bake soit générée. Le dossier de la cache devrait quand faire 1.5 GB, c’est pas rien. Imaginez si on avait mis la résolution du Render à 128 au lieu de 32…

  • Sauvegarder votre fichier Ocean.blend.

  • télécharger le fichier .blend suivant dans le même dossier que Ocean.blend: https://drive.google.com/file/d/1aCpLhRj8xtSq4O7-HvV4ZyzxgGXvLjXb/view?usp=sharing

  • Le nommer bateau.blend et l’ouvrir dans Blender. C’est un bateau que je suis allé chercher via Blenderkit, la version payante, donc s.v.p., ne pas utiliser en dehors du cadre pédagogique.

  • Ouvrir ledit fichier dans Blender

  • Sélectionner le plan et l’effacer.

  • Cliquer sur l’oeil à droite de la collection “Coast defense ship” pour cacher le bateau.

  • Ajouter un Plane, Scale à 1000 (S 1000 ↩)

📌

Attention, ne pas faire apply scale sur le plan, sinon la texture qu’on rajoutera tout à l’heure ne fonctionnera pas.

  • Dans le N Menu, choisir View et changer le Clip start à 0.1 et Clip End à 100 000. Ces valeurs déterminent quand la zoom in/zoom out clip et arrête de montrer l’information des objets dans le viewport.

  • Avec le Plane sélectionné, passer en mode Edit, cliquer droit et choisir Subdivide.

  • Dans les paramètres de création, changer le Number of Cuts à 100.

  • Revenir en mode Object.

  • Ajoutons un Material au Plane. Changer d’espace de travail, aller vers le Shading Editor.

  • Dans le shading Editor, dans la section où l’on voit l’objet, activer le N menu et changer le clipping de la camera dans l’onglet View, comme on l’a fait tout à l’heure. Ça ne le fait pas globalement. Donc encore une fois: Clip Start à 0.1 m et Clip End à 100000 m.

  • Choisir Object au lieu de World, faire New, sélectionner le Principled BDSF et faire ⌃ T. Cela va rajouter une Image Texture avec ses coordonnées et mappings.

  • Dans le noeud Image Texture, faire Open et choisir le premier .exr dans le dossier de la cache (moi je l’ai nommé ”Bake”). La première image devrait se nommer “disp_0001.exr”

  • Connecter la sortie Object de Texture Coordinate à l’entrée Vector de Mapping et, dans Mapping, changer le scale à 10 pour les trois axes.

  • Dans le noeud Image Texture qui est maintenant nommé “disp_0001.exr”, changer Single Image pour Image Sequence et mettre le nombre de Frames à 300.

📌

Saviez-vous que vous pouvez même mettre une vidéo à la place d’une image en guise de texture? Cela créera une texture animée! Ça peut être chouette pour des écrans de télé/pub genre à la Blade Runner.

  • Ici, l’aspect très important d’optimisation, c’est justement qu’il n’y a plus de simulation en jeu, l’océan a une texture animée.

  • Entre l’Image Texture et le Principled BSDF, ajoutons les noeuds suivants: Un Separate XYZ, un Combine XYZ dont vous connectez les 3 axes, i.e. les sorties X, Y et Z du Separate XYZ aux entrées X, Y et Z du Combine XYZ. Cela va transformer la couleur du texture en vecteurs [X,Y,Z].

  • Ajouter un noeud Vector Displacement et changer le scale à 0.01.

  • Enfin, connecter la sortie Displacement du noeud Vector Displacement à l’entrée Displacement du noeud Material Output.

  • Vous noterez que le Principled BSDF n’a pas de Base Color connecté en entrée, c’est normal.

  • Changer la couleur du Principled BSDF à noire, le Roughness à 0, l’IOR à 1.333 et le Weight de la Transmission à 1:

  • Revenir dans l’espace de travail “Layout”.

  • Assurez-vous que le Render soit Cycles.

  • Dans les propriétés Material, dans la section Settings, sous-section “Surface”, changer Displacement pour “Displacement and Bump”.

⚠️

Ce paramètre n’est visible que si le Render est en mode Cycles

  • Passer en mode Render EEVEE.

  • Passer en mode Render et zoomer sur le plan de manière à voir les vagues.

  • Dans les propriétés World, retirer le HDRI en choisissant Sky Texture dans Color et changer le Strength à 0.8.

  • Changer le renderer pour EEVEE au lieu de Cycles dans les propriétés Render.

  • Dans la section Color Management, changer Exposure pour 0.2 et Gamma pour 1.2. Changer la valeur du noeud Gamma dans le Compositing Editor à 1.2 également.

  • Revenir au Shading Editor pour le Plane, il y a trop de vagues, changer le scale du Vector Displacement à 0.001 plutôt que 0.01.

  • Dans le noeud Image Texture, activer Cyclic and Auto Refresh

  • Revenir au Layout Editor.

  • Dans les propriétés Modifiers du Plan, ajouter un Subdivision Modifier et changer le Render et Viewport à 4.

  • Faire unhide de la collection “Coast defense ship” et déplacer le bateau selon l’axe des Z de manière à ce qu’il ait l’air de flotter sur l’océan.

  • Se déplace dans le viewport de manière à obtenir une vue intéressante.

  • J’ai rajouté une caméra et baissé dans mon cas l’intensité du Sky Texture à 0.1, le soleil était trop aveuglant sinon. À vous de voir ce qui fonctionne pour vous.

  • Faites Render Image pour voir après avoir ajouté une caméra.

  • Maintenant vous pourriez vous amuser à animer le mouvement de la caméra avec une “follow path” par exemple.

  • Avec l’arrivée de EEVEE-NEXT (Blender 4.2), on pourra activer le Ray-tracing temps réel pour un look encore plus abouti! En attendant, voici le résultat en ajustant certains des paramètres de l’environnement Sky (soleil plus bas sur l’horizon).

Corps souples - théorie

Intro

📌

Cette documentation est tirée du livre “Learn Blender Simulations the Right Way” par Stephen Pearson

  • À l’instar de la simulation de tissus, les corps souples (ainsi que les corps rigides) ont besoin d’une géométrie également distribuée pour bien fonctionner.
  • Aussi, les corps souples (et corps rigides) font appel aux collisions pour interagir avec leur environnement.
  • En ajoutant un Collision Modifier, des paramètres apparaîtrons dans l’onglet Softbody & Cloth:
    | Field Absorption (absorption de champ) | Définit la capacité d’absorbtion de la force d’un champ. Par exemple, si un champ de force de vent traverse une collision avec une valeur d’Absorption de Champ fixée à 0,2, il absorbera 20% de la force du champ. Si la valeur est fixée à 1, il absorbera 100% du champ de force, et aucun vent ne pourra passer au travers. |
    | --- | --- |
    | Damping (amortissement) | La quantité de rebond qu’un corps mou aura lors d’une collision. 0 signifie aucune amortissement, il y aura donc beaucoup de rebonds. 1 signifie un amortissement maximal, auquel cas il y aura très peu de rebonds. |
    | Thickness Outer (épaisseur extérieure) | La taille de la zone à l’extérieur de la collision. Avec une valeur de 0,5, il y aura un assez grand écart entre la collision et le corps souple. Ce paramètre sert également de rembourrage pour la collision. Au lieu de frapper et de rebondir, il semblera que le corps souple frappe un oreiller. |
    | Inner (épaisseur intérieure) | La zone de collision à l’intérieur de l’objet. C’est essentiellement la distance de rembourrage, et si un corps souple entre dans cette zone, il essaiera de le forcer à sortir. Un exemple serait de placer un corps souple au milieu d’un plan. Comme la moitié du corps souple est à l’intérieur de la zone intérieure, il le poussera vers le haut et vers l’extérieur. Gardez à l’esprit que cela ne fonctionne pas pour une simulation de tissu, uniquement pour les corps souples. |

Banque de cours - Collision et direction des normales

📌

Une collision est basée sur la direction des normales à la surface. Les normales d’un objet sont la direction dans laquelle les faces sont orientées (un vecteur perpendiculaire à chaque plan). Il faut parfois recalculer les normales et voir dans quelle direction celles-ci pointent pour que la simulation fonctionne. Pour ce faire, en mode Édition avec l’objet sélectionné, appuyer sur A pour sélectionner tous les sommets sur le maillage (mesh) puis choisir le menu Mesh → Normals → Recalculate (⇧ N). On peut également activer la visualisation de l’orientation de chaque plan (face) dans le menu Overlays pour voir dans quelle direction les plans sont orientés.

Lien vers l'original

  • Quelques paramètres essentiels aux Softbodies:
    | Collision Collection | Contrôle quelles collections interagissent avec la simulation. Si rien n’est indiqué, chaque collision dans chaque collection interagira avec les corps souples. |
    | --- | --- |
    | Friction | Ce paramètre fonctionne un peu différemment de ce q’on pourrait croire. Il s’agit de la friction globale de toute la zone. Si vous augmentez cette valeur, cela amortira le mouvement du corps souple, le faisant ressembler à un mouvement au ralenti. |
    | Mass | Contrôle le poids de chaque sommet (Vertex) sur l’objet. Une valeur élevée de la masse des sommets fera s’effondrer sur lui-même l’objet souple vu que le poids des sommets est trop lourd pour maintenir la structure de l’objet. |
    | Control Point | Permet d’utiliser un groupe de sommets (Vertex Group) pour contrôler la valeur de Masse de l’objet. On peut peindre des valeurs entre 0 à 1 sur chaque sommet (rappelez-vous de la simulation du drapeau). |
    | Speed | Contrôle la vitesse de la simulation. Cette valeur est basée sur les images par seconde (FPS) de la scène. |
    | | |
    | Cache | Certaines de ces options devraient vous être familières car elles sont les mêmes que pour une simulation Mantaflow (le drapeau par exemple). Une chose qui est différente, cependant, est la possibilité d’avoir plusieurs caches. Vous pouvez cliquer sur le bouton + pour créer un autre cache et double-cliquez sur le cache pour le renommer. Vous pouvez ensuite en sélectionner une et modifier les paramètres comme vous le souhaitez avant de faire un Bake; cela n’affectera pas les autres caches. La chose est très utile pour prévisualiser rapidement certains paramètres dans la simulation. Pour basculer entre deux caches, assurez-vous de redémarrer la Timeline, puis sélectionnez la cache que vous voulez prévisualiser avant d’appuyez sur Play.

    Quelle est la différence entre une cache et un bake? La cache est le résultat de l’animation lorsqu’elle est jouée, une ligne orange indique la portée de la cache dans le timeline. Chaque fois que vous changez un paramètre dans la simulation, la cache disparaîtra et vous devrez rejouer l’animation pour la récupérer.

    Dans le cas d’un bake, le résultat de la simulation est verrouillé; ainsi vous ne pourrez pas changer les paramètres à moins de cliquer sur le bouton Free Bake. Dans le timeline, la portée du bake apparaît en rouge. |
    | Cache Step | Permet de sauter des images d’une simulation lors du bake. Au lieu de faire un bake de chaque Frame, on fera un bake d’une image sur deux si cette valeur est réglée à 2 par exemple. Évidemment, la simulation sera alors moins précise, mais le bake prendra moins de temps. |
    | Bake | |
    | Bake All Dynamics | Fera un bake de toutes les simulations de la scène. Si vous avez plusieurs corps souples, systèmes de particules ou simulations de tissu, tous seront “baked” en même temps. |

    Exemples de corps souples

    Effet du paramètre Mass:

    Vertex Group et Weight Painting:

Goal des corps souples

  • Quand on crée un corps souple et qu’on joue l’animation, l’objet flotte simplement et oscille de haut en bas. C’est parce que l’attribut “Goal” est coché dans les paramètres. Un Goal est essentiellement un moyen de fixer les sommets en place. Cela peut être utile lorsqu’on essaie de créer par exemple des couvertures suspendues à une ligne, des coins d’un drapeau fixés à un poteau, des personnages qui marchent…

  • Lorsque Goal est activé, tout l’objet va être “épinglé”. Si vous voulez que seulement certaines parties de l’objet utilisent le Goal, il faut créer un groupe de sommets (Vertex Group) et peindre les sommets en leur donnant une valeur entre 0 et 1 (Weight Paint).
  • Pour créer un Vertex Group, on doit manuellement peindre les sommets en appuyant sur Tab et en sélectionnant Weight Paint (ou régler les valeurs dans les propriétés du Vertex Group crée, comme on a fait pour le drapeau ou le coussin). On compte donc sur le fait que l’objet a suffisamment de géométrie pour utiliser la peinture de poids.

  • Comme on a justement vu avec le drapeau et l’oreiller, on peut créer un Vertex Group dans la section “Object Data Properties” et, en mode Edit, sélectionner les sommets de la géométrie qui servirent de “pin group”.
  • La raison pour laquelle l’objet fait des bonds lorsqu’on lance la simulation est que la valeur du Strength par défaut du Goal est réglée à 0,7; ainsi elle ne fixe les sommets qu’à environ 70%. Si cette valeur est réglée à 1, alors l’ensemble de l’objet, ou plutôt les sommets épinglés seront coincés en place et ne pourront pas bouger (le drapeau fixé au poteau).
  • Les valeurs Min et Max offrent un moyen d’ajuster précisément comment le Vertex Group affecte la simulation.
  • La valeur Min sera la force minimale pour le poids de sommet le plus bas.
  • Maintenant, c’est un peu compliqué à comprendre (je trouve!). Disons que vous assignez l’ensemble de l’objet avec un poids de groupe de sommet de 0 et que vous réglez la valeur Min à 1. Que pensez-vous qu’il va se passer ? L’objet va être complètement coincé car il utilise maintenant une valeur de force de 1 pour l’objectif. Après tout, c’est le minimum. Max fonctionne de la même manière - il contrôle la force d’épinglage de tous les sommets avec un poids de 1.
  • Le paramètre Stiffness (rigidité) contrôle à quel point l’épinglage sera rigide. Dans la capture d’écran suivante, la Rigidité à gauche est réglée à 0.2, et à droite, elle est réglée à 0.999.

  • Enfin, la valeur Damping (amortissement) amortira le mouvement du corps souple jusqu’à ce qu’il cesse de bouger. Plus vous augmentez cette valeur, plus l’objet cessera de bouger rapidement.
  • Le Goal du corps souple est très utile et peut être pratique lorsqu’on essaie de créer certaines simulations comme des drapeaux et tout autre chose qu’on doit épingler (pin).

Edge des corps souples

  • L’option Edges est ce qui donne une certaine structure à l’objet à corps souple. Ainsi, au lieu de s’effondrer sur lui-même, il gardera sa forme. En gros, lorsque les Edges sont activés, cela ajoute des ressorts virtuels à tous les bords (Edges ou arrêtes, i.e. les segments qui relient deux Vertex (sommets) entre eux) de l’objet.

SpringsPermet de contrôler où se trouvent les ressorts dans la géométrie (à l’instar du Vertex Group pour le goal ou le Pin Group).
PullLa valeur agit essentiellement comme un élastique pour la simulation. Plus cette valeur est élevée, plus l‘“élastique” est fort, ce qui signifie que les bords resteront collés ensemble plutôt que d’être étirés.
PushD’autre part, “Push” contrôle combien le corps souple résiste à être écrasé. Vous pouvez le considérer comme la force des ressorts à l’intérieur de quelque chose. Des valeurs plus élevées entraîneront une plus grande résistance.
PlasticityMa valeur la plus chouette des corps souples, cette valeur permet de déformer le maillage de manière permanente lorsqu’il rencontre une collision. Avec une valeur de 100, il restera déformé pour toujours, mais si vous le réglez sur une valeur plus basse, il reviendra alors lentement à sa forme originale.
BendingLes contrôles de flexion déterminent le degré de flexion dans la simulation. Avec un réglage à 0, il s’effondrera simplement sur lui-même, mais avec un réglage plus élevé, il conservera sa structure.
LengthLa longueur réduira ou étendra votre maillage selon la valeur que vous définissez. Par exemple, si la longueur est réglée à 70, alors le maillage se réduira à 70% de sa taille. Si la valeur est réglée à 150, alors le maillage s’étendra de 50% au-delà de sa taille originale.
Collision Edge et FaceLes checkboxes Collision Edge et Face permettront à la simulation de corps souples d’eentrer en collision avec les arêtes (edges) ou les plans (faces). Normalement, seuls les sommets entrent en collision, mais l’activation de Edge ou Face leur permettra également de participer à la simulation de collision. Gardez à l’esprit que lorsque vous activez Face, cela peut coûter très cher en ressources CPU et vous pourriez obtenir beaucoup de tremblements sur l’objet car le réglage Amortissement ne l’affecte pas. À utiliser donc avec parcimonie.
AerodynamicsL’aérodynamique permet à l’objet à corps souple d’avoir une certaine traînée aérienne dans la scène. La valeur du facteur contrôle la quantité de traînée aérienne. Pour voir cela en action, vous devrez régler la valeur du facteur assez haut (2000 ou plus). Cela rendra l’air autour de l’objet très dense, ce qui ralentira la chute de l’objet et le déformera.

Il existe deux types différents d’aérodynamique : Simple et Lift Force. Simple est plus rapide à calculer mais moins précis. Lift Force est plus lent, mais aura plus de réalisme.
StiffnessStiffness (rigidité) ajoute des ressorts virtuels aux bords (edges) d’une face, et Shear (la valeur de cisaillement) contrôle la rigidité de ces ressorts. Lorsqu’elle est activée, elle empêche l’objet de s’effondrer sur lui-même.

Il faut noter que la rigidité fonctionne uniquement avec les faces quadrilatérales (quads, i.e. 4 sommets (vertices) par plan (face)). Un plan à trois sommets ne fonctionnera pas, le réglage de la rigidité n’aura alors aucun effet.

C’est entre-autres de là que vient la manie de vouloir des quads dans nos maillages plutôt que des triangles (bien que les cartes graphiques aient été longtemps optimisées pour des calculs autour de plans constitués de trois sommets, i.e des triangles).

Effet du paramètre Pull

Effet du paramètre Push

Effet du paramètre Plasticity

Effet du paramètre Bending

Effet du paramètre Stiffness

Self Collision

  • Le Self Collision, lorsqu’activé, fera entrer l’objet simulé en collision avec lui-même. C’est utile lors de la création de tissus, ou de vêtements par exemple. Si le paramètre n’est pas activé, le corps passera simplement à travers lui-même sans tenir compte de collisions possibles.
  • Le Self Collision fonctionne en créant une petite balle virtuelle autour de chaque sommet et en l’utilisant pour les calculs de collision. La taille de cette balle virtuelle peut être contrôlée par le paramètre Ball Size.
  • Si la valeur de Ball Size est trop élevée, une zone de collision de sommet pourrait interférer avec une autre. Cela amène le corps souple à s’étirer pour compenser la zone de collision. Si vous constatez que votre objet à corps souple se dilate lorsque vous activez le Self Collision, vous devez probablement diminuer la valeur de la taille de la balle.

Avec et sans Self Collision

  • Le type de calcul définit comment la taille de la sphère de collision sera définie. Vous pouvez choisir parmi les options suivantes :
    • Manual vous permet de définir manuellement la taille de la sphère de collision.
    • Average prend la longueur moyenne de chaque arête et la multiplie par la valeur de la Taille de la sphère.
    • Minimal prend l’arête la plus petite de l’objet et la multiplie par la valeur de la Taille de la sphère.
    • Maximal fait l’inverse. Il prend la plus grande arête et la multiplie par la valeur de la Taille de la sphère pour déterminer la collision.
    • Enfin, Average Min & Max ajoute les deux, divise par 2, et multiplie le résultat par la valeur de la Taille de la sphère.
  • Dans la plupart des situations, vous n’avez pas besoin de changer ces paramètres, donc restez simplement avec Average.
  • La rigidité (Stiffness) contrôle comment la collision avec soi-même fonctionne lorsqu’un sommet entre dans la sphère de collision d’un autre sommet.
  • Lorsqu’elle est réglée à une valeur élevée, elle repoussera très rapidement le sommet. Lorsqu’elle est réglée à une valeur plus basse, elle le repoussera lentement.
  • L’amortissement (Dampening) est utilisé pour ralentir un sommet lorsqu’il se rapproche de la sphère de collision d’un autre sommet. Des valeurs élevées le ralentiront très rapidement.
  • La plupart du temps, tout ce que vous avez à faire est d’activer le Self Collision et tous les paramètres par défaut fonctionneront adéquatement.

Solver

  • L’onglet Solver aide à rendre la simulation plus précise. Parfois, avec des collisions rapides, la simulation aura du mal à calculer, et vous pourriez avoir quelques erreurs et problèmes avec les collisions. Cependant, dans cet onglet, vous pourrez modifier les paramètres afin d’obtenir une simulation plus précise et donc plus réaliste.
Step Size MinLorsque la simulation rencontre des erreurs ou si les collisions ne fonctionnent pas correctement, on peut augmenter le réglage Step Size Min. Cette valeur indique combien de fois la simulation sera calculée par image.
MaxLe nombre maximum de steps (passes) par frame dans le calcul.
Auto-StepBlender va se baser sur la vitesse de l’objet (Velocity) pour automatiquement régler le nombre de steps.
Error LimitPlus cette valeur est petit, plus la tolérance à l’erreur sera faible et plus précise sera la simulation.
DiagnosticOn peut imprimer les performances du solveur dans la console pour voir comment la simulation fonctionne. Sur Windows, il faut aller dans le menu “Windows → Toggle System Console. (La même console qu’on utilise pour troubleshooter des problèmes de programmes Python. Si si, on peut créer une scène au complet, avec animation, keyframes, simulations, et calculs, en écrivant du code Python.

Sur Mac, il faut démarrer Blender via un SHELL (Terminal) pour pouvoir voir ce qui est imprimé dans la console.
FuzzyLa valeur Fuzzy (flou) définit la précision d’une collision. Des valeurs élevées permettent un calcul de simulation plus rapide mais moins précis.
  • Si un objet pénètre à travers une collision, la simulation essaiera de le repousser avec une certaine vitesse. Cette dernière est contrôlée par les valeurs d’étranglement (Choke). Des valeurs plus élevées ralentiront le corps souple lorsqu’il sort d’une collision.

Field Weights

  • Le dernier onglet dans la simulation de corps mou est le Field Weights. Cela fonctionne exactement comme avec la simulation de fluide. Vous pouvez définir certaines forces pour certains champs de force et personnaliser quels champs de force fonctionneront dans votre simulation.
  • Si vous avez plusieurs champs de force dans votre scène, vous pouvez choisir quelle collection utiliser dans le menu Collection d’Effector. Ainsi, seuls les champs de force de cette collection affecteront la simulation.

Interaction entre plusieurs objets souples

  • Pour certaines simulations, plusieurs corps mous interagissent entre eux, il faut alors leur rajouter un Collision Modifier afin qu’ils puissent se heurter entre-eux adéquatement. Il est important que le Collision Modifier, dans la pile des modifiers, soit appliqué APRÈS le Softbody modifier.

Des corps souples interagissant ensemble

Pour en savoir plus

Une course à obstacles de corps souples

Création du soft body

  • Sélectionner l’objet nommé Soft Body Sphere et lui donner la propriété Soft Body dans les paramètres de propriétés Physiques.
  • Augmenter la Mass à 2 pour qu’elle soit un peu plus lourde.
  • Dans la section Cache, mettre End Frame à 600.
  • Pour l’instant, désactiver “Goal” afin que l’objet ne flotte pas. Plus tard on le réactivera.
  • Dans la section Edges, instaurer les valeurs suivantes:
    | Paramètre | Valeur | Description |
    | --- | --- | --- |
    | Push | 0.6 | Cela va donner une certaine structure et rigidité à la sphère, une résistance à l’étirement |
    | Pull | 0.6 | Ici une certaine résistance à l’écrasement |
    | Damp | 40 | Lorsque la sphère entrera en collision avec un objet, elle vibrera et rebondira beaucoup sans amortissement. On va lui demander de se calmer le pompon un peu |
    | Bending | 2.5 | Empêchera la sphère de s’écrouler sous l’effet de cisaillements (Shear) et ce faisant perdre sa structure. |

Ajout du Collision

  • Sélectionner la Soft Body Sphere et lui ajouter un modifier “Collision” (Add Modifier → Physics → Collision). S’assurer que Collision soit après Soft Body dans le stack des modifiers autant dans les modifiers( clé à mollette) que dans les propriétés physics.
  • Sélectionner l’objet Cylinder 1 (celui du haut, le premier du parcours) et lui attribuer la propriété physique “Collision”.
  • Dans les propriétés Modifiers, s’assurer que le modifier Collision est avant (au-dessus) le Solidify Modifier qui est déjà là.
  • Ici, il est très important de noter que nous au préalable inversé la direction des normales du Cylinder 1 pour qu’elles pointent vers l’intérieur puisque c’est là que se passe l’interaction avec la sphère. Par défaut, lorsqu’on crée un cylindre, ou tout autre objet “plein”, les normales pointent vers l’extérieur et non pas vers l’intérieur de l’objet.

Banque de cours - Collision et direction des normales

📌

Une collision est basée sur la direction des normales à la surface. Les normales d’un objet sont la direction dans laquelle les faces sont orientées (un vecteur perpendiculaire à chaque plan). Il faut parfois recalculer les normales et voir dans quelle direction celles-ci pointent pour que la simulation fonctionne. Pour ce faire, en mode Édition avec l’objet sélectionné, appuyer sur A pour sélectionner tous les sommets sur le maillage (mesh) puis choisir le menu Mesh → Normals → Recalculate (⇧ N). On peut également activer la visualisation de l’orientation de chaque plan (face) dans le menu Overlays pour voir dans quelle direction les plans sont orientés.

Lien vers l'original

  • Passons maintenant au Cylinder 3 (le cylindre 2 n’a pas besoin d’être un objet Collision). Sélectionner l’objet Cylinder 3 et lui ajouter un modifier Collision.

  • S’assurer que le modifier Collision soit le premier dans le stack des modifiers.

  • Régler Inner à 0.001 sinon le calcul de collision ne se fera pas correctement car il y aura “overlap” entre les bounding boxes de la sphère et ceux du cylindre (les fameux paramètres Inner et Outer).

  • Pour sauver du temps, le Cylinder 3 est déjà animé pour s’ouvrir et se fermer. Au frame 40, il commence à s’ouvrir, et il est complètement refermé au frame 80.

  • Faites “Play” pour voir?

⚠️

Pour aller un peu plus vite, vous pouvez rester dans les propriétés Modifier et faire “Add Modifier” puis choisir “Collision” et le remonter dans la stack des modifiers pour qu’il soit le premier.

  • Maintenant sélectionner Platform 1 et lui ajouter un paramètre Collision et, encore une fois, le déplacer pour qu’il soit le premier en haut dans la pile des modifiers.
  • Faire exactement la même chose pour Platform 2 et Platform 3.n
  • Même chose pour l’objet Gear Left.
  • Même chose pour l’objet Gear Right.

Rotation des engrenages.

  • Sélectionner Gear Right and ouvrir le N Panel (touche N). Dans la section Rotation, changer la valeur de Y pour “#frame/-25”. Cela va rajouter un “driver” de rotation où, essentiellement, l’engrenage va tourner vers la gauche (en vue orthogonale de face) d’une valeur de 1/25 du No du frame dans l’animation. Chouette non?
  • Notez que le champ Y Rotation est maintenant violet, i.e. il est devenu un driver d’animation.
  • Pour l’engrenage de gauche, faire la même chose mais changer le signe du diviseur, on veut diviser par +25 et non pas -25, pour que cet engrenage tourne vers la droite, donc Rotation Y = “#frame/25”
  • Faites Play et vous verrez les engrenages tourner.

  • Ajouter une collision au reste des objets, à l’exception de l’objet “Goal Guide”, et s’assurer bien de, à chaque fois, déplacer le Collision Modifier au sommet de la pile de modifiers pour chaque objet sinon vous pourriez obtenir des résultats étranges.
  • Pour le Glass Cylinder, réglez le Damping à 0.5 pour amortir la collision. Cela aidera la sphère à ne pas trop rebondir.

Simulation de tissu

  • Choisir l’objet Cloth 1. Dans les propriétés Physics, ajouter un “Cloth”.
  • Passer au mode Edit Faces, choisir les 4 faces qui forment les coins du tissu
  • Dans les propriétés Data, créer un nouveau Vertex Group et appuyer sur le bouton Assign.
  • Revenir en mode Object, aller dans la section propriétés Physiques et dans la section Shape, assigner le Vertex Group dans Pin Group.
  • Changer le End Frame dans Cache à 600.
  • Dans les propriétés Modifier et dans Physics, il est important que le Cloth Modifier soit avant Collision.
  • Faites exactement à Cloth 2 ce qu’on vient de faire pour Cloth 1 (vertex group, cloth sim, end frame à 600, pin group, …)

Soft Body Goal

Un peu de théorie (encore)

  • Activer le Goal pour un objet Soft Body indique à Blender d’utiliser la position (ou la position animée) d’un sommet dans la simulation. L’animation des sommets peut être effectuée de toutes les manières habituelles (courbes F, armatures, parents, treillis, etc.) avant l’application de la simulation de corps souple. Le Goal est la position finale souhaitée pour les sommets.
Vertex GroupGroupe de sommets pour permettre des poids de Goal par sommet (multipliés par l’objectif par défaut).
Setting
Stiffness
La rigidité du ressort pour le Goal. Une valeur faible crée des ressorts très faibles (attache plus flexible au Goal), une valeur élevée crée un ressort fort (une attache plus rigide au Goal).
Settings
Damping
Le coefficient de frottement pour le Goal. Des valeurs plus élevées donnent un amortissement de l’effet de ressort (fabiles secousses), et le mouvement s’arrête (s’amortit) rapidement.
Strengths
Default
Poids/force du Goal pour tous les sommets lorsqu’aucun groupe de sommets n’est assigné. Si vous utilisez un groupe de sommets, le poids d’un sommet définit son Goal.
Strengths
Min/Max
Lorsque vous utilisez un groupe de sommets, vous pouvez utiliser le Minimum et le Maximum pour affiner (limiter) les valeurs de poids. Le poids du sommet le plus bas devient le Minimum, la valeur la plus élevée devient le Maximum.
  • A “goal” is a shape that a soft body object tries to conform to. It acts like a pin on a chosen set of vertices, controlling how much of an effect soft body has on them.
  • Enabling Soft Body Goal tells Blender to use the position (or animated position) of a vertex in the simulation. Animating the vertices can be done in all the usual ways (F-Curves, armatures, parents, lattices, etc.) before the soft body simulation is applied. The “goal” is the desired end position for vertices. How a soft body tries to achieve this goal can be defined using stiffness forces and damping.

Goal Strength

  • La *Force du Goal *définit combien de mouvement d’un système d’animation est appliqué.
  • Une valeur Goal de 1.0 signifie qu’il n’y a pas de simulation de corps souple, l’objet agit comme n’importe quel objet animé régulier (c’est-à-dire que le sommet est maintenu à sa position originale). Lorsque Goal est réglé sur 0.0 (ou pas de but), le sommet est uniquement influencé par les lois physiques selon la simulation de corps souple.
  • En définissant des valeurs de Goal entre 0.0 et 1.0, vous pouvez effectuer un mélange entre l’effet de l’objet affecté uniquement par le système d’animation et l’effet de l’objet affecté uniquement par l’effet de corps souple.
  • Le Goal sert également de mémoire, pour s’assurer que les objets souples ne se déforment pas trop (pour ne pas aboutir à la forme animée non souple). En utilisant le système de poids Vertex Group, vous pouvez définir un poids Goal par sommet. Pour rendre cela plus naturel, des forces de ressort peuvent être définies pour contrôler jusqu’où les sommets peuvent se déplacer de leur position d’origine.

Détails techniques

  • Dans le monde des corps souples, les sommets des maillages sont traités comme des particules ayant une masse. Leur mouvement est déterminé par les forces qui les affectent. En plus d’autres forces, les particules individuelles peuvent interagir les unes avec les autres le long des arêtes en utilisant un modèle physique qui est très proche des amortisseurs utilisés dans les voitures. Les pièces fonctionnelles sont :
    • Un ressort essaye de maintenir les particules à une certaine distance. L’effort que le ressort fait pour cela est contrôlé par le paramètre de corps mou Rigidité.
    • Un élément d’amortissement pour calmer le mouvement. La résistance que l’élément construit contre le mouvement est contrôlée par le paramètre de corps souple Amortissement.
  • Nous allons apprendre comment utiliser le Soft Body Goal pour faire suivre une courbe à la sphère. Si vous vous souvenez du chapitre précédent, le Goal permet de fixer et d’animer un corps mou. Le Goal du corps souple est d’essayer de revenir à sa position originale, ou là où se trouve le point d’origine. C’est pourquoi, lorsqu’on active Goal, l’objet se balance simplement de haut en bas : il essaie de revenir au point d’origine.
  • Donc, ce que nous allons faire est d’activer le Goal lorsque la sphère entre dans l’objet Tube de Verre. Ensuite, la sphère suivra la courbe qui est à l’intérieur, rebondissant et frappant les murs jusqu’à ce qu’elle tombe de l’autre côté.
  • En premier, il faut trouver à quel frame la sphère entre dans le tube de verre. Ça devrait être autour du frame 430.

  • On ne peut pas animer Default de la section Strength, mais on peut animer Min et Max.
  • Déplacer la tête de lecture dans le timeline au frame 430.
  • Dans les propriétés physiques de la sphère, Activer “Goal”.
  • Ajuster les valeurs Min et Max dans la section Strength de Goal à 0 et activer le bouton keyframe pour en insérer un pour les deux valeurs (Min et Max).

  • Maintenant déplacer la tête de lecture au frame 431, et changer la valeur de Min et Max à 0.5.

  • Ne pas oublier de cliquer sur le bouton d’ajout de keyframe à droite des champs Min et Max.

  • Configurons la sphère pour qu’elle suive une courbe !

  • Dans le panneau des contraintes ajouter une contrainte de type Follow Path.

  • Dans Target, choisir l’objet “Goal Guide”, c’est une courbe déjà existante qui se promène à l’intérieur du tube de verre.

  • L’offset contrôle quand l’objet commence à suivre la courbe, dans notre cas indiquer 431.

  • Cliquer sur Animate Path.

  • En faisant Play, vous allez peut-être remarquer que la sphère est super loin à gauche!

  • Pour régler la chose, ajoutons des keyframes de positionnement pour la sphère. Essentiellement, quand on anime la sphère et qu’elle commence à suivre la courbe, son origine doit se trouver au début de la courbe.

  • Aller au Frame 1.

  • En mode vue orthogonale frontale (Numpad 1, pour éviter les déplacements selon l’Axe des Y), déplacer la sphère à l’intérieur du Cylinder 1, un peu au-dessus du Cylinder 3. Assurez-vous que la sphère soit bien à l’intérieur et n’intersecte aucun objet.

  • Au frame 1 donc, faites I pour insérer un Keyframe au frame 1.

  • Maintenant aller au Frame 429, i.e. juste avant les premiers keyframes du Goal de la sphère.

  • En mode vue orthogonale frontale toujours (Numpad 1), déplacer la sphère au début de la courbe guide et faire derechef I pour insérer un autre Keyframe.

⚠️

Pour bien le faire, cacher le Glass Cylinder pour bien voir la courbe Goal Guide et déplacer la sphère de manière à ce qu’elle coïncide avec le début du guide. vous êtes bien au frame 429 n’est-ce pas! Le cas échéant, faire I pour insérer un keyframe de positionnement de la sphère.

N’oubliez de “unhide” le Glass Cylinder en ouvrant l’oeil à gauche de l’objet dans la section Outline.

  • La sphère devrait alors, au frame 430, commencer à suivre le guide!

  • Maintenant, on veut arrête le Goal au moment où la sphère commence à sortir du tube (frame 517).

  • Aller au frame 517. Avec la sphère sélectionnée, dans les propriétés Physics, section Strength de Goal, on doit keyframé à 0.5 les valeurs Min et Max afin qu’elle restent constante depuis le frame de départ (431).

  • Cliquez donc sur les petits points blancs à droite des champs Min et Max.

  • Au frame suivant (518), mettre les valeurs de Min et Max à 0 et les keyframer derechef.

  • C’est comme si on avait désactivé le “Goal”.

  • On a terminé, cliquer, dans la section “Cache”, sur le bouton “Back All Dynamics”.

  • Faire Play!

Textures

  • Profitons-en pour utiliser EEVEE, le rendu temps-réel de Blender à la place de Cylces. En particulier, on va créer un Glass Shader en EEVEE. Je ne sais pas encore si ce sera encore nécessaire avec la venue de EEVEE-Next (Blender 4.2), ce sera encore nécessaire puisque ce dernier aura un Ray-tracer.

  • Dans les propriétés Render, choisir EEVEE à la place de Cycles.

  • Activer Raytracing

  • Activer Motion Blur.

  • Dans la section Color Management, choisir le Look Very High Contrast.

  • Sélection Cylinder 1 et aller dans le Shading Editor.

  • Faire New. Nommer le Material Glass.

  • Dans les propriétés Material, aller dans la section Settings.

  • Activer le Backface Culling (l’occlusion des faces arrière). En infographie, l’occlusion des faces arrière détermine si un polygone est dessiné à l’écran ou pas. C’est une étape dans le pipeline graphique qui teste si les points du polygone apparaissent dans le sens horaire ou anti-horaire lorsqu’ils sont projetés sur l’écran. Si l’utilisateur a spécifié que les polygones face à la caméra ont un enroulement dans le sens horaire, mais que le polygone projeté sur l’écran a un enroulement dans le sens anti-horaire, alors il a été tourné pour faire face à l’opposé de la caméra et ne sera pas dessiné.

  • Le processus rend le rendu des objets plus rapide et plus efficace en réduisant le nombre de polygones que le programme doit dessiner. Par exemple, dans une scène de rue de ville, il n’est généralement pas nécessaire de dessiner les polygones sur les côtés des bâtiments qui sont tournés loin de la caméra ; ils sont complètement occultés par les côtés qui font face à la caméra.

  • En général, il peut être supposé que l’élimination des faces arrière ne produit aucun artefact visible dans une scène rendue, à la condition que la scène ne contienne que des maillages fermés et opaques. Dans les scènes contenant des polygones transparents, les polygones orientés vers l’arrière peuvent devenir visibles à travers le processus de composition alpha et c’est ce que nous allons faire en changeant le Blend Mode (voir plus bas).

  • Ici, à gauche le Backface Culling est désactivé, à droite il est activé. Notez que ça ne donne pas les résultats escomptés dans le cas d’objets concaves, ou avec des trous comme ici un crâne. Dans le cas de Blender, comme le Show Backface est activé, l’intérieur du crâne sera montré.

  • Changer le Blend Mode pour Alpha Blend, justement pour compenser le backface culling sur les objets transparents.

  • Activer Raytrace Refraction.

  • Bon, ça commence à donner du résultat, mais on peut fire mieux!

  • Dans le Shading Editor, ajouter un Transparent BSDF (⇧ A Shader → Transparent BSDF)

  • Ajouter un Mix Shader afin de mixer les deux shaders, le Principled BSDF et le Transparent.

  • Pour contrôler où aura lieu la transparence, on va utiliser un input de type Fresnel. ⇧ A → Input → Fresnel.

  • Un noeud Fresnel éclaire les bords d’une surface tout en gardant le milieu plus sombre. Voici par exemple une sphère avec du Fresnel appliqué:

  • Dans notre cas, on veut appliquer de la transparence au milieu du cylindre tout en gardant ses bords intact, i.e. l’effet du Glass Shader. On se débarrassera du drôle d’étirement de la transparence qu’on a en ce moment.

⚠️

Si vous voulez en savoir plus sur le chouette effet Fresnel (qu’on retrouve beaucoup en photographie): https://www.dorian-iten.com/fresnel/

  • Changer l’IOR du noeud Fresnel à 1.45 (l’indice de réfraction de certains types de verres).
  • Nous avons maintenant un shader satisfaisant:
  • On peut maintenant réutiliser ce shader pour le Glass Cylinder et le Glass Tube et l’objet Box.
  • Pour ce faire, sélectionner Les trois objets puis Cylinder 1 en dernier (important!), aller dans le menu Object → Link/Transfer Data → Link Materials. Le shortcut et ⌃ L (ou ⌘ L sur Mac).
  •  Amusez-vous à changer les materials des autres objets si vous le désirez.

Tracking Caméra

  • Aller au Frame 1 et sélectionner la caméra

  • Ajouter une contrainte de type “Copy Location” à la caméra.

  • Dans le menu Target, choisir la Soft Body Sphere et désactiver Y axis ainsi que X Axis. On veut que la caméra suive seulement l’axe des Z (la hauteur) de la sphère.

  • Activer Offset. Cela permettra de ramener la caméra à sa position d’origine (avant la contrainte)

  • Par contre, ça ne fonctionne pas encore tout à fait car la caméra suit pour l’instant l’origine de la sphère et non pas sa géométrie (remember, it’s baked!).
  • On va rajouter un Vertex Group.
  • Sélectionner la sphère, aller en mode Vertex Edit Mode et créer un nouveau Vertex Group dans Object Data.
  • Sélectionner tous les sommets de la géométrie de la sphère et cliquer sur Assign dans Object Data.

  • Revenir en Object Mode.

  • Sélectionner la caméra et dans ses paramètres Constraints, choisir le nouveau Vertex Group.

  • Au frame 1, Déplacer la caméra à l’endroit désiré. La tourner également selon l’angle de vue désiré.

  • Sélectionner la sphère, aller dans Physics, et dans la section Cache, cliquer sur Delete All Bakes puis sur Bake All Dynamics.

  • Faites Play.

  • Modifier les paramètres d’output pour générer une vidéo avec un frame rate de 30 fps.

  • Faire Render Animation!

  • Avec EEVEE, les rendus sont en quasi temps réel. Mais c’est quand même 600 frames. À disons 1 seconde par frame, ça va quand même prendre 10 minutes!

Résultat

À vous de jouer

  • Ajouter un nouvel élément au parcours (par exemple en enlevant le plan à la base et en modifiant le maillage de la boîte de réception de la balle pour qu’elle puisse continuer son parcours
  • Ajouter un HDRI pour rendre le background plus intéressant
  • Jouer avec les textures et couleurs.
  • Une 2e balle?

Devoirs Aucun, vous êtes assez chargé.es comme ça!