This script creates RGB Matte AOV similar to VRays Multi Matte set up. I personally prefer this to Arnolds built in Object ID pass.
To Run: Put objects you want to have mattes for into sets. Make sure anything you want in the same Matte to be in the same set. Then select the Sets and run the script. It will create a new AOV for every three sets. So your first set will be red, second green, third blue, then it will create a new AOV and repeat.
#Arnold RGB MATTE AOV version 1.0.0 #For Maya. Tested in Maya 2014 & 2015 with Arnold 4.2.9.0 #Bryanna London www.bryannalondon.com #!/usr/bin/env python #TO RUN: #Before running create maya sets for the different objects you want to mask #Select the sets you want to create masks for before pressing run. import maya.cmds as cmds def rgbMatteSets(): selSets = cmds.ls(selection = True , set = True) #If there are no selected sets stop script and send warning message if selSets == []: cmds.confirmDialog(title='No Selection', message='Nothing Selected. Nothing Done.' , button =['Ok']) else: #Create Gamma Nodes than set the colors to RGB gammaRed = cmds.shadingNode('gammaCorrect' , asUtility = True , name = 'gammaRed') cmds.setAttr(gammaRed + '.value' , 1,0,0 , type = 'double3') gammaGreen = cmds.shadingNode('gammaCorrect' , asUtility = True , name = 'gammaGreen') cmds.setAttr(gammaGreen + '.value' , 0,1,0 , type = 'double3') gammaBlue = cmds.shadingNode('gammaCorrect' , asUtility = True , name = 'gammaBlue') cmds.setAttr(gammaBlue + '.value' , 0,0,1 , type = 'double3') #For every three selected sets #Create Triple switch and Surface Shader for sel in range(0, len(selSets) , 3): tripSwitch = cmds.shadingNode('tripleShadingSwitch' , asUtility = True) cmds.setAttr(tripSwitch + '.default' , 0,0,0 , type = 'double3') rgbShader = cmds.createNode('surfaceShader' , name = 'rgbMatteMtl') #connect Triple Switch to Surface Shader cmds.connectAttr(tripSwitch + '.output' , rgbShader + '.outColor') #List the geo shape node in each Set #Connect shape node to the Triple Switch for index , geo in enumerate(selSets[sel:sel + 3]): geoShape = cmds.listRelatives(geo , path = True) #Apply Red Gamma to Objects in first set, Green to second set, and Blue to third set if index == 0: gammaNode = gammaRed if index == 1: gammaNode = gammaGreen if index == 2: gammaNode = gammaBlue #For each object for obj in geoShape: #Create Variable for Triple Switch Input since multiple things will be plugged in tripInput = cmds.getAttr(tripSwitch + '.input' , size = 1) #Connect Geo to Triple switch to the next available input number cmds.connectAttr( obj + '.instObjGroups[0]' , tripSwitch + '.input['+ str(tripInput) + '].inShape') #Connect Gammas to Triple Switch cmds.connectAttr(gammaNode + '.outValue' , tripSwitch + '.input['+ str(tripInput) + '].inTriple') #create AOV and iterate the name rgbMatteAOV = cmds.createNode( 'aiAOV' , name= 'RGB_Matte_' + str(sel//3+1)) cmds.setAttr( rgbMatteAOV + '.name' , 'RGB_Matte_' + str(sel//3+1), type='string') cmds.setAttr( rgbMatteAOV + '.type' , 5 ) #Basic AOV Connections cmds.connectAttr( rgbMatteAOV + '.message' , 'defaultArnoldRenderOptions.aovList', nextAvailable=True ) cmds.connectAttr( 'defaultArnoldDriver.message' , rgbMatteAOV + '.outputs[0].driver' ) cmds.connectAttr( 'defaultArnoldFilter.message' , rgbMatteAOV + '.outputs[0].filter' ) #Connect Surface Shader to AOV cmds.connectAttr(rgbShader + '.outColor' , rgbMatteAOV + '.defaultValue' ) rgbMatteSets()
© 2016 Bryanna London