我一直在跟踪有关数字教程的脚本编写教程,在一些视频中,导师制作了一个工具,使用MEL将伽马校正节点添加到任何选定的着色器中。为了学习,我想尝试用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)当我运行这个程序时,我会得到以下错误:
错误:太多对象或values.Traceback (最近一次调用):File "",第17行,在TypeError中:太多对象或值。
我认为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中行不通。
发布于 2016-11-04 23:11:17
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。
https://stackoverflow.com/questions/40380818
复制相似问题