2016-06-14 8 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') 
関連する問題