Advertisement
Guest User

Particles to Rigid Bodies V1.1

a guest
Mar 27th, 2017
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.38 KB | None | 0 0
  1. //Creates rigid bodies inheritting initial per particle position and velocity
  2. //Assign as creation expression to "nParticleShape1" system or use shelf button to automatically
  3. //Playback once to generate rigid bodies, then disable particle evaluation to avoid generating additional rigid bodies on playback
  4. //After making changes to the particle emitter, delete any objects generated by expression before playing back again
  5. //Use emmitter max and min distance attributes or volume emitter type to avoid rigid bodies interpenetrating upon generation,
  6. //To use expression with other particle systems change any instances of "nParticleShape1" in the expression
  7. // Paste expression into script editor and use 'CTRL + F' for search and replace feature
  8. //If maya crashes upon playback, lower emission rate
  9. // If crashes persist, create rigid body manually and set playbacks start time to frame 0 before creating expression
  10. //Check expression for additional instructions and settings
  11.  
  12. // -Shelf Button Mel-
  13. //dynExpression -s "" -c nParticleShape1;
  14. //dynExpression -s "if (1==1) {\nstring $pTarget = \"pCube\";\n\nduplicate $pTarget;\nfloat $randRotateX = rand(-720,720);\nfloat $randRotateY = rand(-720,720);\nfloat $randRotateZ = rand(-720,720);\n\nvector $particlePosition = nParticleShape1.position;\nfloat $particlePositionX = $particlePosition.x;\nfloat $particlePositionY = $particlePosition.y;\nfloat $particlePositionZ = $particlePosition.z;\nsetAttr (($pTarget) + (nParticleShape1.particleId + 1) + \".translateX\") $particlePositionX;\nsetAttr (($pTarget) + (nParticleShape1.particleId + 1) + \".translateY\") $particlePositionY;\nsetAttr (($pTarget) + (nParticleShape1.particleId + 1) + \".translateZ\") $particlePositionZ;\nsetAttr (($pTarget) + (nParticleShape1.particleId + 1) + \".rotateX\") $randRotateX;\nsetAttr (($pTarget) + (nParticleShape1.particleId + 1) + \".rotateY\") $randRotateY;\nsetAttr (($pTarget) + (nParticleShape1.particleId + 1) + \".rotateZ\") $randRotateZ;\n\nrigidBody -n (\"ParticleToRigid\" + (nParticleShape1.particleId + 1)) -active ($pTarget + (nParticleShape1.particleId + 1));\n\nvector $particleVelocity = nParticleShape1.velocity;\nfloat $particleVelocityX = $particleVelocity.x;\nfloat $particleVelocityY = $particleVelocity.y;\nfloat $particleVelocityZ = $particleVelocity.z;\nsetAttr (\"ParticleToRigid\" + (nParticleShape1.particleId + 1) + \".initialVelocityX\") $particleVelocityX;\nsetAttr (\"ParticleToRigid\" + (nParticleShape1.particleId + 1) + \".initialVelocityY\") $particleVelocityY;\nsetAttr (\"ParticleToRigid\" + (nParticleShape1.particleId + 1) + \".initialVelocityZ\") $particleVelocityZ;\nsetAttr (\"ParticleToRigid\" + (nParticleShape1.particleId + 1) + \".initialSpinX\") $randRotateX;\nsetAttr (\"ParticleToRigid\" + (nParticleShape1.particleId + 1) + \".initialSpinY\") $randRotateY;\nsetAttr (\"ParticleToRigid\" + (nParticleShape1.particleId + 1) + \".initialSpinZ\") $randRotateZ;\n\nselect (($pTarget) + (nParticleShape1.particleId + 1));\nsetKeyframe -at ignore;\nsetKeyframe -at visibility;\nsetKeyframe -v 1 -t (frame - 1) -at ignore;\nsetKeyframe -v 0 -t (frame - 1) -at visibility;\n\nnParticleShape1.lifespanPP = 0;\n\n\t}" -c nParticleShape1;
  15.  
  16.  
  17. //Enable or disable script
  18. if (1==1) {
  19.  
  20. //Change "pCube" to the name of the target object (can't end with number)
  21. string $pTarget = "pCube";
  22.  
  23. //Initial rotation speed
  24. float $randRotateX = rand(-720,720);
  25. float $randRotateY = rand(-720,720);
  26. float $randRotateZ = rand(-720,720);
  27.  
  28. duplicate $pTarget;
  29.  
  30. vector $particlePosition = nParticleShape1.position;
  31. float $particlePositionX = $particlePosition.x;
  32. float $particlePositionY = $particlePosition.y;
  33. float $particlePositionZ = $particlePosition.z;
  34. setAttr (($pTarget) + (nParticleShape1.particleId + 1) + ".translateX") $particlePositionX;
  35. setAttr (($pTarget) + (nParticleShape1.particleId + 1) + ".translateY") $particlePositionY;
  36. setAttr (($pTarget) + (nParticleShape1.particleId + 1) + ".translateZ") $particlePositionZ;
  37. setAttr (($pTarget) + (nParticleShape1.particleId + 1) + ".rotateX") $randRotateX;
  38. setAttr (($pTarget) + (nParticleShape1.particleId + 1) + ".rotateY") $randRotateY;
  39. setAttr (($pTarget) + (nParticleShape1.particleId + 1) + ".rotateZ") $randRotateZ;
  40.  
  41. rigidBody -n ("ParticleToRigid" + (nParticleShape1.particleId + 1)) -active ($pTarget + (nParticleShape1.particleId + 1));
  42.  
  43. vector $particleVelocity = nParticleShape1.velocity;
  44. float $particleVelocityX = $particleVelocity.x;
  45. float $particleVelocityY = $particleVelocity.y;
  46. float $particleVelocityZ = $particleVelocity.z;
  47. setAttr ("ParticleToRigid" + (nParticleShape1.particleId + 1) + ".initialVelocityX") $particleVelocityX;
  48. setAttr ("ParticleToRigid" + (nParticleShape1.particleId + 1) + ".initialVelocityY") $particleVelocityY;
  49. setAttr ("ParticleToRigid" + (nParticleShape1.particleId + 1) + ".initialVelocityZ") $particleVelocityZ;
  50. setAttr ("ParticleToRigid" + (nParticleShape1.particleId + 1) + ".initialSpinX") $randRotateX;
  51. setAttr ("ParticleToRigid" + (nParticleShape1.particleId + 1) + ".initialSpinY") $randRotateY;
  52. setAttr ("ParticleToRigid" + (nParticleShape1.particleId + 1) + ".initialSpinZ") $randRotateZ;
  53.  
  54. select (($pTarget) + (nParticleShape1.particleId + 1));
  55. setKeyframe -at ignore;
  56. setKeyframe -at visibility;
  57. setKeyframe -v 1 -t (frame - 1) -at ignore;
  58. setKeyframe -v 0 -t (frame - 1) -at visibility;
  59.  
  60. //Kills particle after rigid body is created
  61. nParticleShape1.lifespanPP = 0;
  62.  
  63. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement