如何解决在我的渲染层中,我的所有集合都被最后一个损坏在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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。