2017-08-02 151 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)