使用Maya Python设置带有着色遮罩的渲染层

2024-05-06 12:27:15 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我尝试编写一个脚本,从列表中获取材质的名称,创建以每个材质命名的渲染层,然后将白色曲面着色器应用于共享渲染层名称的材质,将黑色曲面着色器应用于不共享渲染层名称的对象

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还不熟悉,仍在尝试处理一些事情。在

谢谢!在


Tags: 对象名称trueobjects命名着色器曲面黑色
1条回答
网友
1楼 · 发布于 2024-05-06 12:27:15

好吧,我想好了。只需更改一些内容,并在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')  

相关问题 更多 >