123 lines
3.9 KiB
Python
123 lines
3.9 KiB
Python
|
#!/usr/bin/env python
|
|||
|
# -*- coding: utf-8 -*-
|
|||
|
|
|||
|
import maya.cmds as cmds
|
|||
|
import maya.mel as mel
|
|||
|
from Core import Descriptor
|
|||
|
|
|||
|
def define_joint_for_lod(lod):
|
|||
|
"""
|
|||
|
为指定LOD级别定义关节设置
|
|||
|
|
|||
|
参数:
|
|||
|
lod (int): LOD级别
|
|||
|
"""
|
|||
|
# 重置所有控制器的位移属性
|
|||
|
controllers = [
|
|||
|
# 嘴部控制器
|
|||
|
"CTRL_C_mouth", "CTRL_C_tongue_wideNarrow", "CTRL_C_jaw",
|
|||
|
"CTRL_C_jaw_fwdBack", "CTRL_L_mouth_pushPullU", "CTRL_R_mouth_pushPullU",
|
|||
|
"CTRL_L_mouth_pushPullD", "CTRL_R_mouth_pushPullD",
|
|||
|
"CTRL_L_mouth_cornerPull", "CTRL_R_mouth_cornerPull",
|
|||
|
"CTRL_L_mouth_cornerUD", "CTRL_R_mouth_cornerUD",
|
|||
|
"CTRL_L_mouth_cornerFwdBack", "CTRL_R_mouth_cornerFwdBack",
|
|||
|
"CTRL_L_mouth_lipRoll", "CTRL_R_mouth_lipRoll",
|
|||
|
"CTRL_C_mouth_lipRollU", "CTRL_C_mouth_lipRollD",
|
|||
|
|
|||
|
# 舌头控制器
|
|||
|
"CTRL_C_tongue_tip", "CTRL_C_tongue_middle", "CTRL_C_tongue_back",
|
|||
|
"CTRL_C_tongue_curl", "CTRL_C_tongue_height",
|
|||
|
|
|||
|
# 眼睛控制器
|
|||
|
"CTRL_L_eye", "CTRL_R_eye", "CTRL_C_eye",
|
|||
|
"CTRL_L_eye_upperLid", "CTRL_R_eye_upperLid",
|
|||
|
"CTRL_L_eye_lowerLid", "CTRL_R_eye_lowerLid",
|
|||
|
|
|||
|
# 眉毛控制器
|
|||
|
"CTRL_L_brow_inner", "CTRL_R_brow_inner",
|
|||
|
"CTRL_L_brow_middle", "CTRL_R_brow_middle",
|
|||
|
"CTRL_L_brow_outer", "CTRL_R_brow_outer",
|
|||
|
|
|||
|
# 鼻子控制器
|
|||
|
"CTRL_C_nose", "CTRL_C_nose_tip",
|
|||
|
"CTRL_L_nose_nostril", "CTRL_R_nose_nostril",
|
|||
|
|
|||
|
# 脸颊控制器
|
|||
|
"CTRL_L_cheek_raise", "CTRL_R_cheek_raise",
|
|||
|
"CTRL_L_cheek_outer", "CTRL_R_cheek_outer",
|
|||
|
|
|||
|
# 下巴控制器
|
|||
|
"CTRL_C_chin", "CTRL_C_chin_raise"
|
|||
|
]
|
|||
|
|
|||
|
# 重置所有控制器的X轴和Y轴位移
|
|||
|
for ctrl in controllers:
|
|||
|
try:
|
|||
|
cmds.setAttr(f"{ctrl}.translateX", 0)
|
|||
|
cmds.setAttr(f"{ctrl}.translateY", 0)
|
|||
|
except:
|
|||
|
continue
|
|||
|
|
|||
|
# 清除选择
|
|||
|
cmds.select(clear=True)
|
|||
|
|
|||
|
# 处理RL4节点
|
|||
|
exists = False
|
|||
|
rl4_nodes = cmds.ls(type="embeddedNodeRL4")
|
|||
|
if rl4_nodes:
|
|||
|
exists = True
|
|||
|
cmds.delete(rl4_nodes)
|
|||
|
|
|||
|
# 修复LOD 0的关节
|
|||
|
mel.eval('SGRepairJointForLOD 0')
|
|||
|
|
|||
|
# 如果存在RL4节点,重新创建
|
|||
|
if exists:
|
|||
|
dna = Descriptor(wd=True)
|
|||
|
if cmds.file(dna, query=True, exists=True):
|
|||
|
name = f"rl4Embedded_{Descriptor(n=True)}_rl"
|
|||
|
mel.eval(f'SGCreateRL4Node "{dna}" "{name}"')
|
|||
|
|
|||
|
# 处理蒙皮和关节
|
|||
|
mel.eval('SGFastUnbindSkinCluster')
|
|||
|
mel.eval(f'SGRepairJointForLOD {lod}')
|
|||
|
mel.eval(f'SGDeleteJointForLOD {lod}')
|
|||
|
mel.eval('SGFastBindSkinCluster')
|
|||
|
|
|||
|
def _get_control_list():
|
|||
|
"""
|
|||
|
获取需要重置的控制器列表
|
|||
|
|
|||
|
返回:
|
|||
|
list: 控制器名称列表
|
|||
|
"""
|
|||
|
return [
|
|||
|
# 嘴部控制器
|
|||
|
"CTRL_C_mouth", "CTRL_C_tongue_wideNarrow", "CTRL_C_jaw",
|
|||
|
"CTRL_L_mouth_pushPullU", "CTRL_R_mouth_pushPullU",
|
|||
|
"CTRL_L_mouth_pushPullD", "CTRL_R_mouth_pushPullD",
|
|||
|
|
|||
|
# 眼睛控制器
|
|||
|
"CTRL_L_eye", "CTRL_R_eye", "CTRL_C_eye",
|
|||
|
"CTRL_L_eye_blink", "CTRL_R_eye_blink",
|
|||
|
|
|||
|
# 眉毛控制器
|
|||
|
"CTRL_L_brow_raiseIn", "CTRL_R_brow_raiseIn",
|
|||
|
"CTRL_L_brow_raiseOut", "CTRL_R_brow_raiseOut",
|
|||
|
|
|||
|
# 下巴控制器
|
|||
|
"CTRL_C_jaw_fwdBack", "CTRL_C_jaw_openExtreme",
|
|||
|
|
|||
|
# 舌头控制器
|
|||
|
"CTRL_C_tongue_move", "CTRL_C_tongue_bendTwist",
|
|||
|
"CTRL_C_tongue_tipMove", "CTRL_C_tongue_inOut",
|
|||
|
|
|||
|
# 其他面部控制器
|
|||
|
"CTRL_L_nose", "CTRL_R_nose",
|
|||
|
"CTRL_L_mouth_corner", "CTRL_R_mouth_corner",
|
|||
|
"CTRL_L_mouth_stretch", "CTRL_R_mouth_stretch",
|
|||
|
|
|||
|
# 系统控制器
|
|||
|
"CTRL_lookAtSwitch", "CTRL_convergenceSwitch",
|
|||
|
"CTRL_faceGUIfollowHead", "CTRL_eyesAimFollowHead"
|
|||
|
]
|