from sys import stderr from maya import cmds, mel def both_guis_loaded(): return gui_loaded() and analog_gui_loaded() def gui_loaded(): return cmds_exists("CTRL_expressions") def analog_gui_loaded(): return cmds_exists("GRP_C_eyesAim") def run_after_assemble(head_group, head_rig_group, params): if analog_gui_loaded(): adjust_aim_control() if gui_loaded(): connect_expressions() if analog_gui_loaded(): eyes_setup() clean_up(head_group, head_rig_group) if gui_loaded(): connect_neck_correctives() if both_guis_loaded(): connect_follow_head() print("Rig assemble finished") def find_by_name_and_group(name, group): duplicate_names = cmds.ls(name) if len(duplicate_names) == 1: return name for name in duplicate_names: if group in name: return name # **************************************************************************************************** def adjust_aim_control(): cmds.parent("GRP_convergenceGUI", "CTRL_C_eyesAim") cmds.group(n='aim_grp', w=True, em=True) cmds.parent('GRP_C_eyesAim', 'aim_grp') cmds.parent('LOC_C_eyeDriver', 'aim_grp') cmds.xform("aim_grp", ro=[90, 0, 0], relative=False) cmds.parent('GRP_C_eyesAim', w=True) cmds.parent('LOC_C_eyeDriver', w=True) cmds.delete('aim_grp') """ This method would properly position aim controls based on the position of eye joints for specific characters. """ if not ( cmds_exists(find_by_name_and_group("FACIAL_C_FacialRoot", "head_grp")) and cmds_exists(find_by_name_and_group("FACIAL_L_Eye", "head_grp")) and cmds_exists(find_by_name_and_group("FACIAL_R_Eye", "head_grp")) ): return facial_root_jnt = cmds_xform( find_by_name_and_group("FACIAL_C_FacialRoot", "head_grp"), query=True, worldSpace=True, translation=True, ) cmds_xform("LOC_C_eyeDriver", worldSpace=True, absolute=True, translation=facial_root_jnt) cmds_space_locator(name="LOC_temp", absolute=True, position=[0.0, 0.0, 0.0]) root_orientation = cmds_xform("LOC_C_eyeDriver", query=True, worldSpace=True, rotation=True) cmds_xform("LOC_temp", worldSpace=True, absolute=True, rotation=root_orientation) eye_jnt_left = cmds_xform( find_by_name_and_group("FACIAL_L_Eye", "head_grp"), query=True, worldSpace=True, translation=True, ) cmds_xform("LOC_L_eyeDriver", worldSpace=True, absolute=True, translation=eye_jnt_left) cmds_xform("LOC_L_eyeAimUp", worldSpace=True, absolute=True, translation=eye_jnt_left) cmds_set_attr("LOC_L_eyeAimUp.ty", 10.0) cmds_parent("GRP_L_eyeAim", "LOC_temp") cmds_xform("GRP_L_eyeAim", worldSpace=True, absolute=True, translation=eye_jnt_left) cmds_set_attr("GRP_L_eyeAim.tz", 30.0) eye_jnt_right = cmds_xform( find_by_name_and_group("FACIAL_R_Eye", "head_grp"), query=True, worldSpace=True, translation=True, ) cmds_xform("LOC_R_eyeDriver", worldSpace=True, absolute=True, translation=eye_jnt_right) cmds_xform("LOC_R_eyeAimUp", worldSpace=True, absolute=True, translation=eye_jnt_right) cmds_set_attr("LOC_R_eyeAimUp.ty", 10.0) cmds_parent("GRP_R_eyeAim", "LOC_temp") cmds_xform("GRP_R_eyeAim", worldSpace=True, absolute=True, translation=eye_jnt_right) cmds_set_attr("GRP_R_eyeAim.tz", 30.0) cmds_parent("GRP_C_eyesAim", "LOC_temp") cmds_set_attr("GRP_C_eyesAim.tx", 0.0) ty_grp_eye_aim_l = cmds_get_attr("GRP_L_eyeAim.ty") ty_grp_eye_aim_r = cmds_get_attr("GRP_R_eyeAim.ty") ty_grp_eye_aim_c = (ty_grp_eye_aim_l + ty_grp_eye_aim_r) / 2 cmds_set_attr("GRP_C_eyesAim.ty", ty_grp_eye_aim_c) cmds_set_attr("GRP_C_eyesAim.tz", 30.0) cmds_parent("GRP_L_eyeAim", "CTRL_C_eyesAim") cmds_parent("GRP_R_eyeAim", "CTRL_C_eyesAim") cmds_parent("GRP_C_eyesAim", world=True) cmds_delete("LOC_temp") cmds_parent("GRP_convergenceGUI", "CTRL_C_eyesAim") cmds_set_attr("GRP_convergenceGUI.tx", 0.4) cmds_set_attr("GRP_convergenceGUI.ty", 0.0) cmds_set_attr("GRP_convergenceGUI.tz", 0.0) # **************************************************************************************************** def connect_expression( driverCtrl, driverAttr, minVal, maxVal, driverKey1, driverKey2, expCtrl, expAttr, expKey1, expKey2, ): """ Connects one GUI control with raw control. """ # create driver attribute if dont exists if not cmds_exists(f"{driverCtrl}.{driverAttr}"): cmds_set_attr( driverCtrl, longName=driverAttr, keyable=True, attributeType="float", minValue=minVal, maxValue=maxVal, dv=0.0, ) # connect CTRL driver with driven expression cmds_set_driven_keyframe( f"{expCtrl}.{expAttr}", itt="linear", ott="linear", currentDriver=f"{driverCtrl}.{driverAttr}", driverValue=driverKey1, value=expKey1, ) cmds_set_driven_keyframe( f"{expCtrl}.{expAttr}", itt="linear", ott="linear", currentDriver=f"{driverCtrl}.{driverAttr}", driverValue=driverKey2, value=expKey2, ) # **************************************************************************************************** def connect_expressions(): """ This method would connect GUI with raw controls. Raw controls are driven by rig logic while the user manipulates GUI controls. """ # brows down connect_expression( "CTRL_L_brow_down", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "browDownL", 0.0, 1.0, ) connect_expression( "CTRL_R_brow_down", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "browDownR", 0.0, 1.0, ) # brows lateral connect_expression( "CTRL_L_brow_lateral", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "browLateralL", 0.0, 1.0, ) connect_expression( "CTRL_R_brow_lateral", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "browLateralR", 0.0, 1.0, ) # brows raise connect_expression( "CTRL_L_brow_raiseIn", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "browRaiseInL", 0.0, 1.0, ) connect_expression( "CTRL_R_brow_raiseIn", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "browRaiseInR", 0.0, 1.0, ) connect_expression( "CTRL_L_brow_raiseOut", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "browRaiseOuterL", 0.0, 1.0, ) connect_expression( "CTRL_R_brow_raiseOut", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "browRaiseOuterR", 0.0, 1.0, ) # ears up connect_expression( "CTRL_L_ear_up", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "earUpL", 0.0, 1.0, ) connect_expression( "CTRL_R_ear_up", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "earUpR", 0.0, 1.0, ) # eyes widen/blink connect_expression( "CTRL_L_eye_blink", "ty", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "eyeBlinkL", 0.0, 1.0, ) connect_expression( "CTRL_R_eye_blink", "ty", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "eyeBlinkR", 0.0, 1.0, ) connect_expression( "CTRL_L_eye_blink", "ty", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "eyeWidenL", 0.0, 1.0, ) connect_expression( "CTRL_R_eye_blink", "ty", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "eyeWidenR", 0.0, 1.0, ) # lid press connect_expression( "CTRL_L_eye_lidPress", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "eyeLidPressL", 0.0, 1.0, ) connect_expression( "CTRL_R_eye_lidPress", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "eyeLidPressR", 0.0, 1.0, ) # eyes squint inner connect_expression( "CTRL_L_eye_squintInner", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "eyeSquintInnerL", 0.0, 1.0, ) connect_expression( "CTRL_R_eye_squintInner", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "eyeSquintInnerR", 0.0, 1.0, ) # eyes cheek raise connect_expression( "CTRL_L_eye_cheekRaise", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "eyeCheekRaiseL", 0.0, 1.0, ) connect_expression( "CTRL_R_eye_cheekRaise", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "eyeCheekRaiseR", 0.0, 1.0, ) # face scrunch connect_expression( "CTRL_L_eye_faceScrunch", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "eyeFaceScrunchL", 0.0, 1.0, ) connect_expression( "CTRL_R_eye_faceScrunch", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "eyeFaceScrunchR", 0.0, 1.0, ) # eyelids up/down (and eyes relax) connect_expression( "CTRL_L_eye_eyelidU", "ty", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "eyeUpperLidUpL", 0.0, 1.0, ) connect_expression( "CTRL_R_eye_eyelidU", "ty", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "eyeUpperLidUpR", 0.0, 1.0, ) connect_expression( "CTRL_L_eye_eyelidU", "ty", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "eyeRelaxL", 0.0, 1.0, ) connect_expression( "CTRL_R_eye_eyelidU", "ty", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "eyeRelaxR", 0.0, 1.0, ) connect_expression( "CTRL_L_eye_eyelidD", "ty", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "eyeLowerLidDownL", 0.0, 1.0, ) connect_expression( "CTRL_R_eye_eyelidD", "ty", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "eyeLowerLidDownR", 0.0, 1.0, ) connect_expression( "CTRL_L_eye_eyelidD", "ty", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "eyeLowerLidUpL", 0.0, 1.0, ) connect_expression( "CTRL_R_eye_eyelidD", "ty", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "eyeLowerLidUpR", 0.0, 1.0, ) if analog_gui_loaded(): # eyes look up/down/left/right connect_expression( "LOC_L_eyeDriver", "rx", -30.0, 40.0, 0.0, -30.0, "CTRL_expressions", "eyeLookUpL", 0.0, 1.0, ) connect_expression( "LOC_R_eyeDriver", "rx", -30.0, 40.0, 0.0, -30.0, "CTRL_expressions", "eyeLookUpR", 0.0, 1.0, ) connect_expression( "LOC_L_eyeDriver", "rx", -30.0, 40.0, 0.0, 40.0, "CTRL_expressions", "eyeLookDownL", 0.0, 1.0, ) connect_expression( "LOC_R_eyeDriver", "rx", -30.0, 40.0, 0.0, 40.0, "CTRL_expressions", "eyeLookDownR", 0.0, 1.0, ) connect_expression( "LOC_L_eyeDriver", "ry", -40.0, 40.0, 0.0, 40.0, "CTRL_expressions", "eyeLookLeftL", 0.0, 1.0, ) connect_expression( "LOC_R_eyeDriver", "ry", -40.0, 40.0, 0.0, 40.0, "CTRL_expressions", "eyeLookLeftR", 0.0, 1.0, ) connect_expression( "LOC_L_eyeDriver", "ry", -40.0, 40.0, 0.0, -40.0, "CTRL_expressions", "eyeLookRightL", 0.0, 1.0, ) connect_expression( "LOC_R_eyeDriver", "ry", -40.0, 40.0, 0.0, -40.0, "CTRL_expressions", "eyeLookRightR", 0.0, 1.0, ) # pupils wide/narrow connect_expression( "CTRL_L_eye_pupil", "ty", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "eyePupilWideL", 0.0, 1.0, ) connect_expression( "CTRL_R_eye_pupil", "ty", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "eyePupilWideR", 0.0, 1.0, ) connect_expression( "CTRL_L_eye_pupil", "ty", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "eyePupilNarrowL", 0.0, 1.0, ) connect_expression( "CTRL_R_eye_pupil", "ty", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "eyePupilNarrowR", 0.0, 1.0, ) # eyes parallel connect_expression( "CTRL_C_eye_parallelLook", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "eyeParallelLookDirection", 0.0, 1.0, ) # eyelashes tweakers connect_expression( "CTRL_L_eyelashes_tweakerIn", "ty", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "eyelashesDownINL", 0.0, 1.0, ) connect_expression( "CTRL_R_eyelashes_tweakerIn", "ty", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "eyelashesDownINR", 0.0, 1.0, ) connect_expression( "CTRL_L_eyelashes_tweakerOut", "ty", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "eyelashesDownOUTL", 0.0, 1.0, ) connect_expression( "CTRL_R_eyelashes_tweakerOut", "ty", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "eyelashesDownOUTR", 0.0, 1.0, ) connect_expression( "CTRL_L_eyelashes_tweakerIn", "ty", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "eyelashesUpINL", 0.0, 1.0, ) connect_expression( "CTRL_R_eyelashes_tweakerIn", "ty", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "eyelashesUpINR", 0.0, 1.0, ) connect_expression( "CTRL_L_eyelashes_tweakerOut", "ty", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "eyelashesUpOUTL", 0.0, 1.0, ) connect_expression( "CTRL_R_eyelashes_tweakerOut", "ty", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "eyelashesUpOUTR", 0.0, 1.0, ) # nose wrinkle/depress/dilate/compress connect_expression( "CTRL_L_nose", "ty", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "noseWrinkleL", 0.0, 1.0, ) connect_expression( "CTRL_R_nose", "ty", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "noseWrinkleR", 0.0, 1.0, ) connect_expression( "CTRL_L_nose", "ty", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "noseNostrilDepressL", 0.0, 1.0, ) connect_expression( "CTRL_R_nose", "ty", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "noseNostrilDepressR", 0.0, 1.0, ) connect_expression( "CTRL_L_nose", "tx", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "noseNostrilDilateL", 0.0, 1.0, ) connect_expression( "CTRL_R_nose", "tx", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "noseNostrilDilateR", 0.0, 1.0, ) connect_expression( "CTRL_L_nose", "tx", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "noseNostrilCompressL", 0.0, 1.0, ) connect_expression( "CTRL_R_nose", "tx", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "noseNostrilCompressR", 0.0, 1.0, ) # nose wrinkle upper connect_expression( "CTRL_L_nose_wrinkleUpper", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "noseWrinkleUpperL", 0.0, 1.0, ) connect_expression( "CTRL_R_nose_wrinkleUpper", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "noseWrinkleUpperR", 0.0, 1.0, ) # nasolabial deepener connect_expression( "CTRL_L_nose_nasolabialDeepen", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "noseNasolabialDeepenL", 0.0, 1.0, ) connect_expression( "CTRL_R_nose_nasolabialDeepen", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "noseNasolabialDeepenR", 0.0, 1.0, ) # cheek suck/blow connect_expression( "CTRL_L_mouth_suckBlow", "ty", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthCheekBlowL", 0.0, 1.0, ) connect_expression( "CTRL_R_mouth_suckBlow", "ty", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthCheekBlowR", 0.0, 1.0, ) connect_expression( "CTRL_L_mouth_suckBlow", "ty", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "mouthCheekSuckL", 0.0, 1.0, ) connect_expression( "CTRL_R_mouth_suckBlow", "ty", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "mouthCheekSuckR", 0.0, 1.0, ) # lips blow connect_expression( "CTRL_L_mouth_lipsBlow", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthLipsBlowL", 0.0, 1.0, ) connect_expression( "CTRL_R_mouth_lipsBlow", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthLipsBlowR", 0.0, 1.0, ) # mouth up/down/left/right connect_expression( "CTRL_C_mouth", "ty", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthUp", 0.0, 1.0, ) connect_expression( "CTRL_C_mouth", "ty", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "mouthDown", 0.0, 1.0, ) connect_expression( "CTRL_C_mouth", "tx", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthLeft", 0.0, 1.0, ) connect_expression( "CTRL_C_mouth", "tx", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "mouthRight", 0.0, 1.0, ) # upper lip raise connect_expression( "CTRL_L_mouth_upperLipRaise", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthUpperLipRaiseL", 0.0, 1.0, ) connect_expression( "CTRL_R_mouth_upperLipRaise", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthUpperLipRaiseR", 0.0, 1.0, ) # lower lip depress connect_expression( "CTRL_L_mouth_lowerLipDepress", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthLowerLipDepressL", 0.0, 1.0, ) connect_expression( "CTRL_R_mouth_lowerLipDepress", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthLowerLipDepressR", 0.0, 1.0, ) # corner pull connect_expression( "CTRL_L_mouth_cornerPull", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthCornerPullL", 0.0, 1.0, ) connect_expression( "CTRL_R_mouth_cornerPull", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthCornerPullR", 0.0, 1.0, ) # mouth stretch connect_expression( "CTRL_L_mouth_stretch", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthStretchL", 0.0, 1.0, ) connect_expression( "CTRL_R_mouth_stretch", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthStretchR", 0.0, 1.0, ) # mouth stretch lips close connect_expression( "CTRL_L_mouth_stretchLipsClose", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthStretchLipsCloseL", 0.0, 1.0, ) connect_expression( "CTRL_R_mouth_stretchLipsClose", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthStretchLipsCloseR", 0.0, 1.0, ) # dimpler connect_expression( "CTRL_L_mouth_dimple", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthDimpleL", 0.0, 1.0, ) connect_expression( "CTRL_R_mouth_dimple", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthDimpleR", 0.0, 1.0, ) # corner depress connect_expression( "CTRL_L_mouth_cornerDepress", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthCornerDepressL", 0.0, 1.0, ) connect_expression( "CTRL_R_mouth_cornerDepress", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthCornerDepressR", 0.0, 1.0, ) # mouth press connect_expression( "CTRL_L_mouth_pressU", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthPressUL", 0.0, 1.0, ) connect_expression( "CTRL_R_mouth_pressU", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthPressUR", 0.0, 1.0, ) connect_expression( "CTRL_L_mouth_pressD", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthPressDL", 0.0, 1.0, ) connect_expression( "CTRL_R_mouth_pressD", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthPressDR", 0.0, 1.0, ) # purse connect_expression( "CTRL_L_mouth_purseU", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthLipsPurseUL", 0.0, 1.0, ) connect_expression( "CTRL_R_mouth_purseU", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthLipsPurseUR", 0.0, 1.0, ) connect_expression( "CTRL_L_mouth_purseD", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthLipsPurseDL", 0.0, 1.0, ) connect_expression( "CTRL_R_mouth_purseD", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthLipsPurseDR", 0.0, 1.0, ) # lips towards connect_expression( "CTRL_L_mouth_towardsU", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthLipsTowardsUL", 0.0, 1.0, ) connect_expression( "CTRL_R_mouth_towardsU", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthLipsTowardsUR", 0.0, 1.0, ) connect_expression( "CTRL_L_mouth_towardsD", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthLipsTowardsDL", 0.0, 1.0, ) connect_expression( "CTRL_R_mouth_towardsD", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthLipsTowardsDR", 0.0, 1.0, ) # funnel connect_expression( "CTRL_L_mouth_funnelU", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthFunnelUL", 0.0, 1.0, ) connect_expression( "CTRL_R_mouth_funnelU", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthFunnelUR", 0.0, 1.0, ) connect_expression( "CTRL_L_mouth_funnelD", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthFunnelDL", 0.0, 1.0, ) connect_expression( "CTRL_R_mouth_funnelD", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthFunnelDR", 0.0, 1.0, ) # lips together connect_expression( "CTRL_L_mouth_lipsTogetherU", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthLipsTogetherUL", 0.0, 1.0, ) connect_expression( "CTRL_R_mouth_lipsTogetherU", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthLipsTogetherUR", 0.0, 1.0, ) connect_expression( "CTRL_L_mouth_lipsTogetherD", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthLipsTogetherDL", 0.0, 1.0, ) connect_expression( "CTRL_R_mouth_lipsTogetherD", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthLipsTogetherDR", 0.0, 1.0, ) # upper lip bite connect_expression( "CTRL_L_mouth_lipBiteU", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthUpperLipBiteL", 0.0, 1.0, ) connect_expression( "CTRL_R_mouth_lipBiteU", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthUpperLipBiteR", 0.0, 1.0, ) # lower lip bite connect_expression( "CTRL_L_mouth_lipBiteD", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthLowerLipBiteL", 0.0, 1.0, ) connect_expression( "CTRL_R_mouth_lipBiteD", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthLowerLipBiteR", 0.0, 1.0, ) # lips tighten connect_expression( "CTRL_L_mouth_tightenU", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthLipsTightenUL", 0.0, 1.0, ) connect_expression( "CTRL_R_mouth_tightenU", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthLipsTightenUR", 0.0, 1.0, ) connect_expression( "CTRL_L_mouth_tightenD", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthLipsTightenDL", 0.0, 1.0, ) connect_expression( "CTRL_R_mouth_tightenD", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthLipsTightenDR", 0.0, 1.0, ) # lips press connect_expression( "CTRL_L_mouth_lipsPressU", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthLipsPressL", 0.0, 1.0, ) connect_expression( "CTRL_R_mouth_lipsPressU", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthLipsPressR", 0.0, 1.0, ) # sharp corner pull connect_expression( "CTRL_L_mouth_sharpCornerPull", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthSharpCornerPullL", 0.0, 1.0, ) connect_expression( "CTRL_R_mouth_sharpCornerPull", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthSharpCornerPullR", 0.0, 1.0, ) # mouth sticky connect_expression( "CTRL_C_mouth_stickyU", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthStickyUC", 0.0, 1.0, ) connect_expression( "CTRL_L_mouth_stickyInnerU", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthStickyUINL", 0.0, 1.0, ) connect_expression( "CTRL_R_mouth_stickyInnerU", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthStickyUINR", 0.0, 1.0, ) connect_expression( "CTRL_L_mouth_stickyOuterU", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthStickyUOUTL", 0.0, 1.0, ) connect_expression( "CTRL_R_mouth_stickyOuterU", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthStickyUOUTR", 0.0, 1.0, ) connect_expression( "CTRL_C_mouth_stickyD", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthStickyDC", 0.0, 1.0, ) connect_expression( "CTRL_L_mouth_stickyInnerD", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthStickyDINL", 0.0, 1.0, ) connect_expression( "CTRL_R_mouth_stickyInnerD", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthStickyDINR", 0.0, 1.0, ) connect_expression( "CTRL_L_mouth_stickyOuterD", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthStickyDOUTL", 0.0, 1.0, ) connect_expression( "CTRL_R_mouth_stickyOuterD", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthStickyDOUTR", 0.0, 1.0, ) # sticky lips cmds_set_driven_keyframe( "CTRL_expressions.mouthLipsStickyLPh1", itt="linear", ott="linear", currentDriver="CTRL_L_mouth_lipSticky.ty", driverValue=0, value=0, ) cmds_set_driven_keyframe( "CTRL_expressions.mouthLipsStickyLPh1", itt="linear", ott="linear", currentDriver="CTRL_L_mouth_lipSticky.ty", driverValue=0.33, value=1, ) cmds_set_driven_keyframe( "CTRL_expressions.mouthLipsStickyLPh1", itt="linear", ott="linear", currentDriver="CTRL_L_mouth_lipSticky.ty", driverValue=0.66, value=0, ) cmds_set_driven_keyframe( "CTRL_expressions.mouthLipsStickyLPh2", itt="linear", ott="linear", currentDriver="CTRL_L_mouth_lipSticky.ty", driverValue=0.33, value=0, ) cmds_set_driven_keyframe( "CTRL_expressions.mouthLipsStickyLPh2", itt="linear", ott="linear", currentDriver="CTRL_L_mouth_lipSticky.ty", driverValue=0.66, value=1, ) cmds_set_driven_keyframe( "CTRL_expressions.mouthLipsStickyLPh2", itt="linear", ott="linear", currentDriver="CTRL_L_mouth_lipSticky.ty", driverValue=1, value=0, ) cmds_set_driven_keyframe( "CTRL_expressions.mouthLipsStickyLPh3", itt="linear", ott="linear", currentDriver="CTRL_L_mouth_lipSticky.ty", driverValue=0.66, value=0, ) cmds_set_driven_keyframe( "CTRL_expressions.mouthLipsStickyLPh3", itt="linear", ott="linear", currentDriver="CTRL_L_mouth_lipSticky.ty", driverValue=1, value=1, ) cmds_set_driven_keyframe( "CTRL_expressions.mouthLipsStickyRPh1", itt="linear", ott="linear", currentDriver="CTRL_R_mouth_lipSticky.ty", driverValue=0, value=0, ) cmds_set_driven_keyframe( "CTRL_expressions.mouthLipsStickyRPh1", itt="linear", ott="linear", currentDriver="CTRL_R_mouth_lipSticky.ty", driverValue=0.33, value=1, ) cmds_set_driven_keyframe( "CTRL_expressions.mouthLipsStickyRPh1", itt="linear", ott="linear", currentDriver="CTRL_R_mouth_lipSticky.ty", driverValue=0.66, value=0, ) cmds_set_driven_keyframe( "CTRL_expressions.mouthLipsStickyRPh2", itt="linear", ott="linear", currentDriver="CTRL_R_mouth_lipSticky.ty", driverValue=0.33, value=0, ) cmds_set_driven_keyframe( "CTRL_expressions.mouthLipsStickyRPh2", itt="linear", ott="linear", currentDriver="CTRL_R_mouth_lipSticky.ty", driverValue=0.66, value=1, ) cmds_set_driven_keyframe( "CTRL_expressions.mouthLipsStickyRPh2", itt="linear", ott="linear", currentDriver="CTRL_R_mouth_lipSticky.ty", driverValue=1, value=0, ) cmds_set_driven_keyframe( "CTRL_expressions.mouthLipsStickyRPh3", itt="linear", ott="linear", currentDriver="CTRL_R_mouth_lipSticky.ty", driverValue=0.66, value=0, ) cmds_set_driven_keyframe( "CTRL_expressions.mouthLipsStickyRPh3", itt="linear", ott="linear", currentDriver="CTRL_R_mouth_lipSticky.ty", driverValue=1, value=1, ) # lips push/pull connect_expression( "CTRL_L_mouth_pushPullU", "ty", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthLipsPushUL", 0.0, 1.0, ) connect_expression( "CTRL_R_mouth_pushPullU", "ty", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthLipsPushUR", 0.0, 1.0, ) connect_expression( "CTRL_L_mouth_pushPullD", "ty", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthLipsPushDL", 0.0, 1.0, ) connect_expression( "CTRL_R_mouth_pushPullD", "ty", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthLipsPushDR", 0.0, 1.0, ) connect_expression( "CTRL_L_mouth_pushPullU", "ty", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "mouthLipsPullUL", 0.0, 1.0, ) connect_expression( "CTRL_R_mouth_pushPullU", "ty", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "mouthLipsPullUR", 0.0, 1.0, ) connect_expression( "CTRL_L_mouth_pushPullD", "ty", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "mouthLipsPullDL", 0.0, 1.0, ) connect_expression( "CTRL_R_mouth_pushPullD", "ty", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "mouthLipsPullDR", 0.0, 1.0, ) # lips thin/thick connect_expression( "CTRL_L_mouth_thicknessU", "ty", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthLipsThinUL", 0.0, 1.0, ) connect_expression( "CTRL_R_mouth_thicknessU", "ty", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthLipsThinUR", 0.0, 1.0, ) connect_expression( "CTRL_L_mouth_thicknessD", "ty", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthLipsThinDL", 0.0, 1.0, ) connect_expression( "CTRL_R_mouth_thicknessD", "ty", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthLipsThinDR", 0.0, 1.0, ) connect_expression( "CTRL_L_mouth_thicknessU", "ty", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "mouthLipsThickUL", 0.0, 1.0, ) connect_expression( "CTRL_R_mouth_thicknessU", "ty", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "mouthLipsThickUR", 0.0, 1.0, ) connect_expression( "CTRL_L_mouth_thicknessD", "ty", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "mouthLipsThickDL", 0.0, 1.0, ) connect_expression( "CTRL_R_mouth_thicknessD", "ty", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "mouthLipsThickDR", 0.0, 1.0, ) # corner sharpen connect_expression( "CTRL_L_mouth_cornerSharpnessU", "ty", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthCornerSharpenUL", 0.0, 1.0, ) connect_expression( "CTRL_R_mouth_cornerSharpnessU", "ty", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthCornerSharpenUR", 0.0, 1.0, ) connect_expression( "CTRL_L_mouth_cornerSharpnessD", "ty", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthCornerSharpenDL", 0.0, 1.0, ) connect_expression( "CTRL_R_mouth_cornerSharpnessD", "ty", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthCornerSharpenDR", 0.0, 1.0, ) connect_expression( "CTRL_L_mouth_cornerSharpnessU", "ty", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "mouthCornerRounderUL", 0.0, 1.0, ) connect_expression( "CTRL_R_mouth_cornerSharpnessU", "ty", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "mouthCornerRounderUR", 0.0, 1.0, ) connect_expression( "CTRL_L_mouth_cornerSharpnessD", "ty", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "mouthCornerRounderDL", 0.0, 1.0, ) connect_expression( "CTRL_R_mouth_cornerSharpnessD", "ty", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "mouthCornerRounderDR", 0.0, 1.0, ) # lips towards connect_expression( "CTRL_L_mouth_lipsTowardsTeethU", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthUpperLipTowardsTeethL", 0.0, 1.0, ) connect_expression( "CTRL_R_mouth_lipsTowardsTeethU", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthUpperLipTowardsTeethR", 0.0, 1.0, ) connect_expression( "CTRL_L_mouth_lipsTowardsTeethD", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthLowerLipTowardsTeethL", 0.0, 1.0, ) connect_expression( "CTRL_R_mouth_lipsTowardsTeethD", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthLowerLipTowardsTeethR", 0.0, 1.0, ) # lips shift connect_expression( "CTRL_C_mouth_lipShiftU", "ty", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthUpperLipShiftLeft", 0.0, 1.0, ) connect_expression( "CTRL_C_mouth_lipShiftU", "ty", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "mouthUpperLipShiftRight", 0.0, 1.0, ) connect_expression( "CTRL_C_mouth_lipShiftD", "ty", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthLowerLipShiftLeft", 0.0, 1.0, ) connect_expression( "CTRL_C_mouth_lipShiftD", "ty", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "mouthLowerLipShiftRight", 0.0, 1.0, ) # lips roll connect_expression( "CTRL_L_mouth_lipsRollU", "ty", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthUpperLipRollInL", 0.0, 1.0, ) connect_expression( "CTRL_R_mouth_lipsRollU", "ty", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthUpperLipRollInR", 0.0, 1.0, ) connect_expression( "CTRL_L_mouth_lipsRollD", "ty", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthLowerLipRollInL", 0.0, 1.0, ) connect_expression( "CTRL_R_mouth_lipsRollD", "ty", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthLowerLipRollInR", 0.0, 1.0, ) connect_expression( "CTRL_L_mouth_lipsRollU", "ty", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "mouthUpperLipRollOutL", 0.0, 1.0, ) connect_expression( "CTRL_R_mouth_lipsRollU", "ty", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "mouthUpperLipRollOutR", 0.0, 1.0, ) connect_expression( "CTRL_L_mouth_lipsRollD", "ty", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "mouthLowerLipRollOutL", 0.0, 1.0, ) connect_expression( "CTRL_R_mouth_lipsRollD", "ty", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "mouthLowerLipRollOutR", 0.0, 1.0, ) # corners connect_expression( "CTRL_L_mouth_corner", "ty", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthCornerUpL", 0.0, 1.0, ) connect_expression( "CTRL_L_mouth_corner", "ty", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "mouthCornerDownL", 0.0, 1.0, ) connect_expression( "CTRL_L_mouth_corner", "tx", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthCornerWideL", 0.0, 1.0, ) connect_expression( "CTRL_L_mouth_corner", "tx", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "mouthCornerNarrowL", 0.0, 1.0, ) connect_expression( "CTRL_R_mouth_corner", "ty", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthCornerUpR", 0.0, 1.0, ) connect_expression( "CTRL_R_mouth_corner", "ty", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "mouthCornerDownR", 0.0, 1.0, ) connect_expression( "CTRL_R_mouth_corner", "tx", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "mouthCornerWideR", 0.0, 1.0, ) connect_expression( "CTRL_R_mouth_corner", "tx", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "mouthCornerNarrowR", 0.0, 1.0, ) # tongue up/down/left/right connect_expression( "CTRL_C_tongue", "ty", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "tongueUp", 0.0, 1.0, ) connect_expression( "CTRL_C_tongue", "ty", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "tongueDown", 0.0, 1.0, ) connect_expression( "CTRL_C_tongue", "tx", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "tongueLeft", 0.0, 1.0, ) connect_expression( "CTRL_C_tongue", "tx", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "tongueRight", 0.0, 1.0, ) # tongue roll up/down/left/right connect_expression( "CTRL_C_tongue_roll", "ty", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "tongueRollUp", 0.0, 1.0, ) connect_expression( "CTRL_C_tongue_roll", "ty", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "tongueRollDown", 0.0, 1.0, ) connect_expression( "CTRL_C_tongue_roll", "tx", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "tongueRollLeft", 0.0, 1.0, ) connect_expression( "CTRL_C_tongue_roll", "tx", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "tongueRollRight", 0.0, 1.0, ) # tongue tip up/down/left/right connect_expression( "CTRL_C_tongue_tip", "ty", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "tongueTipUp", 0.0, 1.0, ) connect_expression( "CTRL_C_tongue_tip", "ty", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "tongueTipDown", 0.0, 1.0, ) connect_expression( "CTRL_C_tongue_tip", "tx", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "tongueTipLeft", 0.0, 1.0, ) connect_expression( "CTRL_C_tongue_tip", "tx", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "tongueTipRight", 0.0, 1.0, ) # tongue in/out connect_expression( "CTRL_C_tongue_inOut", "ty", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "tongueIn", 0.0, 1.0, ) connect_expression( "CTRL_C_tongue_inOut", "ty", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "tongueOut", 0.0, 1.0, ) # tongue press connect_expression( "CTRL_C_tongue_press", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "tonguePress", 0.0, 1.0, ) # tongue wide/narrow connect_expression( "CTRL_C_tongue_narrowWide", "ty", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "tongueWide", 0.0, 1.0, ) connect_expression( "CTRL_C_tongue_narrowWide", "ty", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "tongueNarrow", 0.0, 1.0, ) # jaw open connect_expression( "CTRL_C_jaw", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "jawOpen", 0.0, 1.0 ) # jaw left/right connect_expression( "CTRL_C_jaw", "tx", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "jawLeft", 0.0, 1.0, ) connect_expression( "CTRL_C_jaw", "tx", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "jawRight", 0.0, 1.0, ) # jaw back/fwd connect_expression( "CTRL_C_jaw_fwdBack", "ty", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "jawFwd", 0.0, 1.0, ) connect_expression( "CTRL_C_jaw_fwdBack", "ty", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "jawBack", 0.0, 1.0, ) # jaw clench connect_expression( "CTRL_L_jaw_clench", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "jawClenchL", 0.0, 1.0, ) connect_expression( "CTRL_R_jaw_clench", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "jawClenchR", 0.0, 1.0, ) # chin raise connect_expression( "CTRL_L_jaw_ChinRaiseU", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "jawChinRaiseUL", 0.0, 1.0, ) connect_expression( "CTRL_R_jaw_ChinRaiseU", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "jawChinRaiseUR", 0.0, 1.0, ) connect_expression( "CTRL_L_jaw_ChinRaiseD", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "jawChinRaiseDL", 0.0, 1.0, ) connect_expression( "CTRL_R_jaw_ChinRaiseD", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "jawChinRaiseDR", 0.0, 1.0, ) # chin compress connect_expression( "CTRL_L_jaw_chinCompress", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "jawChinCompressL", 0.0, 1.0, ) connect_expression( "CTRL_R_jaw_chinCompress", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "jawChinCompressR", 0.0, 1.0, ) # jaw open extreme connect_expression( "CTRL_C_jaw_openExtreme", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "jawOpenExtreme", 0.0, 1.0, ) # neck stretch connect_expression( "CTRL_L_neck_stretch", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "neckStretchL", 0.0, 1.0, ) connect_expression( "CTRL_R_neck_stretch", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "neckStretchR", 0.0, 1.0, ) # swallow cmds_set_driven_keyframe( "CTRL_expressions.neckSwallowPh1", itt="linear", ott="linear", currentDriver="CTRL_C_neck_swallow.ty", driverValue=0, value=0, ) cmds_set_driven_keyframe( "CTRL_expressions.neckSwallowPh1", itt="linear", ott="linear", currentDriver="CTRL_C_neck_swallow.ty", driverValue=0.2, value=1, ) cmds_set_driven_keyframe( "CTRL_expressions.neckSwallowPh1", itt="linear", ott="linear", currentDriver="CTRL_C_neck_swallow.ty", driverValue=0.4, value=0, ) cmds_set_driven_keyframe( "CTRL_expressions.neckSwallowPh2", itt="linear", ott="linear", currentDriver="CTRL_C_neck_swallow.ty", driverValue=0.2, value=0, ) cmds_set_driven_keyframe( "CTRL_expressions.neckSwallowPh2", itt="linear", ott="linear", currentDriver="CTRL_C_neck_swallow.ty", driverValue=0.4, value=1, ) cmds_set_driven_keyframe( "CTRL_expressions.neckSwallowPh2", itt="linear", ott="linear", currentDriver="CTRL_C_neck_swallow.ty", driverValue=0.6, value=0, ) cmds_set_driven_keyframe( "CTRL_expressions.neckSwallowPh3", itt="linear", ott="linear", currentDriver="CTRL_C_neck_swallow.ty", driverValue=0.4, value=0, ) cmds_set_driven_keyframe( "CTRL_expressions.neckSwallowPh3", itt="linear", ott="linear", currentDriver="CTRL_C_neck_swallow.ty", driverValue=0.6, value=1, ) cmds_set_driven_keyframe( "CTRL_expressions.neckSwallowPh3", itt="linear", ott="linear", currentDriver="CTRL_C_neck_swallow.ty", driverValue=0.8, value=0, ) cmds_set_driven_keyframe( "CTRL_expressions.neckSwallowPh4", itt="linear", ott="linear", currentDriver="CTRL_C_neck_swallow.ty", driverValue=0.6, value=0, ) cmds_set_driven_keyframe( "CTRL_expressions.neckSwallowPh4", itt="linear", ott="linear", currentDriver="CTRL_C_neck_swallow.ty", driverValue=0.8, value=1, ) cmds_set_driven_keyframe( "CTRL_expressions.neckSwallowPh4", itt="linear", ott="linear", currentDriver="CTRL_C_neck_swallow.ty", driverValue=1, value=0, ) # mastoid contract connect_expression( "CTRL_L_neck_mastoidContract", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "neckMastoidContractL", 0.0, 1.0, ) connect_expression( "CTRL_R_neck_mastoidContract", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "neckMastoidContractR", 0.0, 1.0, ) # throat down/up connect_expression( "CTRL_neck_throatUpDown", "ty", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "neckThroatDown", 0.0, 1.0, ) connect_expression( "CTRL_neck_throatUpDown", "ty", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "neckThroatUp", 0.0, 1.0, ) # digastric down/up connect_expression( "CTRL_neck_digastricUpDown", "ty", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "neckDigastricDown", 0.0, 1.0, ) connect_expression( "CTRL_neck_digastricUpDown", "ty", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "neckDigastricUp", 0.0, 1.0, ) # exhale/inhale connect_expression( "CTRL_neck_throatExhaleInhale", "ty", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "neckThroatExhale", 0.0, 1.0, ) connect_expression( "CTRL_neck_throatExhaleInhale", "ty", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "neckThroatInhale", 0.0, 1.0, ) # upper teeth connect_expression( "CTRL_C_teethU", "ty", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "teethUpU", 0.0, 1.0, ) connect_expression( "CTRL_C_teethU", "ty", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "teethDownU", 0.0, 1.0, ) connect_expression( "CTRL_C_teethU", "tx", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "teethLeftU", 0.0, 1.0, ) connect_expression( "CTRL_C_teethU", "tx", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "teethRightU", 0.0, 1.0, ) connect_expression( "CTRL_C_teeth_fwdBackU", "ty", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "teethBackU", 0.0, 1.0, ) connect_expression( "CTRL_C_teeth_fwdBackU", "ty", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "teethFwdU", 0.0, 1.0, ) # lower teeth connect_expression( "CTRL_C_teethD", "ty", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "teethUpD", 0.0, 1.0, ) connect_expression( "CTRL_C_teethD", "ty", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "teethDownD", 0.0, 1.0, ) connect_expression( "CTRL_C_teethD", "tx", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "teethLeftD", 0.0, 1.0, ) connect_expression( "CTRL_C_teethD", "tx", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "teethRightD", 0.0, 1.0, ) connect_expression( "CTRL_C_teeth_fwdBackD", "ty", -1.0, 1.0, 0.0, 1.0, "CTRL_expressions", "teethBackD", 0.0, 1.0, ) connect_expression( "CTRL_C_teeth_fwdBackD", "ty", -1.0, 1.0, 0.0, -1.0, "CTRL_expressions", "teethFwdD", 0.0, 1.0, ) # look at switch cmds_add_attr( "CTRL_expressions", longName="lookAtSwitch", attributeType="float", defaultValue=0.0, minValue=0.0, maxValue=1.0, keyable=1, ) connect_expression( "CTRL_lookAtSwitch", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "lookAtSwitch", 0.0, 1.0, ) # **************************************************************************************************** def eyes_setup(): """ This method would create proper eys setup meaning that it would connect GUI controls with raw controls for look expressions. """ jntEyeL = "FACIAL_L_Eye" locEyeL = "LOC_L_eyeDriver" locUIEyeL = "LOC_L_eyeUIDriver" locAimEyeL = "LOC_L_eyeAimDriver" locAimUpL = "LOC_L_eyeAimUp" offGrpEyeL = "GRP_L_eyeAim" ctrlEyeL = "CTRL_L_eyeAim" ctrlUIEyeL = "CTRL_L_eye" jntEyeR = "FACIAL_R_Eye" locEyeR = "LOC_R_eyeDriver" locUIEyeR = "LOC_R_eyeUIDriver" locAimEyeR = "LOC_R_eyeAimDriver" locAimUpR = "LOC_R_eyeAimUp" offGrpEyeR = "GRP_R_eyeAim" ctrlEyeR = "CTRL_R_eyeAim" ctrlUIEyeR = "CTRL_R_eye" ctrlUIEyeC = "CTRL_C_eye" attrAimAt = "CTRL_expressions.lookAtSwitch" offGrp = "GRP_C_eyesAim" locEyeRoot = "LOC_C_eyeDriver" eye_setup( jntEyeL, locEyeL, locUIEyeL, locAimEyeL, ctrlEyeL, ctrlUIEyeL, attrAimAt, ctrlUIEyeC, locEyeRoot, locAimUpL, ) eye_setup( jntEyeR, locEyeR, locUIEyeR, locAimEyeR, ctrlEyeR, ctrlUIEyeR, attrAimAt, ctrlUIEyeC, locEyeRoot, locAimUpR, ) # create visibility switch cmds_set_driven_keyframe( f"{offGrp}.visibility", itt="linear", ott="linear", currentDriver=attrAimAt, driverValue=0, value=0, ) cmds_set_driven_keyframe( f"{offGrp}.visibility", itt="linear", ott="linear", currentDriver=attrAimAt, driverValue=1, value=1, ) # connect convergence attribute current_tzl = cmds_get_attr(f"{offGrpEyeL}.tz") current_tzr = cmds_get_attr(f"{offGrpEyeR}.tz") cmds_set_driven_keyframe( f"{offGrpEyeL}.tz", itt="linear", ott="linear", currentDriver="CTRL_convergenceSwitch.ty", driverValue=0, value=current_tzl, ) cmds_set_driven_keyframe( f"{offGrpEyeL}.tz", itt="linear", ott="linear", currentDriver="CTRL_convergenceSwitch.ty", driverValue=1, value=0, ) cmds_set_driven_keyframe( f"{offGrpEyeR}.tz", itt="linear", ott="linear", currentDriver="CTRL_convergenceSwitch.ty", driverValue=0, value=current_tzr, ) cmds_set_driven_keyframe( f"{offGrpEyeR}.tz", itt="linear", ott="linear", currentDriver="CTRL_convergenceSwitch.ty", driverValue=1, value=0, ) # look direction splines cmds_curve( degree=1, point=([0, 0, 0], [0, 0, 0]), knot=(0, 1), name="L_lookDirection" ) cmds_set_attr("L_lookDirection.overrideEnabled", 1) cmds_set_attr("L_lookDirection.overrideColor", 1) cmds_set_attr("L_lookDirection.overrideDisplayType", 2) cmds_curve( degree=1, point=([0, 0, 0], [0, 0, 0]), knot=(0, 1), name="R_lookDirection" ) cmds_set_attr("R_lookDirection.overrideEnabled", 1) cmds_set_attr("R_lookDirection.overrideColor", 1) cmds_set_attr("R_lookDirection.overrideDisplayType", 2) cmds_select("L_lookDirection.cv[0]", r=True) cmds_cluster(name="L_lookDirStart") cmds_set_attr("L_lookDirStartHandle.visibility", 0) cmds_select("L_lookDirection.cv[1]", r=True) cmds_cluster(name="L_lookDirEnd") cmds_set_attr("L_lookDirEndHandle.visibility", 0) cmds_select("R_lookDirection.cv[0]", r=True) cmds_cluster(name="R_lookDirStart") cmds_set_attr("R_lookDirStartHandle.visibility", 0) cmds_select("R_lookDirection.cv[1]", r=True) cmds_cluster(name="R_lookDirEnd") cmds_set_attr("R_lookDirEndHandle.visibility", 0) if cmds_exists(jntEyeL): cmds_point_constraint(jntEyeL, "L_lookDirStartHandle") cmds_point_constraint(ctrlEyeL, "L_lookDirEndHandle") if cmds_exists(jntEyeR): cmds_point_constraint(jntEyeR, "R_lookDirStartHandle") cmds_point_constraint(ctrlEyeR, "R_lookDirEndHandle") # create look direction splines visibility switch cmds_set_driven_keyframe( "L_lookDirection.visibility", itt="linear", ott="linear", currentDriver=attrAimAt, driverValue=0, value=0, ) cmds_set_driven_keyframe( "L_lookDirection.visibility", itt="linear", ott="linear", currentDriver=attrAimAt, driverValue=1, value=1, ) cmds_set_driven_keyframe( "R_lookDirection.visibility", itt="linear", ott="linear", currentDriver=attrAimAt, driverValue=0, value=0, ) cmds_set_driven_keyframe( "R_lookDirection.visibility", itt="linear", ott="linear", currentDriver=attrAimAt, driverValue=1, value=1, ) # **************************************************************************************************** def eye_setup( jnt_eye, loc_eye, loc_ui_eye, loc_aim_eye, ctrl_eye, ctrl_ui_eye, attr_aim_at, ctrl_ui_eye_c, loc_eye_root, loc_aim_up, ): """ Setup for one eye. """ if cmds_exists(jnt_eye): jnt_pos = cmds_xform(jnt_eye, query=True, worldSpace=True, translation=True) # position and create locators cmds_xform(loc_eye, worldSpace=True, absolute=True, translation=jnt_pos) cmds_space_locator(name=loc_ui_eye) cmds_xform(loc_ui_eye, worldSpace=True, absolute=True, translation=jnt_pos) cmds_set_attr(f"{loc_ui_eye}.visibility", 0) cmds_set_attr(f"{loc_ui_eye}.rx", 0.0) cmds_set_attr(f"{loc_ui_eye}.ry", 0.0) cmds_set_attr(f"{loc_ui_eye}.rz", 0.0) cmds_parent(loc_ui_eye, loc_eye_root) cmds_space_locator(name=loc_aim_eye) if cmds_exists(jnt_eye): cmds_xform(loc_aim_eye, worldSpace=True, absolute=True, translation=jnt_pos) cmds_set_attr(f"{loc_aim_eye}.visibility", 0) cmds_parent(loc_aim_eye, loc_eye_root) cmds_set_attr(f"{loc_aim_eye}.rx", 0.0) cmds_set_attr(f"{loc_aim_eye}.ry", 0.0) cmds_set_attr(f"{loc_aim_eye}.rz", 0.0) # connect aim loc cmds_aim_constraint( ctrl_eye, loc_aim_eye, mo=True, weight=1, aimVector=[0, 0, 1], upVector=[0, 1, 0], worldUpType="object", worldUpObject=loc_aim_up, ) orient_list = cmds_orient_constraint(loc_aim_eye, loc_eye) orient_aim_con = "" if orient_list and len(orient_list) > 0: orient_aim_con = orient_list[0] if cmds_exists(loc_ui_eye): # connect ui loc to L/R control cmds_set_driven_keyframe( f"{loc_ui_eye}.ry", itt="linear", ott="linear", currentDriver=f"{ctrl_ui_eye}.tx", driverValue=0, value=0, ) cmds_set_driven_keyframe( f"{loc_ui_eye}.ry", itt="linear", ott="linear", currentDriver=f"{ctrl_ui_eye}.tx", driverValue=1, value=40, ) cmds_set_driven_keyframe( f"{loc_ui_eye}.ry", itt="linear", ott="linear", currentDriver=f"{ctrl_ui_eye}.tx", driverValue=-1, value=-40, ) cmds_set_driven_keyframe( f"{loc_ui_eye}.rx", itt="linear", ott="linear", currentDriver=f"{ctrl_ui_eye}.ty", driverValue=0, value=0, ) cmds_set_driven_keyframe( f"{loc_ui_eye}.rx", itt="linear", ott="linear", currentDriver=f"{ctrl_ui_eye}.ty", driverValue=1, value=-30, ) cmds_set_driven_keyframe( f"{loc_ui_eye}.rx", itt="linear", ott="linear", currentDriver=f"{ctrl_ui_eye}.ty", driverValue=-1, value=40, ) # connect ui loc to C control cmds_set_driven_keyframe( f"{loc_ui_eye}.ry", itt="linear", ott="linear", currentDriver=f"{ctrl_ui_eye_c}.tx", driverValue=0, value=0, ) cmds_set_driven_keyframe( f"{loc_ui_eye}.ry", itt="linear", ott="linear", currentDriver=f"{ctrl_ui_eye_c}.tx", driverValue=1, value=40, ) cmds_set_driven_keyframe( f"{loc_ui_eye}.ry", itt="linear", ott="linear", currentDriver=f"{ctrl_ui_eye_c}.tx", driverValue=-1, value=-40, ) cmds_set_driven_keyframe( f"{loc_ui_eye}.rx", itt="linear", ott="linear", currentDriver=f"{ctrl_ui_eye_c}.ty", driverValue=0, value=0, ) cmds_set_driven_keyframe( f"{loc_ui_eye}.rx", itt="linear", ott="linear", currentDriver=f"{ctrl_ui_eye_c}.ty", driverValue=1, value=-30, ) cmds_set_driven_keyframe( f"{loc_ui_eye}.rx", itt="linear", ott="linear", currentDriver=f"{ctrl_ui_eye_c}.ty", driverValue=-1, value=40, ) constraint_list = cmds_orient_constraint(loc_ui_eye, loc_eye) orient_ui_con = "" if constraint_list and len(constraint_list) > 0: orient_ui_con = constraint_list[0] # create aim at switch cmds_set_driven_keyframe( f"{orient_aim_con}.{loc_aim_eye}W0", itt="linear", ott="linear", currentDriver=attr_aim_at, driverValue=0, value=0, ) cmds_set_driven_keyframe( f"{orient_aim_con}.{loc_aim_eye}W0", itt="linear", ott="linear", currentDriver=attr_aim_at, driverValue=1, value=1, ) cmds_set_driven_keyframe( f"{orient_ui_con}.{loc_ui_eye}W1", itt="linear", ott="linear", currentDriver=attr_aim_at, driverValue=0, value=1, ) cmds_set_driven_keyframe( f"{orient_ui_con}.{loc_ui_eye}W1", itt="linear", ott="linear", currentDriver=attr_aim_at, driverValue=1, value=0, ) # **************************************************************************************************** def clean_up(head_group, head_rig_group): """ This method is responsible for hierarchical organization of objects in the scene. """ # deleting layers layers = [ "sculpted_layer", "corrective_layer", "joints_layer", "head_mesh_layer", "teeth_mesh_layer", "saliva_mesh_layer", "eyeLeft_mesh_layer", "eyeRight_mesh_layer", "eyeshell_mesh_layer", "eyelashes_mesh_layer", "eyeEdge_mesh_layer", "cartilage_mesh_layer", "headMatchPass1_mesh_layer", "headMatchPass2_mesh_layer", "headMatchPass3_mesh_layer", "head_lod1_mesh_layer", "teeth_lod1_mesh_layer", "saliva_lod1_mesh_layer", "eyeLeft_lod1_mesh_layer", "eyeRight_lod1_mesh_layer", "eyeshell_lod1_mesh_layer", "eyelashes_lod1_mesh_layer", "eyeEdge_lod1_mesh_layer", "cartilage_lod1_mesh_layer", "head_lod2_mesh_layer", "teeth_lod2_mesh_layer", "saliva_lod2_mesh_layer", "eyeLeft_lod2_mesh_layer", "eyeRight_lod2_mesh_layer", "eyeshell_lod2_mesh_layer", "eyelashes_lod2_mesh_layer", "eyeEdge_lod2_mesh_layer", "head_lod3_mesh_layer", "teeth_lod3_mesh_layer", "eyeLeft_lod3_mesh_layer", "eyeRight_lod3_mesh_layer", "eyeshell_lod3_mesh_layer", "eyelashes_lod3_mesh_layer", "eyeEdge_lod3_mesh_layer", "head_lod4_mesh_layer", "teeth_lod4_mesh_layer", "eyeLeft_lod4_mesh_layer", "eyeRight_lod4_mesh_layer", "eyeshell_lod4_mesh_layer", "head_lod5_mesh_layer", "teeth_lod5_mesh_layer", "eyeLeft_lod5_mesh_layer", "eyeRight_lod5_mesh_layer", "head_lod6_mesh_layer", "teeth_lod6_mesh_layer", "eyeLeft_lod6_mesh_layer", "eyeRight_lod6_mesh_layer", "head_lod7_mesh_layer", "teeth_lod7_mesh_layer", "eyeLeft_lod7_mesh_layer", "eyeRight_lod7_mesh_layer", ] for layer in layers: if cmds_exists(layer): cmds_delete(layer) if cmds_exists(head_rig_group): cmds_group(parent=head_rig_group, empty=True, name="headRigging_grp") cmds_group(parent=head_rig_group, empty=True, name="headGui_grp") cmds_group(parent=head_group, empty=True, name="morphs_grp") cmds_set_attr("morphs_grp.visibility", 0) if cmds.ls("corrective_*"): cmds_parent("corrective_*", "morphs_grp") cmds_delete("morphs_grp") if cmds_exists("headRigging_grp"): cmds_group(parent="headRigging_grp", empty=True, name="eyesSetup_grp") if both_guis_loaded() and cmds_exists("headGui_grp"): cmds_parent("GRP_C_eyesAim", "headGui_grp") # eyes aim GUI cmds_parent("GRP_faceGUI", "headGui_grp") # 2D GUI # look direction clusters and splines look_dir_cmds = cmds.ls("*lookDir*") for cmd in look_dir_cmds: obj_type = cmds_object_type(cmd).strip() if obj_type not in ("clusterHandle", "cluster", "animCurveUU"): cmds_parent(cmd, "eyesSetup_grp") cmds_parent("LOC_C_eyeDriver", "eyesSetup_grp") # eyes setup if cmds_exists("FACIAL_C_FacialRoot"): cmds_parent_constraint( ["FACIAL_C_FacialRoot", "LOC_C_eyeDriver"], maintainOffset=True ) cmds_delete("gui") cmds_delete("analog_gui") for lod in range(10): layer_name = f"head_lod{lod}_layer.visibility" if cmds_exists(layer_name): cmds_set_attr(layer_name, 0) if cmds_exists("head_lod0_layer.visibility"): cmds_set_attr("head_lod0_layer.visibility", 1) if gui_loaded(): # CTRL_expressions visibility cmds_set_attr("CTRL_expressions.visibility", keyable=True, lock=False) cmds_set_attr("CTRL_expressions.visibility", 0) cmds_set_attr( "CTRL_expressions.visibility", lock=True, keyable=False, channelBox=False ) # deleting body joints animation body_joints = [ "spine_04", "spine_05", "clavicle_l", "upperarm_l", "upperarm_correctiveRoot_l", "upperarm_out_l", "upperarm_fwd_l", "upperarm_in_l", "upperarm_bck_l", "clavicle_out_l", "clavicle_scap_l", "clavicle_r", "upperarm_r", "upperarm_correctiveRoot_r", "upperarm_out_r", "upperarm_fwd_r", "upperarm_in_r", "upperarm_bck_r", "clavicle_out_r", "clavicle_scap_r", "clavicle_pec_l", "clavicle_pec_r", "spine_04_latissimus_l", "spine_04_latissimus_r", "neck_01", "neck_02", "head", ] mel_eval("source channelBoxCommand.mel;") for joint in body_joints: if cmds_exists(joint): mel_eval(f'CBdeleteConnection ("{joint}.sx");') mel_eval(f'CBdeleteConnection ("{joint}.sy");') mel_eval(f'CBdeleteConnection ("{joint}.sz");') mel_eval(f'CBdeleteConnection ("{joint}.tx");') mel_eval(f'CBdeleteConnection ("{joint}.ty");') mel_eval(f'CBdeleteConnection ("{joint}.tz");') mel_eval(f'CBdeleteConnection ("{joint}.rx");') mel_eval(f'CBdeleteConnection ("{joint}.ry");') mel_eval(f'CBdeleteConnection ("{joint}.rz");') # far and near clip plane cmds_set_attr("perspShape.nearClipPlane", 5) cmds_set_attr("perspShape.farClipPlane", 5000) # **************************************************************************************************** def rename_skin_clusters(): cmds_rename("head_mesh_skinCluster", "head_lod0_mesh_skinCluster") cmds_rename("teeth_mesh_skinCluster", "teeth_lod0_mesh_skinCluster") cmds_rename("saliva_mesh_skinCluster", "saliva_lod0_mesh_skinCluster") cmds_rename("eyeLeft_mesh_skinCluster", "eyeLeft_lod0_mesh_skinCluster") cmds_rename("eyeRight_mesh_skinCluster", "eyeRight_lod0_mesh_skinCluster") cmds_rename("eyeshell_mesh_skinCluster", "eyeshell_lod0_mesh_skinCluster") cmds_rename("eyelashes_mesh_skinCluster", "eyelashes_lod0_mesh_skinCluster") cmds_rename("eyeEdge_mesh_skinCluster", "eyeEdge_lod0_mesh_skinCluster") cmds_rename("cartilage_mesh_skinCluster", "cartilage_lod0_mesh_skinCluster") # **************************************************************************************************** def connect_neck_correctives(): """ This method is used for neck setup. Neck deformations are not only coming from the GUI but also from movement of the body. It will connect neck joint rotations with raw controls for corrective blendshapes for neck turn expressions. """ cmds_set_attr("CTRL_neckCorrectivesMultiplyerU.translateY", 0.8) cmds_set_attr("CTRL_neckCorrectivesMultiplyerM.translateY", 0.5) cmds_set_attr("CTRL_neckCorrectivesMultiplyerD.translateY", 0.2) if cmds_exists("neck_01"): cmds_connect_attr("neck_01.rx", "LOC_neck01JointInput.rx") cmds_connect_attr("neck_01.ry", "LOC_neck01JointInput.ry") cmds_connect_attr("neck_01.rz", "LOC_neck01JointInput.rz") if cmds_exists("neck_02"): cmds_connect_attr("neck_02.rx", "LOC_neck02JointInput.rx") cmds_connect_attr("neck_02.ry", "LOC_neck02JointInput.ry") cmds_connect_attr("neck_02.rz", "LOC_neck02JointInput.rz") if cmds_exists("head"): cmds_connect_attr("head.rx", "LOC_headJointInput.rx") cmds_connect_attr("head.ry", "LOC_headJointInput.ry") cmds_connect_attr("head.rz", "LOC_headJointInput.rz") cmds_connect_attr( "LOC_expListOutputToRL.headTurnUpU", "CTRL_expressions.headTurnUpU" ) cmds_connect_attr( "LOC_expListOutputToRL.headTurnUpM", "CTRL_expressions.headTurnUpM" ) cmds_connect_attr( "LOC_expListOutputToRL.headTurnUpD", "CTRL_expressions.headTurnUpD" ) cmds_connect_attr( "LOC_expListOutputToRL.headTurnDownU", "CTRL_expressions.headTurnDownU" ) cmds_connect_attr( "LOC_expListOutputToRL.headTurnDownM", "CTRL_expressions.headTurnDownM" ) cmds_connect_attr( "LOC_expListOutputToRL.headTurnDownD", "CTRL_expressions.headTurnDownD" ) cmds_connect_attr( "LOC_expListOutputToRL.headTurnLeftU", "CTRL_expressions.headTurnLeftU" ) cmds_connect_attr( "LOC_expListOutputToRL.headTurnLeftM", "CTRL_expressions.headTurnLeftM" ) cmds_connect_attr( "LOC_expListOutputToRL.headTurnLeftD", "CTRL_expressions.headTurnLeftD" ) cmds_connect_attr( "LOC_expListOutputToRL.headTurnRightU", "CTRL_expressions.headTurnRightU" ) cmds_connect_attr( "LOC_expListOutputToRL.headTurnRightM", "CTRL_expressions.headTurnRightM" ) cmds_connect_attr( "LOC_expListOutputToRL.headTurnRightD", "CTRL_expressions.headTurnRightD" ) cmds_connect_attr( "LOC_expListOutputToRL.headTiltLeftU", "CTRL_expressions.headTiltLeftU" ) cmds_connect_attr( "LOC_expListOutputToRL.headTiltLeftM", "CTRL_expressions.headTiltLeftM" ) cmds_connect_attr( "LOC_expListOutputToRL.headTiltLeftD", "CTRL_expressions.headTiltLeftD" ) cmds_connect_attr( "LOC_expListOutputToRL.headTiltRightU", "CTRL_expressions.headTiltRightU" ) cmds_connect_attr( "LOC_expListOutputToRL.headTiltRightM", "CTRL_expressions.headTiltRightM" ) cmds_connect_attr( "LOC_expListOutputToRL.headTiltRightD", "CTRL_expressions.headTiltRightD" ) cmds_set_attr("GRP_neckSetupGUI.visibility", 0) # **************************************************************************************************** def connect_follow_head(): # 2d + aim to follow head """ This method would connect switch which will enable user to enable/disable option to GUI and Aim interface to follow head rotations. """ cmds_space_locator(name="LOC_world") if cmds_exists("headGui_grp"): cmds_parent("LOC_world", "headGui_grp") cmds_set_attr("LOC_world.rx", 0.0) cmds_set_attr("LOC_world.ry", 0.0) cmds_set_attr("LOC_world.rz", 0.0) cmds_set_attr("LOC_world.visibility", 0) if cmds_exists("head"): cmds_parent_constraint( ["head", "GRP_faceGUI"], maintainOffset=True, name="GRP_faceGUI_parentConstraint1", ) cmds_parent_constraint( ["LOC_world", "GRP_faceGUI"], maintainOffset=True, name="GRP_faceGUI_parentConstraint1", ) cmds_set_attr("GRP_faceGUI_parentConstraint1.interpType", 0) cmds_set_driven_keyframe( "GRP_faceGUI_parentConstraint1.LOC_worldW1", itt="linear", ott="linear", currentDriver="CTRL_faceGUIfollowHead.ty", driverValue=0.0, value=1.0, ) cmds_set_driven_keyframe( "GRP_faceGUI_parentConstraint1.LOC_worldW1", itt="linear", ott="linear", currentDriver="CTRL_faceGUIfollowHead.ty", driverValue=1.0, value=0.0, ) cmds_set_driven_keyframe( "GRP_faceGUI_parentConstraint1.headW0", itt="linear", ott="linear", currentDriver="CTRL_faceGUIfollowHead.ty", driverValue=0.0, value=0.0, ) cmds_set_driven_keyframe( "GRP_faceGUI_parentConstraint1.headW0", itt="linear", ott="linear", currentDriver="CTRL_faceGUIfollowHead.ty", driverValue=1.0, value=1.0, ) cmds_parent_constraint( ["head", "GRP_C_eyesAim"], maintainOffset=True, name="GRP_C_eyesAim_parentConstraint1", ) cmds_parent_constraint( ["LOC_world", "GRP_C_eyesAim"], maintainOffset=True, name="GRP_C_eyesAim_parentConstraint1", ) cmds_set_attr("GRP_C_eyesAim_parentConstraint1.interpType", 0) cmds_set_driven_keyframe( "GRP_C_eyesAim_parentConstraint1.LOC_worldW1", itt="linear", ott="linear", currentDriver="CTRL_eyesAimFollowHead.ty", driverValue=0.0, value=1.0, ) cmds_set_driven_keyframe( "GRP_C_eyesAim_parentConstraint1.LOC_worldW1", itt="linear", ott="linear", currentDriver="CTRL_eyesAimFollowHead.ty", driverValue=1.0, value=0.0, ) cmds_set_driven_keyframe( "GRP_C_eyesAim_parentConstraint1.headW0", itt="linear", ott="linear", currentDriver="CTRL_eyesAimFollowHead.ty", driverValue=0.0, value=0.0, ) cmds_set_driven_keyframe( "GRP_C_eyesAim_parentConstraint1.headW0", itt="linear", ott="linear", currentDriver="CTRL_eyesAimFollowHead.ty", driverValue=1.0, value=1.0, ) # Wrappers around maya functions in order to catch/print errors def cmds_parent(*args, **kwargs): try: return cmds.parent(*args, **kwargs) except Exception as ex: stderr.write(f"Failed to parent. Error: {ex} \n") def cmds_set_attr(*args, **kwargs): try: cmds.setAttr(*args, **kwargs) except Exception as ex: stderr.write(f"Failed to set attribute. Error: {ex} \n") def cmds_connect_attr(attr1, attr2): try: cmds.connectAttr(attr1, attr2) except Exception as ex: stderr.write(f"Failed to connect attributes. Error: {ex} \n") def cmds_get_attr(attr): try: return cmds.getAttr(attr) except Exception as ex: stderr.write(f"Failed to get attribute. Error: {ex} \n") def cmds_add_attr(*args, **kwargs): try: return cmds.addAttr(*args, **kwargs) except Exception as ex: stderr.write(f"Failed to add attribute. Error: {ex} \n") def cmds_xform(*args, **kwargs): try: return cmds.xform(*args, **kwargs) except Exception as ex: stderr.write(f"Transformation failed. Error: {ex} \n") def cmds_space_locator(**kwargs): try: return cmds.spaceLocator(**kwargs) except Exception as ex: stderr.write(f"Setting locator failed. Error: {ex} \n") def cmds_delete(*args): try: cmds.delete(*args) except Exception as ex: stderr.write(f"Deletion failed. Error: {ex} \n") def cmds_set_driven_keyframe(*args, **kwargs): try: cmds.setDrivenKeyframe(*args, **kwargs) except Exception as ex: stderr.write(f"Setting driven keyframe failed. Error: {ex} \n") def cmds_rename(old_name, new_name): try: cmds.rename(old_name, new_name) except Exception as ex: stderr.write(f"Renaming failed. Error: {ex} \n") def cmds_select(*args, **kwargs): try: cmds.select(*args, **kwargs) except Exception as ex: stderr.write(f"Select command failed. Error: {ex} \n") def cmds_cluster(**kwargs): try: cmds.cluster(**kwargs) except Exception as ex: stderr.write(f"Cluster command failed. Error: {ex} \n") def cmds_curve(**kwargs): try: cmds.curve(**kwargs) except Exception as ex: stderr.write(f"Curve command failed. Error: {ex} \n") def cmds_parent_constraint(*args, **kwargs): try: cmds.parentConstraint(*args, **kwargs) except Exception as ex: stderr.write(f"Parent constraint command failed. Error: {ex} \n") def cmds_aim_constraint(*args, **kwargs): try: cmds.aimConstraint(*args, **kwargs) except Exception as ex: stderr.write(f"Aim constraint command failed. Error: {ex} \n") def cmds_orient_constraint(*args, **kwargs): try: return cmds.orientConstraint(*args, **kwargs) except Exception as ex: stderr.write(f"Orient constraint command failed. Error: {ex} \n") def cmds_point_constraint(target, object): try: cmds.pointConstraint(target, object) except Exception as ex: stderr.write(f"Point constraint command failed. Error: {ex} \n") def cmds_group(**kwargs): try: cmds.group(**kwargs) except Exception as ex: stderr.write(f"Group command failed. Error: {ex} \n") def cmds_exists(*args, **kwargs): try: return cmds.objExists(*args, **kwargs) except Exception as ex: stderr.write(f"Failed to find entity. Error: {ex} \n") def cmds_object_type(*args, **kwargs): try: return cmds.objectType(*args, **kwargs) except Exception as ex: stderr.write(f"Failed to find object type. Error: {ex} \n") def mel_eval(*args, **kwargs): try: return mel.eval(*args, **kwargs) except Exception as ex: stderr.write(f"Failed to evaluate mel command. Error: {ex} \n")