""" //////////////////////////////////////////////////////// // //Umbrella Light HDR v Alpha B //Written By Oliver Wolfson //email oliverwolfson@gmail.com //http://oliverwolfson.com/studio-light-hdr-images/ //This MEL script creates a rigged light and a procedurally textured reflector card, simulating a studio style umbrella light. //The rig is intended to be used for reflection or IBL when rendering using Mental Ray in Maya. // //////////////////////////////////////////////////////// Translated to PyMEL by Daniel Vasquez (heylight.com) """ if 'pm' not in dir(): import pymel.core as pm #//Create Umbrella mesh umbr = pm.polySphere(subdivisionsX= 40, subdivisionsY=40)[0] umbr.translateY.set(7.25) umbr.setScale([2.5, 1.7, 2.5]) pm.polyDelFacet(umbr.f[600:1519], umbr.f[1560:1599]) pm.polyProjection(umbr.f[0:639], ch=1, type='Planar', ibd=True, md='y') umbr.centerPivots() umbr.rotateX.set(-90) umbr.translateBy([0,4,0]) pm.delete(umbr,ch=True) pm.makeIdentity(umbr,apply=True, t=1, r=1, s=1, n=0) umbr.castsShadows.set(False) umbr.primaryVisibility.set(False) umbr.receiveShadows.set(False) umbr.motionBlur.set(False) umbr.smoothShading.set(False) #//Create and assign shader myLambert = pm.shadingNode('lambert', asShader = True, name='umbrellaShader') myShader = pm.sets(renderable=True, noSurfaceShader=True, empty=True, name='umbrellaS2G') myLambert.outColor >> myShader.surfaceShader myLambert.color.set([0,0,0], type='double3') myTex = pm.shadingNode('file', asTexture=True, name='umbrellaIncand') myTex.outColor >> myLambert.incandescence #// Make sure that the path below matches pth to your HDR image. myTex.fileTextureName.set('sourceimages/umbrellaLight/umbrella.hdr') myTex2 = pm.shadingNode('file', asTexture=True, name='umbrellaTransp') myTex2.outColor >> myLambert.transparency #// Make sure that the path below matches pth to your mask image. myTex2.fileTextureName.set('sourceimages/umbrellaLight/umbrellaMask.tif') pm.select(umbr) pm.hyperShade(assign = myLambert) #//create intensity ramp fileNode2 = pm.shadingNode('ramp', asTexture = True, name='umbrellaGain') fileNode2.outColor >> myTex.colorGain pm.removeMultiInstance(fileNode2.colorEntryList[1],b=True) pm.removeMultiInstance(fileNode2.colorEntryList[2],b=True) fileNode2.colorEntryList[0].color.set([1,1,1], type='double3') #// create Mult Divide myMultDivide2 = pm.shadingNode('multiplyDivide', asUtility = True, name='umbrellaOutcolorInput') fileNode2.outColor >> myMultDivide2.input1 myMultDivide2.input2X.set(100) myMultDivide2.input2Y.set(100) myMultDivide2.input2Z.set(100) #//Create Spot Light myUmbrellaSpotLight = pm.spotLight() myUmbrellaSpotLight.getParent().setTranslation([0,10,0]) myUmbrellaSpotLight.getParent().setRotation([180,0,0]) myUmbrellaSpotLight.emitSpecular.set(0) myUmbrellaSpotLight.coneAngle.set(105) myUmbrellaSpotLight.penumbraAngle.set(10) myUmbrellaSpotLight.dropoff.set(6) myUmbrellaSpotLight.useRayTraceShadows.set(1) myUmbrellaSpotLight.lightRadius.set(3) myUmbrellaSpotLight.shadowRays.set(20) myUmbrellaSpotLight.intensity.set(1) myUmbrellaSpotLight.decayRate.set(2) myMultDivide2.outputX >> myUmbrellaSpotLight.intensity myUmbrellaSpotLight.areaLight.set(1) myUmbrellaSpotLight.getParent().setParent(umbr, a=True) # Fix this!! umbr.rotateBy([90,0,0], space='world') myUmbrellaSpotLight.getParent().setTranslation(umbr.getRotatePivot()) pm.makeIdentity(umbr, 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) ) 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 >> fileNode2.colorEntryList[0].color LocatorTMP.color >> myUmbrellaSpotLight.color LocatorTMP.blue.setKeyable(True) LocatorTMP.green.setKeyable(True) LocatorTMP.red.setKeyable(True) multDiv = pm.shadingNode('multiplyDivide', asUtility = True, name='umbrellaIntensityInput') LocatorTMP.intensity >> multDiv.input1X LocatorTMP.intensity >> multDiv.input1Y LocatorTMP.intensity >> multDiv.input1Z multDiv.output >> fileNode2.colorGain #//connect Shadow attributes LocatorTMP.rayTracedShadows.set(0) LocatorTMP.rayTracedShadows >> myUmbrellaSpotLight.useRayTraceShadows #//Group and rename umbr.rename('umbrella') LocatorTMP.rename('umbrellaControl') arrw.rename('umbrellaARROW') myUmbrellaSpotLight.rename('umbrellaSpot') umbr.setParent(LocatorTMP) umbrellaLightGRP = pm.group(LocatorTMP, arrw, name = "umbrellaLightGroup") umbrellaLightGRP.setPivots((0,0,0), os=True)