driveStiffness vs limits

Hello, I am working on a character that I unfortunately cant share but I am observing that my limits on the knees are pretty much ignored when using driveStiffness above a super small value.
Setting driveStiffness = 0 works as expected: the character collapses while respecting the limits.
After setting driveStiffness = 0.01, the character still collapses in a very similar manner, but that the limits on some markers are not respected anymore. I tried with and without selfCollide but both yield the same result. (driveStiffness = 0.1 is too high and the character stands still).
I also disabled gravity and the ground to see if any other forces are acting on the character, that is not the case though.
(Regarding my question from yesterday, I also ensured the shapes overlapping the joints)
Further tests/observations:

  • if I increse the limitStiffness = 10,000,000 the knee doesnt bend the wrong way, but it also bend the right way either and just stays stiff. That value also looks high enough to cause issues somewhere else^^
  • driveStiffness <= 0.002, the limit seems to be respected but there is essentially 0 influence coming from the animation anymore.
  • my character is not yet animated

Can I use driveStiffness and limits at the same time or are limits only to be used for full ragdolls?

Thank you!

Hi Dominik,

Yes, these are independent.

I think you’ll have to demonstrate what you’re seeing on this one. Can you put together a new scene with 3-4 boxes connected together, with both stiffnesses, that illustrate the problem?

Ps. for anyone wondering, driveStiffness is the “long name” of Pose Stiffness

Best,
Marcus

Hi @marcus,

Hah! My attribute names are set to long by default. Was already wondering why the attributes in the streams were different :smiley:

I was able to reproduce my problem on a smaller scale though the values to resolve it now seem much more reasonable (limitStiffness = 10 or driveStiffness < 0.025). I am still a little confused as to why setting driveStiffness >= 0.025 makes my makers go the opposite direction of where the limits should allow it while everything below 0.025 bends into the correct direction. around 0.025 are very interesting values as it starts to bend into the correct direction, but then it goes back to where the limits should prevent it from going…
I attached the demo scene. Playing with the scene scale seems to resolve it but that changes the entire feel of the simulation as well.

The marker groups are suffixed with their driveStiffness values.

Thank you,
Dominik

limitError.003.zip (12.4 KB)

Here at Ragdoll Corp., we love video samples. :blush:

Having a look now.

1 Like

Ok, it’s an issue of these limits not being strong enough to carry that heavy upper-body. They are tuned for a regular-sized human characters to remain semi-soft - like soft tissue - and to not look too robotic. As soon as a limb goes outside of its limit, there’s a spring created to try and pull it back. If that spring is too strong, it looks less like a human limit and more like a mechanical limit. It can be a bit of a balancing act finding a value whereby they remain soft but not too soft.

It’s possible these defaults need to be on the high-end rather than low-end, such that you instead find them too stiff and need to soften them. At the moment, it’s quite frequent that they are found to be too soft instead.

Here’s two alternative solutions you can try.

1. Increase Limit Stiffness Individually

2. Increase Limit Stiffness Globally

These will have the same effect, except one affects every limit in the solver.

2 Likes

That did the trick! Thank you for looking into that so quickly!
Next time there is something to show/debug, expect a video sample :smiley: :smiley:

Thanks again,
Dominik

1 Like