gpt4 book ai didi

python - Mel 到 Python 的难度

转载 作者:行者123 更新时间:2023-12-01 03:36:03 27 4
gpt4 key购买 nike

我一直在关注数字导师的脚本编写教程,在一些视频中,导师制作了一个工具,可以使用 MEL 将 Gamma 校正节点添加到任何选定的着色器,为了我的学习,我想我会尝试用 Python 重写代码但我正在努力将一段 MEL 代码转换为 Python。

到目前为止我的代码是这样的:

import maya.cmds as cmds

selMat = cmds.ls(sl=True, mat=True)

if len(selMat) < 1:
cmds.warning('Select at least one Maya or Mental Ray Shader to apply gamma correct node to.')

for mat in selMat:

gammaCorrect_util = cmds.shadingNode('gammaCorrect', asUtility=True)
rename_gamma = cmds.rename(gammaCorrect_util, ('gamma_' + mat))
cmds.setAttr((rename_gamma + '.gammaX'), 0.45)
cmds.setAttr((rename_gamma + '.gammaY'), 0.45)
cmds.setAttr((rename_gamma + '.gammaZ'), 0.45)

if cmds.attributeQuery('color', mat): # << error here

connection_to_mat = cmds.listConnections(mat + '.color')
if len(connection_to_mat) == 1:

cmds.connectAttr ((connection_to_mat + '.outColor'), (rename_gamma + '.value'), f=True)
cmds.connectAttr ((rename_gamma + '.outValue'), (mat + '.color'), f=True)

当我运行此命令时,出现以下错误:

Error: Too many objects or values.Traceback (most recent call last): File "", line 17, in TypeError: Too many objects or values.

我认为问题所在的 MEL 代码是:

if(`attributeExists "color" $mat`){
string $connection_to_mat[] = `listConnections($mat + ".color")`;
if(size($connection_to_mat) == 1){
connectAttr -f ($connection_to_mat[0] + ".outColor") ($rename_gamma + ".value");
connectAttr -f ($rename_gamma + ".outValue") ($mat + ".color");

我不确定如何在Python中转换和使用“attributeQuery”命令来代替MEL中的“attributeExists”,导师还定义了预置变量“$connection_to_mat[]”,但这在Python中不起作用。

最佳答案

attributeQuery 仅采用一个未命名参数,即属性。您必须使用节点标志指定节点,与 MEL 版本相同。

cmds.attributeQuery('color', n=mat, exists=True)

listConnections 返回一个数组。您需要检查是否存在一些连接,如果有,请使用第一个连接:connection_to_mat[0]

顺便说一句,如果您指定需要插头,则不必将字符串与“.outColor”连接起来

cmds.listConnections(mat + '.color', p=True)
// result ["someNode.outColor"]

这更好,因为传入属性可能有不同的命名,或者是复合的子属性。示例:someNode.colors.outColor1。无论它是什么,您都可以将其提供给 connectAttr

关于python - Mel 到 Python 的难度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40380818/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com