MetaFusion/scripts/Reference/SGCreateRL4Node.py

70 lines
1.9 KiB
Python
Raw Normal View History

2025-01-17 02:30:36 +08:00
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
版权所有: 清泉时代科技有限公司
联系方式: q.100@qq.com
创建日期: 2023/08/08
"""
import maya.cmds as cmds
import maya.mel as mel
def sg_create_rl4_node(dna, name):
"""
创建RL4节点
参数:
dna (str): DNA文件路径
name (str): 节点名称
"""
# 删除现有的RL4节点
mel.eval('SGDeleteRL4Node')
# 重置所有关节的颜色
joints = cmds.SGGetJoints()
for joint in joints:
cmds.SGSetColor(joint, 0, 0, 0, 0, 0, 0)
# 查找有效的LOD级别
lod = None
for i in range(8):
joint_lod = cmds.SGGetJoints(lod=i, type="string")
exists = True
# 检查所有关节是否存在
for joint in joint_lod:
if not cmds.objExists(joint):
exists = False
break
if exists:
lod = i
break
# 修复LOD 0的关节
mel.eval('SGRepairJointForLOD 0')
# 设置命名空间和属性路径
if cmds.namespace(exists="DHIhead"):
joint_name = "DHIhead:<objName>.<attrName>"
else:
joint_name = "<objName>.<attrName>"
# 设置各种命名模式
anim_multiplier_name = "FRM_WMmultipliers.<objName>_<attrName>"
blend_shape_name = "<objName>_blendShapes.<attrName>"
control_name = "<objName>.<attrName>"
# 创建嵌入式RL4节点
cmds.createEmbeddedNodeRL4(
dfp=dna, # DNA文件路径
amn=anim_multiplier_name, # 动画乘数名称
bsn=blend_shape_name, # 混合变形名称
cn=control_name, # 控制器名称
jn=joint_name, # 关节名称
n=name # 节点名称
)
# 删除指定LOD级别的关节
mel.eval(f'SGDeleteJointForLOD {lod}')