2023-04-20 21:44:56 +08:00
|
|
|
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 adjust_aim_control():
|
|
|
|
"""
|
|
|
|
This method would properly position aim controls based on the position of eye joints for specific characters.
|
|
|
|
"""
|
|
|
|
if not (
|
|
|
|
cmds_exists("FACIAL_C_FacialRoot")
|
|
|
|
and cmds_exists("FACIAL_L_Eye")
|
|
|
|
and cmds_exists("FACIAL_R_Eye")
|
|
|
|
):
|
|
|
|
return
|
|
|
|
|
2023-06-30 14:11:40 +08:00
|
|
|
facial_root_jnt = cmds_xform("FACIAL_C_FacialRoot", query=True, worldSpace=True, translation=True)
|
|
|
|
eye_jnt_left = cmds_xform("FACIAL_L_Eye", query=True, worldSpace=True, translation=True)
|
|
|
|
eye_jnt_right = cmds_xform("FACIAL_R_Eye", query=True, worldSpace=True, translation=True)
|
2023-04-20 21:44:56 +08:00
|
|
|
|
2023-06-30 14:11:40 +08:00
|
|
|
cmds_xform("LOC_C_eyeDriver", worldSpace=True, absolute=True, translation=facial_root_jnt)
|
|
|
|
cmds_xform("LOC_L_eyeDriver", worldSpace=True, absolute=True, translation=eye_jnt_left)
|
|
|
|
cmds_xform("LOC_R_eyeDriver", worldSpace=True, absolute=True, translation=eye_jnt_right)
|
|
|
|
|
|
|
|
cmds_xform("LOC_L_eyeAimUp", worldSpace=True, absolute=True, translation=eye_jnt_left)
|
2023-04-20 21:44:56 +08:00
|
|
|
cmds_set_attr("LOC_L_eyeAimUp.ty", 10.0)
|
2023-06-30 14:11:40 +08:00
|
|
|
cmds_xform("LOC_R_eyeAimUp", worldSpace=True, absolute=True, translation=eye_jnt_right)
|
|
|
|
cmds_set_attr("LOC_R_eyeAimUp.ty", 10.0)
|
2023-04-20 21:44:56 +08:00
|
|
|
|
|
|
|
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)
|
|
|
|
|
|
|
|
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)
|
|
|
|
cmds_parent("GRP_R_eyeAim", "LOC_temp")
|
2023-06-30 14:11:40 +08:00
|
|
|
cmds_xform("GRP_R_eyeAim", worldSpace=True, absolute=True, translation=eye_jnt_right)
|
2023-04-20 21:44:56 +08:00
|
|
|
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)
|
|
|
|
|
|
|
|
|
|
|
|
# ****************************************************************************************************
|
2023-06-30 14:11:40 +08:00
|
|
|
def connect_expression(driverCtrl, driverAttr, minVal, maxVal, driverKey1, driverKey2, expCtrl, expAttr, expKey1,
|
|
|
|
expKey2):
|
2023-04-20 21:44:56 +08:00
|
|
|
"""
|
|
|
|
Connects one GUI control with raw control.
|
|
|
|
"""
|
|
|
|
|
|
|
|
# create driver attribute if dont exists
|
|
|
|
if not cmds_exists(f"{driverCtrl}.{driverAttr}"):
|
2023-06-30 14:11:40 +08:00
|
|
|
cmds_set_attr(driverCtrl, longName=driverAttr, keyable=True, attributeType="float", minValue=minVal,
|
|
|
|
maxValue=maxVal, dv=0.0)
|
2023-04-20 21:44:56 +08:00
|
|
|
|
|
|
|
# connect CTRL driver with driven expression
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
|
|
|
|
|
|
|
|
# ****************************************************************************************************
|
|
|
|
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
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# brows lateral
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# brows raise
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# ears up
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# eyes widen/blink
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# lid press
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# eyes squint inner
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# eyes cheek raise
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# face scrunch
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# eyelids up/down (and eyes relax)
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
|
|
|
|
if analog_gui_loaded():
|
|
|
|
# eyes look up/down/left/right
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# pupils wide/narrow
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# eyes parallel
|
2023-06-30 14:11:40 +08:00
|
|
|
connect_expression("CTRL_C_eye_parallelLook", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions",
|
|
|
|
"eyeParallelLookDirection", 0.0, 1.0)
|
2023-04-20 21:44:56 +08:00
|
|
|
# eyelashes tweakers
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# nose wrinkle/depress/dilate/compress
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# nose wrinkle upper
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# nasolabial deepener
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# cheek suck/blow
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# lips blow
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# mouth up/down/left/right
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# upper lip raise
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# lower lip depress
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# corner pull
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# mouth stretch
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# mouth stretch lips close
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# dimpler
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# corner depress
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# mouth press
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# purse
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# lips towards
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# funnel
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# lips together
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# upper lip bite
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# lower lip bite
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# lips tighten
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# lips press
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# sharp corner pull
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# mouth sticky
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# sticky lips
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# lips push/pull
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# lips thin/thick
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# corner sharpen
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# lips towards
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# lips shift
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# lips roll
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# corners
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# tongue up/down/left/right
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# tongue roll up/down/left/right
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# tongue tip up/down/left/right
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# tongue in/out
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# tongue press
|
2023-06-30 14:11:40 +08:00
|
|
|
connect_expression("CTRL_C_tongue_press", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "tonguePress", 0.0, 1.0)
|
2023-04-20 21:44:56 +08:00
|
|
|
# tongue wide/narrow
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# jaw open
|
2023-06-30 14:11:40 +08:00
|
|
|
connect_expression("CTRL_C_jaw", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "jawOpen", 0.0, 1.0)
|
2023-04-20 21:44:56 +08:00
|
|
|
# jaw left/right
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# jaw back/fwd
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# jaw clench
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# chin raise
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# chin compress
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# jaw open extreme
|
2023-06-30 14:11:40 +08:00
|
|
|
connect_expression("CTRL_C_jaw_openExtreme", "ty", 0.0, 1.0, 0.0, 1.0, "CTRL_expressions", "jawOpenExtreme", 0.0,
|
|
|
|
1.0)
|
2023-04-20 21:44:56 +08:00
|
|
|
# neck stretch
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# swallow
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# mastoid contract
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# throat down/up
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# digastric down/up
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# exhale/inhale
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# upper teeth
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
# lower teeth
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
|
|
|
|
# look at switch
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
|
|
|
|
|
|
|
|
# ****************************************************************************************************
|
|
|
|
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"
|
|
|
|
|
2023-06-30 14:11:40 +08:00
|
|
|
eye_setup(jntEyeL, locEyeL, locUIEyeL, locAimEyeL, ctrlEyeL, ctrlUIEyeL, attrAimAt, ctrlUIEyeC, locEyeRoot,
|
|
|
|
locAimUpL)
|
|
|
|
eye_setup(jntEyeR, locEyeR, locUIEyeR, locAimEyeR, ctrlEyeR, ctrlUIEyeR, attrAimAt, ctrlUIEyeC, locEyeRoot,
|
|
|
|
locAimUpR)
|
2023-04-20 21:44:56 +08:00
|
|
|
|
|
|
|
# create visibility switch
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
|
|
|
|
# connect convergence attribute
|
|
|
|
current_tzl = cmds_get_attr(f"{offGrpEyeL}.tz")
|
|
|
|
current_tzr = cmds_get_attr(f"{offGrpEyeR}.tz")
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
|
|
|
|
# look direction splines
|
2023-06-30 14:11:40 +08:00
|
|
|
cmds_curve(degree=1, point=([0, 0, 0], [0, 0, 0]), knot=(0, 1), name="L_lookDirection")
|
2023-04-20 21:44:56 +08:00
|
|
|
cmds_set_attr("L_lookDirection.overrideEnabled", 1)
|
|
|
|
cmds_set_attr("L_lookDirection.overrideColor", 1)
|
|
|
|
cmds_set_attr("L_lookDirection.overrideDisplayType", 2)
|
2023-06-30 14:11:40 +08:00
|
|
|
cmds_curve(degree=1, point=([0, 0, 0], [0, 0, 0]), knot=(0, 1), name="R_lookDirection")
|
2023-04-20 21:44:56 +08:00
|
|
|
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
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
|
|
|
|
|
|
|
|
# ****************************************************************************************************
|
2023-06-30 14:11:40 +08:00
|
|
|
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):
|
2023-04-20 21:44:56 +08:00
|
|
|
"""
|
|
|
|
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
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
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
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
|
|
|
|
# connect ui loc to C control
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
|
|
|
|
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
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
|
|
|
|
# ****************************************************************************************************
|
|
|
|
def clean_up(head_group, head_rig_group):
|
|
|
|
"""
|
|
|
|
This method is responsible for hierarchical organization of objects in the scene.
|
|
|
|
"""
|
|
|
|
|
|
|
|
# deleting layers
|
2023-06-30 14:11:40 +08:00
|
|
|
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"]
|
2023-04-20 21:44:56 +08:00
|
|
|
|
|
|
|
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
|
2023-06-30 14:11:40 +08:00
|
|
|
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"]
|
|
|
|
|
2023-04-20 21:44:56 +08:00
|
|
|
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")
|
|
|
|
|
2023-06-30 14:11:40 +08:00
|
|
|
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")
|
2023-04-20 21:44:56 +08:00
|
|
|
|
|
|
|
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)
|
|
|
|
|
2023-06-30 14:11:40 +08:00
|
|
|
if not cmds_exists("head"):
|
|
|
|
return
|
2023-04-20 21:44:56 +08:00
|
|
|
|
2023-06-30 14:11:40 +08:00
|
|
|
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)
|
2023-04-20 21:44:56 +08:00
|
|
|
|
|
|
|
|
|
|
|
# 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")
|