1
$\begingroup$

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?

$\endgroup$
1
$\begingroup$

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).

$\endgroup$
  • 1
    $\begingroup$ Thank you for your great answer. It's disapointing that what I'm trying to do seems impossible for now. Will have to make all objects have the same soft body effects I guess! $\endgroup$ – Ruben Sep 22 '20 at 18:16
  • 1
    $\begingroup$ Glad to be able to help. The interface between all of the simulations (rigid, soft, particles) is sadly lacking - and something I’ve had an interest in for quite some time. It would be great if there was some means of triggering an effect or recoil force based on the collision. $\endgroup$ – Rich Sedman Sep 23 '20 at 6:17

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.