2016-06-14 104 views
0

所以我试图编写一个脚本,它从列表中选取材质的名称,创建一个以每种材质命名的渲染层,然后将白色表面着色器应用于共享的材质渲染图层的名称和黑色表面着色器。用Maya 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很陌生,仍然试图处理事情。

谢谢!

回答

0

好吧,弄明白了。只需改变一些东西,并在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')