Home Website Youtube GitHub

Joints flipping/ not following controls

When I build my arms, the joints do not follow the controls when animating.

I’ve used the “Game Biped Template” and the several of the arm templates “arm_2jnt_01, 02, 03, 04” and I am getting this same result.

I’ve built rigs before and was not having this issue.

The flipping seems random(?) and looks like it is happening on the joints from the elbow down.

Has anyone seen this? Any ideas what could be the cause?

Also, when I move a controller and then “undo” the transform, the wrist does not align with the controller either

What version of mGear?

If it’s random, it might be a cycle. Do you get the same result if you just draw a simple arm in a fresh scene?

4.0.9

If I draw an arm just by itself, it does not seem to happen.

It looks like it happens when I Dupl. Sym. (?)

When i create a template I delete the right arm and leg, make my adjustments to the left arm and leg and then Dupl. Sym. the limbs. The leg seems to work fine but the arm gets the flipping issue in the elbow/ wrist

Check the parentConstraint on the arm_R0_ikRot_cns node.

It is set to “Average” by default. Set it to “Shortest” or “No Flip” (I prefer “Shortest”) and it should fix it.

This is something I fix in my post scripts, so I’ve never noticed it. Any parentConstraint with multiple targets should be set to Shortest. Average will have unpredictable results, depending on the orientation. (Sometimes Shortest might not be right either, but 99% of the time it works for me.)

import pymel.core as pm

for each in pm.ls(type='parentConstraint'):
    # If it has more than one target, then set the interpType to 2, Shortest.
    if len(each.getWeightAliasList()) > 1:
        each.interpType.set(2)    

Hmmm… no go.

Here you can see that when I “undo” the rotation the wrist breaks.

I am trying a fresh rig to see if I still get the issues

  • Check your script editor for cycle warnings
  • Try unchecking GPU override
  • Try turning to DG evaluation mode. (Just temporary as a test. If it fixes it, you know you might have a parallel evaluation problem that might be able to be fixed.)

All no go :frowning:

Tried Parallel, Serial, and DG with and without GPU override

Script Editor isn’t throwing up any errors. The flipping is happening on controls I am not animating. When I undo the rotation on the forearm, it shows the undo action but the wrist flips

Could this be related to the other issue I am having. When I build my arms, the controls are not Zeroed out.

No, it’s likely completely unrelated unless you have errors you aren’t noticing, and the rig isn’t finishing building or something.

For the flipping, make sure you don’t have cycle check turned off.

Run this MEL to make sure it is warning you if you have a cycle dependency:

cycleCheck -e on;

Ah ha!
The cycle check was off!

I don’t know what this means though … :frowning:

// Warning: Cycle on ‘arm_R0_ik_cns_parentConstraint1.target[4].targetTranslate’ may not evaluate as expected. (Use ‘cycleCheck -e off’ to disable this warning.) //
// Warning: Cycle on ‘mgear_ikfk2Bone2.outEff’ may not evaluate as expected. (Use ‘cycleCheck -e off’ to disable this warning.) //
// Warning: Cycle on ‘decomposeMatrix59.outputTranslate’ may not evaluate as expected. (Use ‘cycleCheck -e off’ to disable this warning.) //
// Warning: Cycle on ‘arm_R0_ik_ref.worldMatrix[0]’ may not evaluate as expected. (Use ‘cycleCheck -e off’ to disable this warning.) //
// Warning: Cycle on ‘mgear_ikfk2Bone2.outEff’ may not evaluate as expected. (Use ‘cycleCheck -e off’ to disable this warning.) //
// Warning: Cycle on ‘arm_R0_eff_loc.translate’ may not evaluate as expected. (Use ‘cycleCheck -e off’ to disable this warning.) //
// Warning: Cycle on ‘arm_R0_eff_loc.rotate’ may not evaluate as expected. (Use ‘cycleCheck -e off’ to disable this warning.) //
// Warning: Cycle on ‘decomposeMatrix63.outputScale’ may not evaluate as expected. (Use ‘cycleCheck -e off’ to disable this warning.) //
// Warning: Cycle on ‘arm_R0_eff_loc.translate’ may not evaluate as expected. (Use ‘cycleCheck -e off’ to disable this warning.) //
// Warning: Cycle on ‘arm_R0_eff_loc.rotate’ may not evaluate as expected. (Use ‘cycleCheck -e off’ to disable this warning.) //
// Warning: Cycle on ‘decomposeMatrix62.outputRotate’ may not evaluate as expected. (Use ‘cycleCheck -e off’ to disable this warning.) //
// Warning: Cycle on ‘decomposeMatrix59.outputTranslate’ may not evaluate as expected. (Use ‘cycleCheck -e off’ to disable this warning.) //
// Warning: Cycle on ‘arm_R0_eff_loc.translate’ may not evaluate as expected. (Use ‘cycleCheck -e off’ to disable this warning.) //
// Warning: Cycle on ‘arm_R0_eff_loc.rotate’ may not evaluate as expected. (Use ‘cycleCheck -e off’ to disable this warning.) //

It means you have a cycle dependency. Something is driving something that is also driving that thing.

You’ll have to check all your space switches and make sure they aren’t crossing each other.

If you want to upload your guide, I might have time to take a look.

AHA!

In the IK reference Array I had included the components from the opposite hand. (Added arm_R0_eff to the Left hand) So that I could have the opposite hand drive the IK when needed.

This was causing the errors.

I added a new single bone chain a a child of arm_R0_eff and used that as the driver and it works as intended.

Thank you so much!!!

Oh wait, that didn’t work either.

Is there a way to have the IK of one hand follow a joint on the other hand?

1 Like

Thank you again!
:heart: