Announcements

The Autodesk Community Forums has a new look. Read more about what's changed on the Community Announcements board.

In my render layer, all my collections are damaged by the last one. python programming

maximeneko
Participant

In my render layer, all my collections are damaged by the last one. python programming

maximeneko
Participant
Participant

hello. I  work in Python. This probleme makes me crazy from several days.

I want to create a render layers with different collections each of them having a shader override.

but each time a new override come, it overwrite the others. someone can tell me where I'm wrong ?

I post this exemple:

 

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, 0, 0, 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', asShader=True, n='greenMat_shd') #green material

[cmds.setAttr( '{}.{}'.format(gdm, channel), 0, 1, 0, type='double3') for channel in ('color','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', asShader=True, n='blueMat_shd') #blue material

[cmds.setAttr( '{}.{}'.format(bdm, channel), 0, 0, 1, type='double3') for channel in ('color','incandescence')]

blueColl = rLyr.createCollection('blueCollection')

over_blue = blueColl.createOverride('blueOverride', OpenMaya.MTypeId(0x58000386))

blueColl.getSelector().setPattern(listBLUE)

over_blue.setShader(str(bdm))

 

 

0 Likes
Reply
Accepted solutions (1)
791 Views
1 Reply
Reply (1)

maximeneko
Participant
Participant
Accepted solution

finally I was use the bad override method.

 

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