Home Website Youtube GitHub

Setting for constraining sword to hand, as well as hand to sword

Hi there,
I created a rig of a character with 2 sword directly in the same rig setup.
In the IK refs of the swords I have the following


I want to be able to have the sword relative to the global and local ctls, as well as hips (spine_C0_root), back (spine_C0_spineTop), on a movable ctl (sword_01_L_socket_C0_root) and on the hands of the character using the ik_hand_gun ctls.
It works as expected.

The thing is that, while animating, I noticed that I also needed a way to constraint the hands of the character to these swords. I then thought of adding my swords to the IK reference Array like so

But at the build of the rig, I have the following warnings, preventing me to have the behavior I want.

Connect : sword_01_R_C0 (control_01)
# Warning: Cycle on 'sword_01_R_C0_ik_cns_parentConstraint1.target[5].targetParentMatrix' may             not evaluate as expected.  (Use 'cycleCheck -e off' to disable this warning.)
# Warning: Cycle on 'sword_01_R_C0_ctl.parentMatrix[0]' may not evaluate as expected.  (Use 'cycleCheck -e off' to disable this warning.)
# Warning: Cycle on 'sword_01_R_C0_ctl.parentMatrix[0]' may not evaluate as expected.  (Use 'cycleCheck -e off' to disable this warning.)
# Warning: Cycle on 'sword_01_R_C0_ik_cns_parentConstraint1.constraintTranslateX' may not evaluate as expected.  (Use 'cycleCheck -e off' to disable this warning.)
# Warning: Cycle on 'ik_hand_gun_R0_ctl.parentMatrix[0]' may not evaluate as expected.  (Use 'cycleCheck -e off' to disable this warning.)
# Warning: Cycle on 'sword_01_R_C0_ctl.parentMatrix[0]' may not evaluate as expected.  (Use 'cycleCheck -e off' to disable this warning.)
# Warning: Cycle on 'sword_01_R_C0_ctl.parentMatrix[0]' may not evaluate as expected.  (Use 'cycleCheck -e off' to disable this warning.)
# Warning: Cycle on 'sword_01_R_C0_ctl.parentMatrix[0]' may not evaluate as expected.  (Use 'cycleCheck -e off' to disable this warning.)
# Warning: Cycle on 'sword_01_R_C0_ik_cns_parentConstraint1.target[5].targetParentMatrix' may not evaluate as expected.  (Use 'cycleCheck -e off' to disable this warning.)
# Warning: Cycle on 'ik_hand_gun_L0_ctl.parentMatrix[0]' may not evaluate as expected.  (Use 'cycleCheck -e off' to disable this warning.)
# Warning: Cycle on 'sword_01_R_C0_ik_cns_parentConstraint1.target[5].targetParentMatrix' may not evaluate as expected.  (Use 'cycleCheck -e off' to disable this warning.)
# Warning: Cycle on 'sword_01_R_C0_ctl.parentMatrix[0]' may not evaluate as expected.  (Use 'cycleCheck -e off' to disable this warning.)
# Warning: Cycle on 'sword_01_R_C0_ctl.parentMatrix[0]' may not evaluate as expected.  (Use 'cycleCheck -e off' to disable this warning.)
Connect : sword_01_R_tipLocator_C0 (control_01)
# Warning: Cycle on 'sword_01_R_C0_ik_cns_parentConstraint1.target[5].targetParentMatrix' may not evaluate as expected.  (Use 'cycleCheck -e off' to disable this warning.)
# Warning: Cycle on 'sword_01_R_C0_ctl.parentMatrix[0]' may not evaluate as expected.  (Use 'cycleCheck -e off' to disable this warning.)
# Warning: Cycle on 'sword_01_R_C0_ctl.parentMatrix[0]' may not evaluate as expected.  (Use 'cycleCheck -e off' to disable this warning.)
Connect : sword_01_L_UI_C0 (EPIC_control_01)
Connect : sword_01_L_C0 (control_01)
# Warning: Cycle on 'sword_01_R_C0_ctl.parentMatrix[0]' may not evaluate as expected.  (Use 'cycleCheck -e off' to disable this warning.)
# Warning: Cycle on 'sword_01_L_C0_ik_cns_parentConstraint1.target[5].targetParentMatrix' may not evaluate as expected.  (Use 'cycleCheck -e off' to disable this warning.)
# Warning: Cycle on 'ik_hand_gun_R0_ctl.parentMatrix[0]' may not evaluate as expected.  (Use 'cycleCheck -e off' to disable this warning.)
# Warning: Cycle on 'sword_01_L_C0_ik_cns_parentConstraint1.constraintTranslateX' may not evaluate as expected.  (Use 'cycleCheck -e off' to disable this warning.)
# Warning: Cycle on 'sword_01_R_C0_ik_cns_parentConstraint1.target[5].targetParentMatrix' may not evaluate as expected.  (Use 'cycleCheck -e off' to disable this warning.)
# Warning: Cycle on 'ik_hand_gun_L0_ctl.parentMatrix[0]' may not evaluate as expected.  (Use 'cycleCheck -e off' to disable this warning.)
# Warning: Cycle on 'sword_01_R_C0_ctl.parentMatrix[0]' may not evaluate as expected.  (Use 'cycleCheck -e off' to disable this warning.)
# Warning: Cycle on 'ik_hand_gun_L0_ctl.parentMatrix[0]' may not evaluate as expected.  (Use 'cycleCheck -e off' to disable this warning.)
# Warning: Cycle on 'ik_hand_gun_R0_ctl.parentMatrix[0]' may not evaluate as expected.  (Use 'cycleCheck -e off' to disable this warning.)
# Warning: Cycle on 'sword_01_R_C0_ik_cns_parentConstraint1.target[5].targetParentMatrix' may not evaluate as expected.  (Use 'cycleCheck -e off' to disable this warning.)
# Warning: Cycle on 'ik_hand_gun_L0_ctl.parentMatrix[0]' may not evaluate as expected.  (Use 'cycleCheck -e off' to disable this warning.)
# Warning: Cycle on 'ik_hand_gun_R0_ctl.parentMatrix[0]' may not evaluate as expected.  (Use 'cycleCheck -e off' to disable this warning.)
# Warning: Cycle on 'sword_01_R_C0_ctl.parentMatrix[0]' may not evaluate as expected.  (Use 'cycleCheck -e off' to disable this warning.)
# Warning: Cycle on 'ik_hand_gun_L0_ctl.parentMatrix[0]' may not evaluate as expected.  (Use 'cycleCheck -e off' to disable this warning.)
# Warning: Cycle on 'ik_hand_gun_R0_ctl.parentMatrix[0]' may not evaluate as expected.  (Use 'cycleCheck -e off' to disable this warning.)
# Warning: Cycle on 'sword_01_R_C0_ctl.parentMatrix[0]' may not evaluate as expected.  (Use 'cycleCheck -e off' to disable this warning.)
# Warning: Cycle on 'sword_01_R_C0_ctl.parentMatrix[0]' may not evaluate as expected.  (Use 'cycleCheck -e off' to disable this warning.)
# Warning: Cycle on 'sword_01_L_C0_ik_cns_parentConstraint1.target[5].targetParentMatrix' may not evaluate as expected.  (Use 'cycleCheck -e off' to disable this warning.)
# Warning: Cycle on 'ik_hand_gun_R0_ctl.parentMatrix[0]' may not evaluate as expected.  (Use 'cycleCheck -e off' to disable this warning.)
# Warning: Cycle on 'sword_01_R_C0_ik_cns_parentConstraint1.target[5].targetParentMatrix' may not evaluate as expected.  (Use 'cycleCheck -e off' to disable this warning.)
# Warning: Cycle on 'ik_hand_gun_L0_ctl.parentMatrix[0]' may not evaluate as expected.  (Use 'cycleCheck -e off' to disable this warning.)
Connect : sword_01_L_tipLocator_C0 (control_01)
# Warning: Cycle on 'sword_01_R_C0_ctl.parentMatrix[0]' may not evaluate as expected.  (Use 'cycleCheck -e off' to disable this warning.)
# Warning: Cycle on 'sword_01_L_C0_ik_cns_parentConstraint1.target[5].targetParentMatrix' may not evaluate as expected.  (Use 'cycleCheck -e off' to disable this warning.)
# Warning: Cycle on 'ik_hand_gun_R0_ctl.parentMatrix[0]' may not evaluate as expected.  (Use 'cycleCheck -e off' to disable this warning.)
# Warning: Cycle on 'sword_01_R_C0_ik_cns_parentConstraint1.target[5].targetParentMatrix' may not evaluate as expected.  (Use 'cycleCheck -e off' to disable this warning.)
# Warning: Cycle on 'ik_hand_gun_L0_ctl.parentMatrix[0]' may not evaluate as expected.  (Use 'cycleCheck -e off' to disable this warning.)
Connect : sword_01_L_socket_C0 (control_01)
Joints : global_C0 (control_01)
Joints : local_C0 (control_01)
# The parent components for: local_C0 don't have joint List in any of them use the root off guide.
Joints : body_C0 (control_01)
# The parent components for: body_C0 don't have joint List in any of them use the root off guide.
# Warning: Name: 0 starts with number and is not a valid Maya name. Component name prefix will be added
Joints : spine_C0 (EPIC_spine_01)
Joints : clavicle_L0 (EPIC_shoulder_01)
Joints : arm_L0 (EPIC_mannequin_arm_01)
# Warning: Cycle on 'sword_01_R_C0_ctl.parentMatrix[0]' may not evaluate as expected.  (Use 'cycleCheck -e off' to disable this warning.)
# Warning: Cycle on 'arm_L0_ik_ref.worldMatrix[0]' may not evaluate as expected.  (Use 'cycleCheck -e off' to disable this warning.)
# Warning: Cycle on 'arm_L0_ik_cns_parentConstraint1.target[6].targetParentMatrix' may not evaluate as expected.  (Use 'cycleCheck -e off' to disable this warning.)
# Warning: Cycle on 'sword_01_L_C0_ctl.parentMatrix[0]' may not evaluate as expected.  (Use 'cycleCheck -e off' to disable this warning.)
# Warning: Cycle on 'sword_01_R_C0_ctl.parentMatrix[0]' may not evaluate as expected.  (Use 'cycleCheck -e off' to disable this warning.)
# Warning: Cycle on 'sword_01_L_C0_ctl.parentMatrix[0]' may not evaluate as expected.  (Use 'cycleCheck -e off' to disable this warning.)
# Warning: Cycle on 'ik_hand_gun_R0_ctl.parentMatrix[0]' may not evaluate as expected.  (Use 'cycleCheck -e off' to disable this warning.)
# Warning: Cycle on 'sword_01_R_C0_ik_cns_parentConstraint1.target[5].targetParentMatrix' may not evaluate as expected.  (Use 'cycleCheck -e off' to disable this warning.)

What would be your approach to be able to have either the sword to follow a hand, or the hand to follow the sword ?

I’m OK with post scripts if needed but I really want this “feature” to be integrated in the rig, and not having to deal with other manual constraints while animating.

Thanks in advance.

Regards,
SĂ©bastien

I answered something similar once, here: Adding Weapons to the Rig - #2 by chrislesage

  • I don’t know if the biped templates have a hand control. I always have an extra hand control underneath the arm limb component. So there is a consistent hand to use in both IK or FK.
  • Weapon follows the hand (or an extra control_01 that follows the hand.)
  • Opposite arm IK can follow the weapon.

And another thread where I attempted to describe and illustrate what I do. A bit difficult in words. Space switching (for Ik hands) - #11 by chrislesage

1 Like