2016-06-14 3 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') 
관련 문제