This script creates popular render elements that aren’t defaults in Arnold. Create a Occlusion Pass, UV Pass, Normal Pass, RGB Noise Pass, Wireframe Pass, Rim Light Pass, and Object ID Pass.
To Run: Just run the script and select which AOVs you want to create.
#Arnold Custom 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 import maya.cmds as cmds def makeOcclusion(): #Create and Name AOV occlusionAOV = cmds.createNode( 'aiAOV' , name= 'Occlusion' ) cmds.setAttr( occlusionAOV + '.name' , 'Occlusion' , type='string') cmds.setAttr( occlusionAOV + '.type' , 5 ) #Basic AOV Connections cmds.connectAttr( occlusionAOV + '.message' , 'defaultArnoldRenderOptions.aovList', nextAvailable=True ) cmds.connectAttr( 'defaultArnoldDriver.message' , occlusionAOV + '.outputs[0].driver' ) cmds.connectAttr( 'defaultArnoldFilter.message' , occlusionAOV + '.outputs[0].filter' ) #Create Occlusion Shader and Connect occShader = cmds.createNode('aiAmbientOcclusion' , name = 'occMtl') cmds.setAttr(occShader + '.falloff' , 1) cmds.connectAttr(occShader + '.outColor' , occlusionAOV + '.defaultValue') def makeUV(): #Create and Name AOV uvAOV = cmds.createNode( 'aiAOV' , name= 'UV' ) cmds.setAttr( uvAOV + '.name' , 'UV' , type='string') cmds.setAttr( uvAOV + '.type' , 5 ) #Basic AOV Connections cmds.connectAttr( uvAOV + '.message' , 'defaultArnoldRenderOptions.aovList', nextAvailable=True ) cmds.connectAttr( 'defaultArnoldDriver.message' , uvAOV + '.outputs[0].driver' ) cmds.connectAttr( 'defaultArnoldFilter.message' , uvAOV + '.outputs[0].filter' ) #Create UV Shader uvShader = cmds.createNode('surfaceShader', name = 'uvMtl') #create Average Node plusNode = cmds.shadingNode('plusMinusAverage', asUtility = True) #Create U ramp uramp = cmds.shadingNode('ramp', asTexture = True) uRamp = cmds.rename(uramp, 'uRamp') cmds.setAttr(uRamp + '.type', 1) cmds.setAttr(uRamp + '.colorEntryList[0].color', 0,0,0, type = 'double3') cmds.setAttr(uRamp + '.colorEntryList[1].position', 1) cmds.setAttr(uRamp + '.colorEntryList[1].color', 1,0,0, type = 'double3') place2dTextureNode = cmds.shadingNode('place2dTexture', asUtility = True) cmds.connectAttr(place2dTextureNode + '.outUV', uRamp + '.uvCoord') cmds.connectAttr(place2dTextureNode + '.outUvFilterSize', uRamp + '.uvFilterSize') #create V Ramp vramp = cmds.shadingNode('ramp', asTexture = True) vRamp = cmds.rename(vramp, 'vRamp') cmds.setAttr(vRamp + '.type', 0) cmds.setAttr(vRamp + '.colorEntryList[0].color', 0,0,0, type = 'double3') cmds.setAttr(vRamp + '.colorEntryList[1].position', 1) cmds.setAttr(vRamp + '.colorEntryList[1].color', 0,1,0, type = 'double3') place2dTextureNode = cmds.shadingNode('place2dTexture', asUtility = True) cmds.connectAttr(place2dTextureNode + '.outUV', vRamp + '.uvCoord') cmds.connectAttr(place2dTextureNode + '.outUvFilterSize', vRamp + '.uvFilterSize') #Attach ramps to average node cmds.connectAttr(uRamp + '.outColor', plusNode + '.input3D[0]') cmds.connectAttr(vRamp + '.outColor', plusNode + '.input3D[1]') #Connect Average to Surface Shader cmds.connectAttr(plusNode + '.output3D' , uvShader + '.outColor') #Connect to AOV cmds.connectAttr(uvShader + '.outColor' , uvAOV + '.defaultValue') def makeNrm(): #Create and Name AOV nrmAOV = cmds.createNode( 'aiAOV' , name= 'Normal' ) cmds.setAttr( nrmAOV + '.name' , 'Normal' , type='string') cmds.setAttr( nrmAOV + '.type' , 5 ) #Basic AOV Connections cmds.connectAttr( nrmAOV + '.message' , 'defaultArnoldRenderOptions.aovList', nextAvailable=True ) cmds.connectAttr( 'defaultArnoldDriver.message' , nrmAOV + '.outputs[0].driver' ) cmds.connectAttr( 'defaultArnoldFilter.message' , nrmAOV + '.outputs[0].filter' ) #Create Shader and Connect nrmShader = cmds.createNode('aiUtility' , name= 'nrmMtl') cmds.setAttr(nrmShader + '.shadeMode' , 2) cmds.setAttr(nrmShader + '.colorMode' , 3) cmds.connectAttr(nrmShader + '.outColor' , nrmAOV + '.defaultValue') def makeRGBNoise(): #Create and Name AOV noiseAOV = cmds.createNode( 'aiAOV' , name= 'RGB_Noise' ) cmds.setAttr( noiseAOV + '.name' , 'RGB_Noise' , type='string') cmds.setAttr( noiseAOV + '.type' , 5 ) #Basic AOV Connections cmds.connectAttr( noiseAOV + '.message' , 'defaultArnoldRenderOptions.aovList', nextAvailable=True ) cmds.connectAttr( 'defaultArnoldDriver.message' , noiseAOV + '.outputs[0].driver' ) cmds.connectAttr( 'defaultArnoldFilter.message' , noiseAOV + '.outputs[0].filter' ) #create red fractal texture redFractal = cmds.shadingNode('fractal', name = 'redFractal', asTexture = True) #connect place2Dtexture node redPlace2dTextureNode = cmds.shadingNode('place2dTexture', asUtility = True) cmds.connectAttr(redPlace2dTextureNode + '.outUV' , redFractal + '.uvCoord') cmds.connectAttr(redPlace2dTextureNode + '.outUvFilterSize' , redFractal + '.uvFilterSize') #make red and smaller cmds.setAttr(redFractal + '.colorGain' , 1, 0, 0, type = 'double3') cmds.setAttr(redFractal + '.alphaIsLuminance', 1) cmds.setAttr(redPlace2dTextureNode + '.repeatU', 2) cmds.setAttr(redPlace2dTextureNode + '.repeatV', 2) #green fractal greenFractal = cmds.shadingNode('fractal', name = 'greenFractal', asTexture = True) #connect place2Dtexture node greenPlace2dTextureNode = cmds.shadingNode('place2dTexture', asUtility = True) cmds.connectAttr(greenPlace2dTextureNode + '.outUV' , greenFractal + '.uvCoord') cmds.connectAttr(greenPlace2dTextureNode + '.outUvFilterSize' , greenFractal + '.uvFilterSize') #make red and smaller cmds.setAttr(greenFractal + '.colorGain' , 0, 1, 0, type = 'double3') cmds.setAttr(greenFractal + '.alphaIsLuminance', 1) cmds.setAttr(greenPlace2dTextureNode + '.repeatU', .8) cmds.setAttr(greenPlace2dTextureNode + '.repeatV', .8) #blue fractal blueFractal = cmds.shadingNode('fractal', name = 'blueFractal', asTexture = True) #connect place2Dtexture node bluePlace2dTextureNode = cmds.shadingNode('place2dTexture', asUtility = True) cmds.connectAttr(bluePlace2dTextureNode + '.outUV' , blueFractal + '.uvCoord') cmds.connectAttr(bluePlace2dTextureNode + '.outUvFilterSize' , blueFractal + '.uvFilterSize') #make red and smaller cmds.setAttr(blueFractal + '.colorGain' , 0, 0, 1, type = 'double3') cmds.setAttr(blueFractal + '.alphaIsLuminance', 1) cmds.setAttr(bluePlace2dTextureNode + '.repeatU', 10) cmds.setAttr(bluePlace2dTextureNode + '.repeatV', 10) #create blendColors and connect three fractals blendColorsRG = cmds.shadingNode('blendColors', name = 'blendColorsRG', asUtility = True) cmds.connectAttr(redFractal + '.outColor' , blendColorsRG + '.color1') cmds.connectAttr(greenFractal + '.outColor' , blendColorsRG + '.color2') blendColorsRGB = cmds.shadingNode('blendColors', name = 'blendColorsRGB', asUtility = True) cmds.connectAttr(blendColorsRG + '.output' , blendColorsRGB + '.color1') cmds.connectAttr(blueFractal + '.outColor' , blendColorsRGB + '.color2') #Create Shader and Connect noiseShader = cmds.createNode('surfaceShader', name = 'noiseMtl') cmds.connectAttr(blendColorsRGB + '.output' , noiseShader + '.outColor') cmds.connectAttr(noiseShader + '.outColor' , noiseAOV + '.defaultValue') def makeWireframe(): #Create and Name AOV wireAOV = cmds.createNode( 'aiAOV' , name= 'Wireframe' ) cmds.setAttr( wireAOV + '.name' , 'Wireframe' , type='string') cmds.setAttr( wireAOV + '.type' , 5 ) #Basic AOV Connections cmds.connectAttr( wireAOV + '.message' , 'defaultArnoldRenderOptions.aovList', nextAvailable=True ) cmds.connectAttr( 'defaultArnoldDriver.message' , wireAOV + '.outputs[0].driver' ) cmds.connectAttr( 'defaultArnoldFilter.message' , wireAOV + '.outputs[0].filter' ) #Create Shader and Connect wireShader = cmds.createNode('aiWireframe', name = 'wireframeMtl') cmds.setAttr(wireShader + '.edgeType' , 1) cmds.connectAttr(wireShader + '.outColor' , wireAOV + '.defaultValue') def makeRimLight(): #Create and Name AOV rimAOV = cmds.createNode( 'aiAOV' , name= 'Rim_Light' ) cmds.setAttr( rimAOV + '.name' , 'Rim_Light' , type='string') cmds.setAttr( rimAOV + '.type' , 5 ) #Basic AOV Connections cmds.connectAttr( rimAOV + '.message' , 'defaultArnoldRenderOptions.aovList', nextAvailable=True ) cmds.connectAttr( 'defaultArnoldDriver.message' , rimAOV + '.outputs[0].driver' ) cmds.connectAttr( 'defaultArnoldFilter.message' , rimAOV + '.outputs[0].filter' ) #Create Ramp and sampler info ramp = cmds.shadingNode('ramp', name = 'rimLight_ramp', asTexture = True) samplerInfo = cmds.shadingNode('samplerInfo', asUtility = True) #set ramp up cmds.setAttr(ramp + '.colorEntryList[2].position', .485) cmds.setAttr(ramp + '.colorEntryList[2].color', 0, 0, 0, type = 'double3') cmds.setAttr(ramp + '.colorEntryList[1].position', .100) cmds.setAttr(ramp + '.colorEntryList[1].color', .85, .8, .75, type = 'double3') cmds.setAttr(ramp + '.colorEntryList[0].position', 0) cmds.setAttr(ramp + '.colorEntryList[0].color', .94, .92, .9, type = 'double3') #connect sampler info to ramp cmds.connectAttr(samplerInfo + '.facingRatio', ramp + '.uCoord') cmds.connectAttr(samplerInfo + '.facingRatio', ramp + '.vCoord') #Create Shader and Connect rimShader = cmds.createNode('surfaceShader' , name = 'rimMtl') cmds.connectAttr(ramp + '.outColor' , rimShader + '.outColor' ) cmds.connectAttr(ramp+ '.outColor' , rimAOV + '.defaultValue') def makeObjectId(): #Create and Name AOV objIdAOV = cmds.createNode( 'aiAOV' , name= 'Object_ID' ) cmds.setAttr( objIdAOV + '.name' , 'Object_ID' , type='string') cmds.setAttr( objIdAOV + '.type' , 5 ) #Basic AOV Connections cmds.connectAttr( objIdAOV + '.message' , 'defaultArnoldRenderOptions.aovList', nextAvailable=True ) cmds.connectAttr( 'defaultArnoldDriver.message' , objIdAOV + '.outputs[0].driver' ) cmds.connectAttr( 'defaultArnoldFilter.message' , objIdAOV + '.outputs[0].filter' ) #Create Shader and Connect objShader = cmds.createNode('aiUtility' , name = 'objId_Mtl') cmds.setAttr(objShader + '.shadeMode' , 2) cmds.setAttr(objShader + '.colorMode' , 21) cmds.connectAttr(objShader + '.outColor' , objIdAOV + '.defaultValue') #delete window if a window already exisits if cmds.window('aovWindow', exists=True): cmds.deleteUI('aovWindow') #Create my GUI def createGUI(): #window set up aovWindow = cmds.window('aovWindow',title="Custom Render Elements", rtf=True) cmds.columnLayout(adjustableColumn= True, rowSpacing= 3) cmds.checkBox('nrmAOV',label= "Normal", value=True) cmds.checkBox('occlusionAOV',label= "Occlusion", value=True) cmds.checkBox('uvAOV',label= "UV", value=True) cmds.checkBox('objIdAOV',label= "Object ID", value=True) cmds.checkBox('rimLightAOV',label= "Rim Light", value=True) cmds.checkBox('rgbNoiseAOV',label= "RGB Noise", value=True) cmds.checkBox('wireframeAOV',label= "Wireframe", value=True) cmds.button( label='Run', width= 224, command=('queryValues()')) cmds.setParent('..') cmds.setParent('..') cmds.showWindow('aovWindow') #query checkboxes def queryValues(): nrmValue= cmds.checkBox('nrmAOV', query = True, value = True) ocValue = cmds.checkBox('occlusionAOV', query = True, value = True) uvValue = cmds.checkBox('uvAOV', query = True, value = True) objIDValue = cmds.checkBox('objIdAOV', query = True, value = True) rimValue = cmds.checkBox('rimLightAOV', query = True, value = True) noiseValue = cmds.checkBox('rgbNoiseAOV', query = True, value = True) wireframeValue= cmds.checkBox('wireframeAOV', query = True, value = True) #if query is true create the render element if nrmValue == True: makeNrm() if ocValue == True: makeOcclusion() if uvValue == True: makeUV() if objIDValue == True: makeObjectId() if rimValue == True: makeRimLight() if noiseValue == True: makeRGBNoise() if wireframeValue == True: makeWireframe() #Run the Script createGUI()
© 2016 Bryanna London