Custom Render Elements

This script creates popular render elements that aren’t defaults in VRay. Create a Position Pass, Occlusion Pass, UV Pass, Rim Light Pass, Fresnel Pass, RGB Noise Pass, and Top Down Pass.

Version 3 now has a Wireframe pass and the UV pass has been fixed so it works properly with UDIM uvs.
Version 4 has a changed noise pass that will make a RGB noise for more variation for comp.
Version 5 now has a curvature pass which isolates the edges of objects.

To Run: Just run the script and select which elements you want to create.

#Custom Render Elements Maya Version 4.0.0
#Bryanna London
#!/usr/bin/env python

#2.0 adds a wireframe element
#3.0 changed the way UV pass was made so it works for UDIM uvs.
#4.0 change noise pass to RGB noise
#5.0 adds curvature element 

import maya.cmds as cmds
import maya.mel as mel

#Create Ambient Occlusion Render Element
def createOcc():

    ao = mel.eval('vrayAddRenderElement ExtraTexElement')
    #rename Occlusion
    occlusion = cmds.rename(ao , 'Occlusion')
    #set Explicit channel name to Occlusion
    cmds.setAttr(occlusion + '.vray_explicit_name_extratex', 'Occlusion', type = 'string')
    #Turn off affect matte objects
    cmds.setAttr(occlusion + '.vray_affectmattes_extratex', 0)

    #create vray dirt and connect place2dTextureNodeimport time
    vrayDirt = cmds.shadingNode('VRayDirt', name = 'occ_dirt', asTexture = True)
    cmds.setAttr(vrayDirt + '.subdivs' , 32)
    place2dTextureNode = cmds.shadingNode('place2dTexture', asUtility = True)
    cmds.connectAttr(place2dTextureNode + '.outUV', vrayDirt + '.uvCoord')
    cmds.connectAttr(place2dTextureNode + '.outUvFilterSize', vrayDirt + '.uvFilterSize')

    #connect the vray dirt to occlusion element
    cmds.connectAttr(vrayDirt + '.outColor', occlusion + '.vray_texture_extratex')

#Create Fresnel Element
def createFresnel():

    fresnel = mel.eval('vrayAddRenderElement ExtraTexElement')
    #rename fresnel
    fresnelName = cmds.rename(fresnel , 'Fresnel')
    #set explicit channel name
    cmds.setAttr(fresnelName + '.vray_explicit_name_extratex', 'Fresnel', type = 'string')
    #Turn off affect matte objects
    cmds.setAttr(fresnelName + '.vray_affectmattes_extratex', 0)

    #create vray fresnel and connect place2dTextureNode
    vrayFresnel = cmds.shadingNode('VRayFresnel', asTexture = True)
    place2dTextureNodeF = cmds.shadingNode('place2dTexture', asUtility = True)
    cmds.connectAttr(place2dTextureNodeF + '.outUV', vrayFresnel + '.uvCoord')
    cmds.connectAttr(place2dTextureNodeF + '.outUvFilterSize', vrayFresnel + '.uvFilterSize')

    #connect the vray fresnel to fresnel element
    cmds.connectAttr(vrayFresnel + '.outColor', fresnelName + '.vray_texture_extratex')

#Create UV Element
def createUv():

    uv = mel.eval('vrayAddRenderElement ExtraTexElement')
    #rename UV
    uvPass = cmds.rename(uv , 'UV')
    #set explicit channel name
    cmds.setAttr(uvPass + '.vray_explicit_name_extratex', 'UV', type = 'string')
    #Turn off the three checkboxes
    cmds.setAttr(uvPass + '.vray_considerforaa_extratex', 1)
    cmds.setAttr(uvPass + '.vray_affectmattes_extratex', 0)
    cmds.setAttr(uvPass + '.vray_filtering_extratex', 1)

    #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 the average node to UV element
    cmds.connectAttr(plusNode + '.output3D', uvPass + '.vray_texture_extratex')

#Create Rim Light Element
def createRim():

    rim = mel.eval('vrayAddRenderElement ExtraTexElement')
    #rename rim light element
    rimLight = cmds.rename(rim , 'rimLight')
    #set explicit channel name
    cmds.setAttr(rimLight + '.vray_explicit_name_extratex', 'rimLight', type = 'string')
    #Turn off affect matte Objects
    cmds.setAttr(rimLight + '.vray_affectmattes_extratex', 0)

    #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')

    #connect ramp to rimLight element
    cmds.connectAttr(ramp + '.outColor', rimLight + '.vray_texture_extratex')

#Create Position Pass Element
def createPPP():

    ppp = mel.eval('vrayAddRenderElement ExtraTexElement')
    #rename position pass element
    pppWorld = cmds.rename(ppp , 'pppWorld')
    #set explicit channel name
    cmds.setAttr(pppWorld + '.vray_explicit_name_extratex', 'pppWorld', type = 'string')
    #Turn off affect matte Objects
    cmds.setAttr(pppWorld + '.vray_affectmattes_extratex', 0)

    #create sampler info
    samplerInfoPPP = cmds.shadingNode('samplerInfo', asUtility = True)

    #connect sampler info to position pass element
    cmds.connectAttr(samplerInfoPPP + '.pointWorldX', pppWorld + '.vray_texture_extratexR')
    cmds.connectAttr(samplerInfoPPP + '.pointWorldY', pppWorld + '.vray_texture_extratexG')
    cmds.connectAttr(samplerInfoPPP + '.pointWorldZ', pppWorld + '.vray_texture_extratexB')

