unstable/wobbly ragdoll

unstable/wobbly ragdoll


I have a ragdoll created using powered constraints/powered chains. When the root rigidbody(hip)'s motion type is set as MOTION_KEYFRAMED, the ragdoll motion looks great, but when it is set as MOTION_DYNAMIC, the whole ragdoll becomes unstable and wobbly.

Please see this video:


How can I setup the root rigidbody non keyframed, so that it reacts to the collisions, but keep the ragdoll stable?


publicaciones de 6 / 0 nuevos
Último envío
Para obtener más información sobre las optimizaciones del compilador, consulte el aviso sobre la optimización.

Hi moca:

Ragdoll constraints keep trying to solve the error between the current pose and the correct animation pose. Sometimes the error will me too big to be solved. For example, if you set all rigid bodies MOTION_DYNAMIC, the system will accumulate all errors from head part to leg part as the error for leg, which will be huge. If you set the hip to MOTION_KEYFRAMED, then the error on leg will be just base on itself because there is no error on the hip which they connected to.

I suggest you can refer to our demo: Animation\Api\Ragdoll\BlendTest\"A 6 Keyframe"
The demo is using hkaKeyFrameHierarchyUtility to drive the pose back to the animation pose. Meanwhile, all bodies are dynamic.

But I really recommend you can have a look our demo: Animation\Api\Ragdoll\RagdollScaling , and try to use hkaRagdollRigidBodyController. This controller is very useful to drive a ragdoll to a given animation pose. It might be a bit unnatual on the simulation side, but at least the whole body is dynamic.

It is a trade-off thing. If you want your ragdoll have more physical represent, for example, drive it to the death pose, you can use hkaRagdollPoweredConstraintController. If you want to match your animation pose as much as possible, like in the video you show me, hkaRagdollRigidBodyController can be a better choice.

By the way, the demo is pretty cool.



Joe Developer Support Engineer Havok www.havok.com

Thanks for the reply, Joe.

I was hoping to use hkaRagdollPoweredChainController because we have knock down motions, but it sounds like the root rigid body of powered chain ragdoll must be keyframed to remain stable?

If the mass of the root rigid body is made 100 times heavier, it becomes unaffected by the limbs motions and therefore ragdoll becomes stable, but I'd like to avoid this solution.

Another option is to create two ragdolls for each boxer, hkaRagdollRigidBodyController one for standing motions and hkaRagdollPoweredChainController one for knock down motions.

Hey moca:

If you want to keep using hkaRagdollPoweredChainController, also I saw you can fix the problem by setting the mass 100 times heavier, I think you can try to use our "hkpCollisionMassChangerUtil". Please refer to "Havok Physics\Interacting with a Simulation\REsponse Modifiers\Contact point modifier utilities\Mass Changer Utility", and also the demo "Physics->Api->Dynamics->RigidBodier->Modifiers->MassChanger"

You can set a big mass for the rip to make the whole ragdoll stable, and add a mass modifier on it to set a smaller "fake" mass value just for collision test.


Joe Developer Support Engineer Havok www.havok.com


I will use hkaRagdollRigidBodyController for nomal motions and switch to hkaRagdollPoweredChainController when the character dies. What is the correct way to disable the ragdolls while they are not in use so that they won't collide with anything in physics world and how do I enable them back?


Hi moca--

You can use collision filtering to control collisions between different kinds of objects in the physics world. In the physics documentation, look under section "2.3.1 Collision Filtering," and assuming you have made no changes to the default collision filter, I suggest you use layers to enable collisions between ragdolls and the rest of the physics world. See section " Default Group Filter Implementation" for more info, and let me know if you have any further questions. Thanks!


Deje un comentario

Por favor inicie sesión para agregar un comentario. ¿No es socio? Únase ya