Maya Logic Compiler - 节点逻辑编译器

将 Maya 节点网络反向编译为可复用 Python 代码的实用工具

工具简介

Maya Logic Compiler 是一个节点逻辑编译器,能够将场景中手动连接的节点网络"反编译"成可复用的 Python 代码。

开发动机: 每次在 Maya 中手动连接好节点实现功能后,转头又需要手写代码重现同样的逻辑。这个工具就是为了解决这个重复劳动问题而诞生的。目前工具还不支持 约束节点驱动节点 等。


快速上手

版本信息

  • 版本: 2.0.0
  • 兼容性: Maya 2022+
  • 开发环境: Python 3.x

安装使用

在 Maya Script Editor 中运行:

1
2
3
4
import sys
sys.path.append(r"D:\Pycharmpro\Maya2026_pro")  # 修改为你的路径
from LogicCompiler import ui
ui.show()

基本操作流程

工具界面

使用步骤:

  1. 添加驱动端(Source) → 选择场景中的驱动节点 → 点击"添加 Source"
  2. 添加被驱动端(Target) → 选择被驱动节点 → 点击"添加 Target"
  3. 添加中间节点(Intermediate) → 选择中间的所有逻辑节点 → 点击"添加中间节点"
  4. 生成代码 → 点击"生成代码"按钮
  5. 复制/测试 → 生成的代码会显示在下方文本框中,可以直接复制或在工具中测试

使用示例

示例场景

假设您在场景中创建了这样的节点连接:

1
2
3
4
5
6
pCube1 (Source)
  └─ translateX ────────┐
              multiplyDivide1 (中间节点)
                    ↓ outputX
pSphere1 (Target) ←─────┘

说明: pCube1 的 X 轴位移通过 multiplyDivide1 节点进行除法运算后,驱动 pSphere1 的位移。

操作步骤

  1. 选中 pCube1 → 点击"添加 Source"
  2. 选中 pSphere1 → 点击"添加 Target"
  3. 选中 multiplyDivide1 → 点击"添加中间节点"
  4. 点击"生成代码"

生成的代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import maya.cmds as cmds

def build_connection_logic(source, target):
    """
    重建节点逻辑
    
    Args:
        source (str): 驱动端节点
        target (str): 被驱动端节点
    """
    cmds.undoInfo(openChunk=True)
    try:
        # 1. Create Intermediate Nodes
        multiplyDivide1_var = cmds.createNode('multiplyDivide', 
                                              name=f'{source}_multiplyDivide1_gen')
        
        # 2. Set Attributes (Skip Default Values)
        cmds.setAttr(f"{multiplyDivide1_var}.operation", 2)  # Division
        cmds.setAttr(f"{multiplyDivide1_var}.input2X", 2.0)
        
        # 3. Connect Attributes
        cmds.connectAttr(f"{source}.translateX", f"{multiplyDivide1_var}.input1X")
        cmds.connectAttr(f"{multiplyDivide1_var}.outputX", f"{target}.translateX")
        
        print(f'Success: Logic connected from {source} to {target}')
    finally:
        cmds.undoInfo(closeChunk=True)

使用生成的代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 应用到新的节点对
build_connection_logic('pCube2', 'pCylinder1')

# 批量应用
nodes_pairs = [
    ('pCube1', 'pSphere1'),
    ('pCube2', 'pSphere2'),
    ('pCube3', 'pSphere3'),
]
for source, target in nodes_pairs:
    build_connection_logic(source, target)

工具功能

支持的数据类型

工具能够正确识别和处理以下 Maya 属性类型:

  • 数值类型: float, double, int, bool
  • 向量类型: double3, float3(如 translate, rotate, scale)
  • 字符串类型: string
  • 枚举类型: enum(如 multiplyDivide 的 operation)
  • 矩阵类型: matrix(如 multMatrix 节点)
  • 消息类型: message(使用 force=True 特殊处理)

多对多连接支持

工具支持灵活的节点连接模式:

一对多(One-to-Many):

1
2
一个 Source → 多个 Target
示例:一个控制器驱动多个物体

多对一(Many-to-One):

1
2
多个 Source → 一个 Target
示例:多个输入混合后驱动一个目标

多对多(Many-to-Many):

1
2
多个 Source → 多个 Target
示例:复杂的多对象联动系统

智能属性过滤

自动跳过以下属性:

  • ✅ 默认值属性(无需手动设置)
  • ✅ 已连接属性(避免代码冲突)
  • ✅ 只读属性(系统属性)

只导出必要的属性:

  • ✅ 用户修改过的值
  • ✅ 未被连接的可设置属性
  • ✅ 完整的数组和复合属性

节点网络验证

自动检测漏选节点:

如果节点网络是这样:

1
A → B → C → D

但你只选择了 B 作为中间节点,工具会提示:

1
Warning: 检测到漏选的节点: ['C']

这样可以确保生成的代码包含完整的节点逻辑。

名称智能清洗

自动处理特殊命名情况:

1
2
3
4
5
6
7
8
# 去除命名空间
"character:Spine_FK_ctrl"  "Spine_FK_ctrl_var"

# 去除层级路径
"|group1|pCube1"  "pCube1_var"

# 清理特殊字符
"node.with@special#chars"  "node_with_special_chars_var"
评论
使用 Hugo 构建
主题 StackJimmy 设计