在我的渲染层中,我的所有集合都被最后一个损坏在Maya中进行python编程

问题描述

我在Python中工作。我想创建一个具有不同集合的渲染层,每个集合都有一个着色器替代。但是,每次出现新的替代时,都会覆盖其他替代。有人可以告诉我我错了吗?

import maya.cmds as cmds
from maya.app import renderSetup
import maya.api.OpenMaya as OpenMaya
import maya.app.renderSetup.model.override as override
import maya.app.renderSetup.model.selector as selector
import maya.app.renderSetup.model.collection as collection
import maya.app.renderSetup.model.renderLayer as renderLayer
import maya.app.renderSetup.model.renderSetup as renderSetup

rs = renderSetup.instance()   
try: rLyr = rs.getRenderLyyer("colourLayer")
except: rLyr = rs.createRenderLayer("colourLayer")

listRED=('pCo*1')
listGREEN=('pTo*1')
listBLUE=('pCu*1')
listNOIR=('pCy*1')
listWHITE=('pSP*1')

mel.eval('polyCone -r 1 -h 2 -sx 20 -sy 1 -sz 0 -ax 0 1 0 -rcp 0 -cuv 3 -ch 1;polyCube -w 1 -h 1 -d 1 -sx 1 -sy 1 -sz 1 -ax 0 1 0 -cuv 4 -ch 1;polyTorus -r 1 -sr 0.5 -tw 0 -sx 20 -sy 20 -ax 0 1 0 -cuv 1 -ch 1;move -r -os -wd 3.246282 0 2.41639 ;select -r pCone1 ;move -r -os -wd -1.846807 0 2.730534 ;polyCylinder -r 1 -h 2 -sx 20 -sy 1 -sz 1 -ax 0 1 0 -rcp 0 -cuv 3 -ch 1;move -r -os -wd -4.264135 0 -2.713963 ;polySphere -r 1 -sx 20 -sy 20 -ax 0 1 0 -cuv 2 -ch 1;move -r -os -wd 1.622641 0 -3.675104 ;')

rdm = cmds.shadingNode ('lAmbert',asShader=True,n='redMat_shd') #red material
[cmds.setAttr( '{}.{}'.format(rdm,channel),1,type='double3') for channel in ('color','incandescence')]
redColl = rLyr.createCollection('redCollection')
over_red = redColl.createOverride('redOverride',OpenMaya.MTypeId(0x58000386))
redColl.getSelector().setPattern(listRED)
over_red.setShader(str(rdm))

gdm = cmds.shadingNode ('lAmbert',n='greenMat_shd') #green material
[cmds.setAttr( '{}.{}'.format(gdm,'incandescence')]
greenColl = rLyr.createCollection('greenCollection')
over_green = greenColl.createOverride('greenOverride',OpenMaya.MTypeId(0x58000386))
greenColl.getSelector().setPattern(listGREEN)
over_green.setShader(str(gdm))

bdm = cmds.shadingNode ('lAmbert',n='blueMat_shd') #blue material
[cmds.setAttr( '{}.{}'.format(bdm,'incandescence')]
blueColl = rLyr.createCollection('blueCollection')
over_blue = blueColl.createOverride('blueOverride',OpenMaya.MTypeId(0x58000386))
blueColl.getSelector().setPattern(listBLUE)
over_blue.setShader(str(bdm))

提前谢谢

解决方法

最后,我使用了错误的覆盖方法。

import maya.app.renderSetup.model.renderSetup as renderSetup

listRED = ('list of objects you want to reassign')
rsg = 'the_shading_engine_which_ll_be_connected_to_those_objects'

rs = renderSetup.instance()
rLyr = rs.getRenderLyyer("colourLayer") #the new render layer
redColl = rLyr.createCollection('redCollection') #the collection
redColl.getSelector().setPattern(listRED) #the selection of objects
over_red = redColl.createOverride("redOverride","materialOverride") #the override
over_red.setMaterial(rsg) # the reassignation of material