1
$\begingroup$

My goal:

Having the animation of a dog character affect a pillow it is laying on.

I enabled soft body for the pillow. Disabled gravity and Soft Body goal

I enabled collison with default settings for the dog.

And when i press play the Pillow gets sucked towards the dog.

Scale and Position for everything is applied and i checked the normals.

Frame 1

Frame 2

$\endgroup$
  • 1
    $\begingroup$ I can't replicate that behaviour - do you have any forcefields applied to your mesh or anything else that might cause strange effects? Could you upload your Blend file to blend-exchange.giantcowfilms.com and edit your question to include a link to it? $\endgroup$ – Rich Sedman Apr 5 at 22:38
  • 1
    $\begingroup$ Thanks for the answer:) Isolated it and copied it into it's own .blend. Still happening. Updated the Question. $\endgroup$ – Jens Clar Apr 9 at 3:55
1
$\begingroup$

The problem is with the collision bounds - where the soft-body collision 'Inner' setting was too high. This can result in the 'inner collision bound' being outside the mesh, resulting it it effectively 'dragging' soft body vertices into the mesh, from the opposite side. Generally, you should ensure that 'Inner' is set to no more than half the minimum thickness of the mesh.

To explain this a little, the Collision settings include an 'Inner' and 'Outer' setting. For any soft body vertex in the vicinity of that surface, Blender considers whether it is close enough to the 'outside' of that face (ie, within the 'Outer' distance to the surface) and, if so, it will repel that vertex. The same is true with the 'Inner' surface, where if a vertex is close to the inner side of the surface within the 'Inner' distance then it is considered 'within' that surface and repelled 'out'. It is generally beneficial to have these Inner and Outer bands as large as is practical so as to ensure fast moving soft body vertices are 'caught' and bounce off that surface.

When the 'Inner' is set close to the overall thickness of the mesh you can get a situation where if a vertex passes slightly below the surface, instead of being gently repelled (due to being slightly below the surface) it is actually pulled into the mesh as it is also within the opposite side of the mesh's inner collision bounds. As it is effectively further below the opposite side than it is below the 'nearer' side of the mesh, the opposite face has more of an effect and overcomes the 'solidity' of the mesh and pulls that vertex through. By keeping the 'Inner' bound below half the width of any section of the mesh you can ensure those 'inner' regions never overlap and avoid that problem.

In your case, however, the Inner is far greater than the thickness of your mesh - it is set to 0.2 (20cm) which means for the thin sections (eg, legs) the collision bounds extend from the opposite faces far outside the mesh - it is this which is 'grabbing' your soft body blanket and drawing it towards the dog.

The solution is to simply reduce the Inner collision setting - in this case I reduced it to 0.002 (2mm) and produced the following result :

dog on blanket


Note, to achieve this I needed to make a small number of changes to your Blend file - mostly due to the very high number of vertices of your meshes (for soft body simulations, the number of vertices significantly affects the simultion complexity). However, some simple changes drastically reduced the vertex count, vastly speeding up to simulation - I'll share those changes here.

Firstly, for simulations you should Apply Scale to your simulated meshes - select the blanket, press Ctrl+A and select 'Scale'.

Secondly, the geometry of the blanket includes a great many unnecessary faces around the seams. You could re-model the blanket with less faces around the edges, but I got reasonable results by selecting all vertices in Edit mode and running Remove Doubles with a setting of 0.01 (must have Applied Scale for this first - otherwise you need a much smaller value as your existing scale is quite small). This removed the unnecessary goemetry without affecting the overall shape of the mesh. Note that the soft body simulation works best with evenly spaced vertices anyway - so this step won't hurt the simulation.

Finally, for each 'collision' between the soft body and your mesh, Blender needs to consider each face and how it affects that vertex. The more faces you have in your mesh, the slower the simulation will run. If your example file, this was particularly bad due to each point close to the mesh being within the 'inner' collision zone of a great many faces - which is why your simulation took a very long time to simulate only 4 frames. To address this I repeated the Remove Doubles step on your dog mesh - with a threshold of 0.02. Note that this will lose some of your modelling - but for my simulation to produce the above animation that wasn't a concern. You could create a duplicate of your mesh and reduce the vertex count on the copy and use that copy for collision purposes only, using the 'full' mesh for the final render - if you don't want to lose detail from your model (so the soft body simulation collides with the simplified mesh - much more efficient).

I increased the Soft body Friction to damp down any motion (since there’s no gravity - could ‘pin’ the soft body in place instead), 'freed' the bake, moved the dog closer to the mat, and re-ran the simulation.

$\endgroup$

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.