2017-08-02 148 views
1

所以,伙计们,这是关于玛雅,蟒蛇的问题。玛雅Python,连接到2列表

我可以创建一个循环,并设置着色颜色与R着色器B颜色以G和shaderC到B

for i in range(5): 
    shader = cmds.shadingNode ('surfaceShader', name=('mm'+str(i)), asShader=True) 
    cmds.sets(renderable=True, noSurfaceShader=True, empty=True, name=('mmSG'+str(i))) 
    cmds.setAttr(shader +'.outColor', 1,0,0) 

这是我到目前为止,我在每3个步骤stucking ...

回答

1

就快 - 你只需要连接着色器的outColor对着色组的surfaceShader属性:

import maya.cmds as cmds 

for i in range(5): 
    shader = cmds.shadingNode ('surfaceShader', name=('mm'+str(i)), asShader=True) 
    sg = cmds.sets(renderable=True, noSurfaceShader=True, empty=True, name=('mmSG'+str(i))) 
    cmds.setAttr(shader +'.outColor', 1,0,0) 
    cmds.connectAttr(shader + ".outColor", sg + ".surfaceShader") 

编辑

我误解了OP的意图。如果这个想法是让一组着色器与指定的颜色,你会想要做这样的事情:

colors = {'red': (1,0,0), 'blue': (0,1,0), 'green':(0,0,1)} 

    for name, color in colors.items(): 
     shader = cmds.shadingNode ('surfaceShader', name=(name), asShader=True) 
     sg = cmds.sets(renderable=True, noSurfaceShader=True, empty=True, name=(name + "SG") 
     cmds.setAttr(shader +'.outColor', color[0], color[1], color[2]) 
     cmds.connectAttr(shader + ".outColor", sg + ".surfaceShader") 
+0

感谢您的回复:)))是的,嗯,但我的问题是我如何设置着色器[0]是红色,着色器[1]是绿色,着色器[2]是蓝色,并使其循环....每三步... – Eddie

+0

所以你创建一个词典它和你如何循环三次ir?我的意思是......如果我有着色器4 5 6 7 8 9 10a – Eddie

+0

在这种情况下,它只能制作3个着色器,分别叫做红色,绿色和蓝色 - 你没有说清楚你需要一个开放式列表。您可以将字典键更改为0,1和2,然后使用带有%运算符的for循环以获得0,1,2,0,1,2 ....,其中包含任何迭代次数 – theodox

1

所以我最终使用

import maya.cmds as cmds 

shaderlist=[] 

for i in range(5): 
    shader = cmds.shadingNode ('surfaceShader', name=('mm'+str(i)), asShader=True) 
    sg = cmds.sets(renderable=True, noSurfaceShader=True, empty=True, name=('mmSG'+str(i))) 
    cmds.connectAttr(shader + ".outColor", sg + ".surfaceShader") 
    shaderlist.append(shader) 



for shader in shaderlist[0::3]: 
    cmds.setAttr(shader+'.outColor', 1.0,0,0) 

for shader in shaderlist[1::3]: 
    cmds.setAttr(shader+'.outColor', 0,1,0) 

for shader in shaderlist[2::3]: 
    cmds.setAttr(shader+'.outColor', 0,0,1)