From BlenderWiki

Jump to: navigation, search
Blender3D FreeTip.gif
IMPORTANT! Do not update this page!
We have moved the Blender User Manual to a new location. Please do not update this page, as it will be locked soon.

Traduction effectuée d’après cette révision de la version anglaise.

Il y a deux types différents de collision que vous pouvez utiliser : collision entre objets différents, et collision interne (ou auto-collision). Il est important de bien comprendre une chose dès le départ : les cibles principales des calculs de collision sont les vertices d’un corps souple. Donc si vous avez trop peu de vertices, il y aura trop peu de collisions. Vous pouvez cependant utiliser arêtes et faces pour améliorer les calculs de collision.

Collisions avec d’autres objets

Image 1 : Réglages pour un objet “obstacle”.

Pour qu’un softbody puisse entrer en collision avec un autre objet, il y a quelques prérequis :

  1. Les deux objets doivent partager un calque commun, même si celui-ci n’est pas forcément rendu.
  2. L’objet “obstacle” doit être un objet mesh.
  3. Vous devez activer l’option Collision du panneau Collision, dans le sous-contexte Physics (Image 1), pour l’objet obstacle. Celui-ci peut également être un objet softbody.
  4. Si vous utilisez des modificateurs comme Array ou Mirror, vous devez activer EV.M.Stack pour être assuré que les calculs de collision se basent sur l’objet modifié. L’ordre des modificateurs n’a aucune importance ici.


Exemples motivants

Image 2a : Un cube softbody entrant en collision avec un plan.
Image 2b : Un plan softbody entrant en collision avec un cube – aucune interaction.
Image 2c : Collision avec CFace activé.

Un cube heurtant un plan fonctionne plutôt bien (Image 2a), mais un plan tombe à travers un cube avec lequel il serait supposé entrer en collision (Image 2b). Pourquoi cela ? Parce que la méthode de calcul par défaut ne vérifie que si les quatre vertices du plan entrent en collision avec le cube, pendant que le plan est propulsé vers le bas par la gravité. Vous pouvez activer CFace pour permettre plutôt la collision entre la face du plan et l’objet (Image 2c), mais ce type de calculs prend beaucoup plus de temps.

Voyons de plus près les calculs de collision, afin que vous puissiez vous faire une idée de comment vous pourriez les optimiser.

Calculer les collisions

Image 3a : Visualisation de la collision d’un vertex softbody avec un plan.
Image 3b : Six vertices softbody avec différentes vitesses.
Fichier .blend

La simulation de corps souple est par défaut basée sur les vertices. Si les vertices du softbody n’entrent pas en collision avec l’objet obstacle, il n’y aura pas d’interaction entre les deux objets.

Dans (Image 3a), vous pouvez voir un vertex heurtant un plan. Si un vertex pénètre la zone entre Outer et Inner, il est repoussé par une force dans la direction de la normale de la face. La position à laquelle finit un vertex dépend alors des forces qui agissent sur lui. Dans l’exemple, la gravité et la force de répulsion s’équilibrent. La vitesse avec laquelle le vertex est “repoussé” de la zone de collision est influencée par le paramètre Choke (Image 4).

Voyons maintenant ce qui se passe si nous rendons les vertices plus lourds, et les laissons tomber à une vitesse plus élevée. Dans (Image 3b), vous pouvez voir des vertices se déplaçant à diverses vitesses. Les deux les plus à droite (5 et 6) vont tellement vite qu’ils passent à travers la zone de collision (à cause de la précision par défaut du solveur – ce que nous pourrons régler plus tard). Vous noterez que le quatrième vertex va également assez vite, et à cause de son poids assez important, il atteint la zone interne (inner). Les trois premiers vertices ont une collision correcte.

Image 3d : Les arêtes (CEdge) et faces (CFace) peuvent aussi être utilisées pour les calculs de collision.

Vous pouvez régler votre collision pour que les arêtes et même les faces soient utilisées dans les calculs de collision (Image 3d). Les collision sont alors calculées différemment. Le solveur vérifie si une arête ou une face “coupe” l’objet obstacle – et les zones de collision ne sont plus utilisées.

Bonnes collisions

Image 4 : Paramètres pour les calculs de corps souple.

Si la collision que vous avez mise en place ne se comporte pas correctement, vous pouvez essayer les éléments suivants :

Blender3D FreeTip.gif
La meilleure façon
Ajoutez des Loop Cuts à votre objet softbody, dans les zones stratégiques que vous savez les plus probablement impliquées dans une collision.


  • L’objet corps souple doit avoir plus de subdivisions que l’objet obstacle.
  • Vérifiez la direction des normales des faces.
  • Si l’objet obstacle a des pointes, elles pourraient pénétrer le corps souple.
  • La résolution du solveur doit correspondre à la vitesse à laquelle les vertices softbody se déplacent. Diminuez le paramètre Error Lim, et augmentez précautionneusement Min S.
  • Outer et Inner devraient être suffisamment grands, mais les zones des faces opposées ne devraient pas se recouvrir, ou vous aurez des forces de répulsion dans des directions opposées.
  • Si vous utilisez des forces puissantes, vous devriez utiliser de grandes zones.
  • Réglez Choke sur une valeur suffisamment élevée (au maximum si nécessaire), si vous avez des difficultés avec les vertices repoussés.
  • Les collisions de faces sont difficiles à contrôler et prennent beaucoup de temps à calculer. Évitez de les utiliser.

Il vaut souvent mieux créer un mesh simplifié à utiliser comme objet obstacle – mais cela peut être difficile si vous utilisez un mesh animé.

Auto-collision

Eh bien, cela fonctionne plutôt bien si vous vous contentez de l’activer (Self Collision). Voyez la page de référence pour une explication détaillée des paramètres.