【问题标题】:Setting render layers with shading masks with Maya Python使用 Maya Python 设置带有阴影遮罩的渲染层
【发布时间】:2016-06-14 08:39:54
【问题描述】:

所以我正在尝试编写一个脚本,该脚本从列表中获取材质名称,创建一个以每种材质命名的渲染层,然后将白色表面着色器应用于共享渲染层名称和黑色表面着色器的材质对于没有的对象。

import maya.cmds as cmds

matName = ['blue_mat', 'green_mat', 'red_mat', 'purple_mat']

cmds.shadingNode('surfaceShader',asShader=True,n='WhiteMat')
cmds.setAttr('WhiteMat.outColor', 1.0, 1.0, 1.0, type = 'double3')
cmds.shadingNode('surfaceShader',asShader=True,n='BlackMat')
cmds.setAttr('BlackMat.outColor', 0.0, 0.0, 0.0, type = 'double3')

for i in range(4):
    cmds.select(cl=True)
    cmds.select( hi=True, all=True)
    cmds.createRenderLayer(n=matName[i]+'_layer')
    cmds.hyperShade(objects=matName[i])
    cmds.hyperShade(assign='BlackMat')
    if cmds.hyperShade(objects='BlackMat'):
        cmds.hyperShade(objects=matName[i])

到目前为止,我已经使用它来创建包含所有对象的图层并将黑色着色器应用于所有内容,但我有点迷失如何将白色着色器应用于仅以它命名的图层上的材质.我想我可以使用 if 语句来设置它,但我是 Python 新手,仍在尝试处理事情。

谢谢!

【问题讨论】:

    标签: python maya


    【解决方案1】:

    好的,明白了。只需更改一些内容,并在 range 中包含 if else 即可以正确的顺序应用着色器。

    import maya.cmds as cmds
    
    #Put in your material names here.  Make sure they have the EXACT SAME spelling, caps, 
    #and name conventions as in the Hypershade.  And don't forget to put each one in ''!
    
    matName = ['blue_mat','green_mat','red_mat','purple_mat']
    
    cmds.shadingNode('surfaceShader',asShader=True,n='WhiteMat')
    cmds.setAttr('WhiteMat.outColor', 1.0, 1.0, 1.0, type = 'double3')
    cmds.shadingNode('surfaceShader',asShader=True,n='BlackMat')
    cmds.setAttr('BlackMat.outColor', 0.0, 0.0, 0.0, type = 'double3')
    
    for i in range(len(matName)):
        cmds.select(cl=True)
        cmds.select( ado=True)
        cmds.createRenderLayer(n=matName[i]+'_layer')
    
        cmds.hyperShade(objects=matName[i])
        cmds.editRenderLayerGlobals(crl=matName[i]+'_layer')    
    
        for x in range(len(matName)):
            if matName[x]!=matName[i]:
                cmds.hyperShade(objects=matName[x])
                cmds.hyperShade(assign='BlackMat')
            else:
               cmds.hyperShade(objects=matName[x])
               cmds.hyperShade(assign='WhiteMat')  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-10
      • 1970-01-01
      • 2020-02-17
      • 2016-09-30
      • 2016-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多