TransWikia.com

Unexpected behaviour on soft body collisions

Blender Asked on February 12, 2021

I’m trying to get two soft bodies to collide in a zero gravity environment. The way I’m trying to do this is by having soft body one and two close to eachother, and having a third rigid body collide with the first soft body, so that it moves into the second.

The first part works well. Rigid body one moves into soft body one, bouncing it off and giving it some speed. But when soft body one collides with soft body two, it seems like the forces aren’t equally distributed. Soft body two doesn’t move, or barely moves, while soft body one bounces off soft body two hard.

Both soft bodies have the exact same settings, so I expected the forces to be about equally distributed after collision. What I expected was that soft body two would also bounce away with a little speed.

Just as a check I tested the same objects bouncing off eachother with gravity on. The first soft body would fall until it hit a plane, and the second soft body would fall until it hit the first soft body. This seems to work as expected.

Anybody have some insight?

One Answer

The problem is not with the soft body simulation but it with the collision between the two - as the collision is only effectively 'one way'.

Consider the following simulation where the Cube is animated and the two spheres are separate soft body simulations (ie, where each object is a separate mesh, each with its own Soft Body modifier).

bad collision

The Collision modifier on each of the objects tells Blender how the soft body simulation should interact with that surface - but it does not tell that surface how to interact with the soft body. This means when the cube collides with the soft body, the cube is not actually aware of the soft body but the soft body finds itself squashed against the approaching cube. This does provide a seemingly correct collision between the cube and the first sphere.

However, when the first sphere then moves across to the second sphere, from the first sphere's point of view it is colliding with a static surface - so it bounces off. From the point of view of the second sphere, however, it barely notices the presence of the first sphere (even though that first sphere also has collision enabled) since at any point in time, it is never any closer to the first sphere's surface than that surface came to it - and most likely bounced off that surface. So the second sphere does not react appropriately as it is effectively a completely separate simulation, seeing the first sphere as a non-moving surface that is close but never 'too close' to it. This results in the one-sided interaction where only the moving object seems to react properly.

The solution (providing you want the same soft body settings for all interactions) is to join (Shift+J) the two soft body objects together so that there is only a single soft body simulation in the scene. This means that the two soft bodies can interact and react with each other (since they are part of the same simulation) - instead of seeing each other as a stationary surface. This produces a much more realistic interaction :

good collision

Note that the above solution only works where it is acceptable for both bodies to have the same Soft Body settings - it is not possible to give each their own distinct soft body settings (for this we would either need to be able to properly link simulations (not possible with the Collision modifier at present) or we would need to be able to set different soft body properties for different parts of the mesh - perhaps by way of vertex weights).

Answered by Rich Sedman on February 12, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP