# select an object and run script to make it dissolve # disolves object based on uv map layout from top to bottom import maya.cmds as cmds sel = cmds.ls(selection = True) print sel[0] #create defintion that will delete everything the script created def deleteScript(): if cmds.objExists ("dissolve_*"): cmds.delete ("dissolve_*") else: print("Warning: no objects to delete.") deleteScript() #deletes everything the script created #creates defintion that will freeze transformations and delete history on selection def freTransDelHis(objName): cmds.select(objName) cmds.FreezeTransformations() cmds.DeleteHistory() freTransDelHis(sel[0])#freezes transformations and deletes history on selection #prefix for easy deletion of everything this script creates pfx = "dissolve_" startFrame = 1 #set start frame for the effect endFrame = 200 #set end frame for the effect numParticles = 100000 #set higher for bigger objects #creates ramp1 and assigns it to the default lambert shader cmds.shadingNode( "lambert", asShader=True, name=pfx + "opacity") cmds.shadingNode ("ramp", asTexture=True, n=pfx + "opacityLine") cmds.shadingNode ("place2dTexture", asUtility=True, n=pfx + "place2dTextureOpacityLine") cmds.connectAttr (pfx + "place2dTextureOpacityLine.outUV", pfx +"opacityLine.uv", f=True) cmds.connectAttr (pfx + "place2dTextureOpacityLine.outUvFilterSize", pfx + "opacityLine.uvFilterSize", f=True) cmds.connectAttr (pfx + "opacityLine.outColor", pfx + "opacity.color", f=True) #creates ramp2 emission line (controls particle emission) cmds.shadingNode( "lambert", asShader=True, name=pfx + "emission") cmds.shadingNode ("ramp", asTexture=True, n=pfx + "emissionLine") cmds.shadingNode ("place2dTexture", asUtility=True, n=pfx + "place2dTextureEmissionLine") cmds.connectAttr (pfx + "place2dTextureEmissionLine.outUV", pfx + "emissionLine.uv", f=True) cmds.connectAttr (pfx + "place2dTextureEmissionLine.outUvFilterSize", pfx + "emissionLine.uvFilterSize", f=True) cmds.connectAttr (pfx + "emissionLine.outColor", pfx + "emission.color", f=True) #creates and applies arnold shader to object shader = cmds.shadingNode( "aiStandardSurface", asShader=True, name=pfx + "aiStandardOpacity") cmds.select (sel[0]) cmds.hyperShade(assign=shader) cmds.connectAttr (pfx + "opacityLine.outColor", pfx + "aiStandardOpacity.opacity", f=True) #makes disapearing object visible in arnold render cmds.setAttr (sel[0]+".aiOpaque", 0) #sets playback speed to realtime cmds.playbackOptions (e=True, playbackSpeed=0, maxPlaybackSpeed=1) #set ramp keyframes on opacityLine cmds.currentTime(startFrame) cmds.setAttr (pfx + "opacityLine.interpolation", 0) cmds.setAttr (pfx + "opacityLine.colorEntryList[1].color", 0, 0, 0, typ="double3") cmds.setAttr (pfx + "opacityLine.colorEntryList[0].color", 1, 1, 1, typ="double3") cmds.setAttr (pfx + "opacityLine.colorEntryList[0].position", 0) cmds.setAttr (pfx + "opacityLine.colorEntryList[1].position", 1) cmds.setKeyframe (pfx + "opacityLine.cel[0].ep") cmds.setKeyframe (pfx + "opacityLine.cel[1].ep") cmds.currentTime(endFrame) cmds.setAttr (pfx + "opacityLine.colorEntryList[1].position", .001) cmds.setKeyframe (pfx + "opacityLine.cel[1].ep") #set ramp keyframes on emissionLine cmds.currentTime(startFrame) cmds.setAttr (pfx + "emissionLine.interpolation", 0) cmds.setAttr (pfx + "emissionLine.colorEntryList[0].color", 0, 0, 0, typ="double3") cmds.setAttr (pfx + "emissionLine.colorEntryList[1].color", 0, 0, 0, typ="double3") cmds.setAttr (pfx + "emissionLine.colorEntryList[2].color", 1, 1, 1, typ="double3") cmds.setAttr (pfx + "emissionLine.colorEntryList[0].position", 0) cmds.setAttr (pfx + "emissionLine.colorEntryList[1].position", 1) cmds.setAttr (pfx + "emissionLine.colorEntryList[2].position", 0.985) cmds.setKeyframe (pfx + "emissionLine.cel[0].ep") cmds.setKeyframe (pfx + "emissionLine.cel[1].ep") cmds.setKeyframe (pfx + "emissionLine.cel[2].ep") cmds.currentTime (endFrame) cmds.setAttr (pfx + "emissionLine.colorEntryList[1].position", 0.016) cmds.setAttr (pfx + "emissionLine.colorEntryList[2].position", 0.001) cmds.setKeyframe (pfx + "emissionLine.cel[1].ep") cmds.setKeyframe (pfx + "emissionLine.cel[2].ep") #reselect original object cmds.select(sel[0]) #create emitter cmds.emitter ( type="surface", n=pfx + "particleEmitter", r=100, sro=0, nuv=0, cye="none", cyi=1, spd=0, srn=0, nsp=0, tsp=0, mxd=0, mnd=0, dx=1, dy=0, dz=0, sp=0) #create particles cmds.nParticle (n=pfx + "particles") #attach emitter and particles cmds.connectDynamic (pfx + "particles", em=pfx + "particleEmitter") #rename nucleus to fit naming convention cmds.rename( "nucleus1", pfx + "nucleus1") cmds.select (pfx + "particles") #turns off gravity for particles cmds.setAttr (pfx + "particlesShape.ignoreSolverGravity", 1) #sets the amount of particles being created to numParticles (default 100,000) cmds.currentTime (startFrame) cmds.setAttr (pfx + "particleEmitter.rate", numParticles) cmds.setKeyframe (pfx + "particleEmitter.rat") cmds.currentTime (endFrame-1) cmds.setAttr (pfx + "particleEmitter.rate", numParticles) cmds.setKeyframe (pfx + "particleEmitter.rat") cmds.currentTime (endFrame) cmds.setAttr (pfx + "particleEmitter.rate", 0) cmds.setKeyframe (pfx + "particleEmitter.rat") #creates attributes that allow the particles to take the color of the objects material cmds.addAttr (pfx + "particlesShape", ln="rgbPP", dt="vectorArray") cmds.addAttr (pfx + "particlesShape", ln="rgbPP0", dt="vectorArray") #sets lambert1 as the particle color cmds.connectAttr("lambert1.outColor", pfx + "particleEmitter.particleColor", f=True) cmds.setAttr (pfx + "particleEmitter.inheritColor", 1) cmds.setAttr ("lambert1.ambientColor", 0.819355, 0.819355, 0.819355, type="double3")#only needed to make the color show up on lambert :/ ################### cmds.connectAttr ("lambert1.outColor", pfx + "aiStandardOpacity.baseColor", f=True) #applies emission map cmds.connectAttr (pfx + "emissionLine.outColor", pfx + "particleEmitter.textureRate", f=True) cmds.setAttr (pfx + "particleEmitter.enableTextureRate", 1) #creates volume axis cmds.select (pfx + "particles") #turbulance cmds.volumeAxis (pos=[0,0,0], magnitude=6, att=0, ia=0, afc=0, afx=1, arx=0, alx=0, drs=1, dx=1, dy=.2, dz=0, trb=0.1, trs=0.6, tfx=2, tfy=2, tfz=2, tox=0, toy=0, toz=0, dtr=1, mxd=1, vsh="cube", vof=[0, 0, 0], vsw=360, tsr=0.5, n=pfx + "volumeAxisField") cmds.scale(20, 20, 20) cmds.connectDynamic (pfx + "particlesShape", f=pfx + "volumeAxisField") cmds.connectAttr ("time1.outTime", pfx + "volumeAxisField.time") cmds.setAttr (pfx + "volumeAxisField.useMaxDistance", 0) #setting atributes to make particles look more like dust cmds.setAttr (pfx + "particlesShape.lifespanMode", 0) cmds.setAttr (pfx + "particlesShape.massScaleInput", 6) cmds.setAttr (pfx + "particlesShape.massScale[0].massScale_Position", 0) cmds.setAttr (pfx + "particlesShape.massScale[0].massScale_FloatValue", 0.360) cmds.setAttr (pfx + "particlesShape.massScale[1].massScale_Position", 1) cmds.setAttr (pfx + "particlesShape.massScale[1].massScale_FloatValue", 0.120) cmds.setAttr (pfx + "particlesShape.conserve", .95) cmds.setAttr (pfx + "particlesShape.radiusScaleInput", 6) cmds.setAttr (pfx + "particlesShape.radiusScale[0].radiusScale_Position", 0) cmds.setAttr (pfx + "particlesShape.radiusScale[0].radiusScale_FloatValue", 0.680) cmds.setAttr (pfx + "particlesShape.radiusScale[1].radiusScale_Position", 1) cmds.setAttr (pfx + "particlesShape.radiusScale[1].radiusScale_FloatValue", 0.06) cmds.setAttr (pfx + "particlesShape.radiusScaleRandomize", 0.6) cmds.setAttr (pfx + "particleEmitter.speedRandom", 1.375) #makes particles into spheres instead of points cmds.setAttr (pfx + "particlesShape.particleRenderType", 4) cmds.setAttr (pfx + "particlesShape.radiusScaleRandomize", 0.6) cmds.setAttr (pfx + "particlesShape.radius", 0.02) cmds.setAttr (pfx + "particlesShape.radiusScaleInput", 6) #uv map within 1 to 1 space along x axis cmds.polyPlanarProjection(sel[0]+ ".f[1.1]",ch=True, ibd=True, md="x", kir=True)