【问题标题】:Maya Python, Connect to 2 listsMaya Python,连接到 2 个列表
【发布时间】:2017-08-02 03:09:26
【问题描述】:

各位,这是关于 Maya、python 的问题。

我可以创建一个循环并将着色器 A 颜色设置为 R,着色器 B 颜色设置为 G,着色器 C 设置为 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 步就卡住了...

【问题讨论】:

    标签: python rendering maya


    【解决方案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] 为红色,着色器 [1] 为绿色,着色器 [2] 为蓝色并制作它循环......每三个步骤......
    • 所以你为它创建了一个字典,你如何每三次循环ir?我的意思是..如果我有着色器 4 5 6 7 8 9 10a
    • 在这种情况下,它只制作了 3 个着色器,分别称为红色、绿色和蓝色——您没有明确表示您需要一个开放式列表。您可以将字典键更改为 0、1 和 2,然后使用带有 % 运算符的 for 循环从任意次数的迭代中获取 0、1、2、0、1、2....
    • 抱歉不清楚...我将尝试使用 % 运算符...大声笑,我在 0 之前没有尝试过。 0
    【解决方案2】:

    所以我最终使用

    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)
    

    【讨论】:

      猜你喜欢
      • 2014-05-03
      • 1970-01-01
      • 1970-01-01
      • 2021-11-02
      • 2013-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多