#Create Top Down Pass
def createTopDown():

    td = mel.eval('vrayAddRenderElement ExtraTexElement')
    #rename topdown element
    topDown = cmds.rename(td , 'TopDown')
    #set explicit channel name
    cmds.setAttr(topDown + '.vray_explicit_name_extratex', 'TopDown', type = 'string')
    #Turn off affect matte Objects
    cmds.setAttr(topDown + '.vray_affectmattes_extratex', 0)

    # now create the Falloff Tex Plugin import time
    tFalloffNode = mel.eval('vrayCreateNodeFromDll ("topdown_tex", "texture", "TexFalloff", 2);')
    #Set Attr for FalloffTex
    cmds.setAttr ('topdown_tex' + '.direction_type', 2)
    cmds.setAttr ('topdown_tex' + '.color1', 1, 0, 0, type='double3')
    cmds.setAttr ('topdown_tex' + '.color2', 0, 1, 0, type='double3')

    #connect to extra tex
    cmds.connectAttr ('topdown_tex' + '.outColor', topDown + '.vray_texture_extratex')

#Create Noise Pass
def createNoise():

    n = mel.eval('vrayAddRenderElement ExtraTexElement')
    #rename noise element
    noisePass = cmds.rename(n , 'Noise')
    #set explicit channel name
    cmds.setAttr(noisePass + '.vray_explicit_name_extratex', 'Noise', type = 'string')

    #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')

    #connect to extra tex
    cmds.connectAttr ( blendColorsRGB + '.output', noisePass + '.vray_texture_extratex')   

#Create Wireframe Pass

def createWireframe():

    w = mel.eval('vrayAddRenderElement ExtraTexElement')
    #rename wireframe element
    wireframe = cmds.rename(w , 'Wireframe')
    #set explicit channel name
    cmds.setAttr(wireframe + '.vray_explicit_name_extratex', 'Wireframe', type = 'string')
    #create VRay Edge texture
    vEdge = cmds.shadingNode('VRayEdges', name = 'VRayEdges', asTexture = True)
    #connect place2Dtexture node
    place2dTextureNodeW = cmds.shadingNode('place2dTexture', asUtility = True)
    cmds.connectAttr(place2dTextureNodeW + '.outUV', vEdge + '.uvCoord')
    cmds.connectAttr(place2dTextureNodeW + '.outUvFilterSize', vEdge + '.uvFilterSize')
    #Set VRay edge pixels to .05
    cmds.setAttr(vEdge + '.pixelWidth', 0.05)
    #connect to extra tex
    cmds.connectAttr ( vEdge + '.outColor', wireframe + '.vray_texture_extratex')

def createCurvature():
    c = mel.eval('vrayAddRenderElement ExtraTexElement')
    #rename Curvature element
    curvature = cmds.rename(c , 'Curvature')
    #set explicit channel name
    cmds.setAttr(curvature + '.vray_explicit_name_extratex', 'Curvature', type = 'string')
    #Create VRay Curvature Node
    vCurv = cmds.shadingNode('VRayCurvature', name='VRayCurvature', asUtility = True)
    #Tweak default curvature settings
    cmds.setAttr(vCurv + '.subdivs', 8)
    cmds.setAttr(vCurv + '.sampleSpread', .7)
    cmds.setAttr(vCurv + '.scale', .1)
    #connect to extra tex
    cmds.connectAttr(vCurv + '.outColor' , curvature + '.vray_texture_extratex')  

#delete window if a window already exisits
if cmds.window('reWindow', exists=True):
    cmds.deleteUI('reWindow')

#Create my GUI
def createGUI():
    #window set up
    reWindow = cmds.window('reWindow',title="Custom Render Elements", rtf=True)
    cmds.columnLayout(adjustableColumn= True, rowSpacing= 3)
    cmds.checkBox('occlusionRE',label= "Occlusion", value=True)
    cmds.checkBox('fresnelRE', label= "Fresnel", value=True)
    cmds.checkBox('uvRE',label= "UV", value=True)
    cmds.checkBox('rimLightRE',label= "Rim Light", value=True)
    cmds.checkBox('worldPPPRE',label= "World PPP", value=True)
    cmds.checkBox('topDownRE',label= "Top Down", value=True)
    cmds.checkBox('noiseRE',label= "Noise", value=True)
    cmds.checkBox('wireframeRE',label= "Wireframe", value=True)
    cmds.checkBox('curvatureRE',label= "Curvature", value=True)
    cmds.button( label='Run', width= 224, command=('queryValues()'))
    cmds.setParent('..')
    cmds.setParent('..')
    cmds.showWindow('reWindow')

#query checkboxes
def queryValues():

    ocValue = cmds.checkBox('occlusionRE', query = True, value = True)
    frenValue = cmds.checkBox('fresnelRE', query = True, value = True)
    uvValue = cmds.checkBox('uvRE', query = True, value = True)
    rimValue = cmds.checkBox('rimLightRE', query = True, value = True)
    pppValue = cmds.checkBox('worldPPPRE', query = True, value = True)
    tdValue = cmds.checkBox('topDownRE', query = True, value = True)
    noiseValue = cmds.checkBox('noiseRE', query = True, value = True)
    wireframeValue= cmds.checkBox('wireframeRE', query = True, value = True)
    curvatureValue= cmds.checkBox('curvatureRE', query = True, value = True)
    #if query is true create the render element
    if ocValue == True:
        createOcc()

    if frenValue == True:
        createFresnel()

    if uvValue == True:
        createUv()

    if rimValue == True:
        createRim()

    if pppValue == True:
        createPPP()

    if tdValue == True:
        createTopDown()

    if noiseValue == True:
        createNoise()

    if wireframeValue == True:
        createWireframe()

    if curvatureValue == True:
       createCurvature()    

#Run the Script
createGUI()

© 2016 Bryanna London