""" //////////////////////////////////////////////////////// // //Procedural Softbox Light O - v Alpha P //Written By Oliver Wolfson // //email oliverwolfson@gmail.com // // // //This PyMEL script creates a rigged light and a procedurally textured reflector card, simulating a studio style soft box light. //The rig is intended to be used for reflection or IBL when rendering using Mental Ray in Maya. // // // //////////////////////////////////////////////////////// Thanks to Daniel Vasquez of Heylight.com for helping to translate this script to PyMEL. """ if 'pm' not in dir(): import pymel.core as pm #Create softbox mySoftboxTMP = pm.polyPlane (name ="softBox", ch = True, o = True, sw=1, sh=1, cuv=2)[0] mySoftboxTMP.scaleBy([5,5,5]) mySoftboxTMP.setRotation([90,0,0]) mySoftboxTMP.setTranslation([0,10,0]) pm.makeIdentity(apply=True, t=1, r=1, s=1, n=0) mySoftboxTMP.castsShadows.set(False) mySoftboxTMP.primaryVisibility.set(False) mySoftboxTMP.receiveShadows.set(False) mySoftboxTMP.motionBlur.set(False) mySoftboxTMP.smoothShading.set(False) #Create and assign shader material = pm.shadingNode('surfaceShader', asShader=True, name="softBoxMaterial") SG = pm.sets (renderable=True, noSurfaceShader=True, empty=True, name= material + "SG") material.outColor >> SG.surfaceShader pm.select(mySoftboxTMP) pm.hyperShade(assign = material) #create first ramp myRamp1 = pm.shadingNode ('ramp',asTexture=True) myRamp1.outColor >> material.outColor pm.removeMultiInstance (myRamp1.colorEntryList[1], b=True) myRamp1.colorEntryList[0].color.set([2.5,2.5,2.5]) myRamp1.colorEntryList[0].position.set(0) myRamp1.colorEntryList[2].color.set([1,1,1]) myRamp1.colorEntryList[2].position.set(1) myRamp1.interpolation.set(4) pm.setAttr(myRamp1 + '.type', 4) #create second ramp myRamp2 = pm.shadingNode ('ramp',asTexture=True) myRamp2.outColor >> myRamp1.colorGain pm.removeMultiInstance (myRamp2.colorEntryList[1], b=True) pm.removeMultiInstance (myRamp2.colorEntryList[2], b=True) myRamp2.colorEntryList[0].color.set([1,1,1]) #create Mult Devide myMultDevide2 = pm.shadingNode ('multiplyDivide',asUtility=True) myRamp2.outColor >> myMultDevide2.input1 myMultDevide2.input2X.set(100) myMultDevide2.input2Y.set(100) myMultDevide2.input2Z.set(100) #Create Spot Light mySoftBoxSpotlight = pm.spotLight() mySoftBoxSpotlight.getParent().setTranslation([0,10,0.65]) mySoftBoxSpotlight.getParent().setRotation([180,0,0]) mySoftBoxSpotlight.emitSpecular.set(0) mySoftBoxSpotlight.coneAngle.set(105) mySoftBoxSpotlight.penumbraAngle.set(10) mySoftBoxSpotlight.dropoff.set(6) mySoftBoxSpotlight.useRayTraceShadows.set(1) mySoftBoxSpotlight.lightRadius.set(3) mySoftBoxSpotlight.shadowRays.set(20) mySoftBoxSpotlight.intensity.set(1) mySoftBoxSpotlight.decayRate.set(2) myMultDevide2.outputX >> mySoftBoxSpotlight.intensity pm.setAttr (mySoftBoxSpotlight + ".areaLight", 1) pm.select(mySoftBoxSpotlight) mySoftBoxSpotlight.getParent().setParent(mySoftboxTMP) mySoftboxTMP.rotateBy([90,0,0], space='world') pm.makeIdentity(apply=True, t=1, r=1, s=1, n=0) #create Arrow pointer and Locator arrw = pm.curve(d=1, p= [(0, 9, -1),(0, 9, 1),(0, 2, 1),(0, 2, 2),(0, 0, 0),(0, 2, -2),(0, 2, -1),(0, 9, -1)], k = range(8), name = 'softboxARROW' ) arrw.setScale([0.3,0.3,0.3]) LocatorTMP = pm.spaceLocator(p=[0,0,0]) LocatorTMP.translateY.set(10) LocatorTMP.setScale([4,4,4]) LocatorTMP.scaleX.setKeyable(False) LocatorTMP.scaleY.setKeyable(False) LocatorTMP.scaleZ.setKeyable(False) #Aim and orient constrain pm.select(arrw) pm.select(LocatorTMP, tgl=True) pm.aimConstraint (offset=(0, 0, 0), weight=1, aimVector=(0, -1, 0), upVector=(0, 1, 0), worldUpType="vector", worldUpVector=(0, 1, 0)) pm.select(LocatorTMP) pm.select(arrw, tgl=True) pm.orientConstraint(offset=(0,0,0), weight=1) #//create color attributes for the locator LocatorTMP.addAttr('color', uac=True, at='float3') LocatorTMP.addAttr('red', at='float', parent='color',dv=1) LocatorTMP.addAttr('green', at='float', parent='color',dv=1) LocatorTMP.addAttr('blue', at='float', parent='color',dv=1) LocatorTMP.addAttr('rayTracedShadows', at='bool') LocatorTMP.rayTracedShadows.setKeyable(True) LocatorTMP.addAttr('intensity', at='double', min=0, dv=1) LocatorTMP.intensity.setKeyable(True) LocatorTMP.color >> myRamp2.colorEntryList[0].color LocatorTMP.color >> mySoftBoxSpotlight.color LocatorTMP.blue.setKeyable(True) LocatorTMP.green.setKeyable(True) LocatorTMP.red.setKeyable(True) multDiv = pm.shadingNode('multiplyDivide', asUtility = True, name = 'softboxIntensity2Input') LocatorTMP.intensity >> multDiv.input1X LocatorTMP.intensity >> multDiv.input1Y LocatorTMP.intensity >> multDiv.input1Z multDiv.output >> myRamp2.colorGain #//connect Shadow attributes LocatorTMP.rayTracedShadows.set(0) LocatorTMP.rayTracedShadows >> mySoftBoxSpotlight.useRayTraceShadows #//Rename and group mySoftboxTMP.setParent(LocatorTMP) mySoftboxTMP.rename('softBox') LocatorTMP.rename('softBoxControl') arrw.rename('softboxARROW') mySoftBoxSpotlight.rename('sofBoxSpot') softboxLightGRP = pm.group(LocatorTMP, arrw, name = "softboxLightGroup") softboxLightGRP.setPivots((0,0,0), os=True)