Skip to content

Instantly share code, notes, and snippets.

@mattebb
Last active December 11, 2015 04:28
Show Gist options
  • Save mattebb/4545268 to your computer and use it in GitHub Desktop.
Save mattebb/4545268 to your computer and use it in GitHub Desktop.
Curl Noise (MEL)
// http://soup-dev.websitetoolbox.com/post/curl-noise-for-maya-5937312
pickWalk -d down;
string $part[] = `ls -sl`;
addAttr -ln "noiseFrequency" -at double3 $part[0];
addAttr -ln "noiseFrequencyX" -at double -p noiseFrequency $part[0];
addAttr -ln "noiseFrequencyY" -at double -p noiseFrequency $part[0];
addAttr -ln "noiseFrequencyZ" -at double -p noiseFrequency $part[0];
setAttr -type double3 ($part[0] + ".noiseFrequency") 0.4 0.4 0.4;
setAttr -e-keyable true ($part[0] + ".noiseFrequency");
setAttr -e-keyable true ($part[0] + ".noiseFrequencyX");
setAttr -e-keyable true ($part[0] + ".noiseFrequencyY");
setAttr -e-keyable true ($part[0] + ".noiseFrequencyZ");
addAttr -ln "noiseAmp" -at double $part[0];
setAttr -e -keyable true ($part[0]+".noiseAmp");
addAttr -ln "curlSpeed" -at double $part[0];
setAttr -e -keyable true ($part[0]+".curlSpeed");
setAttr ($part[0] + ".noiseAmp") 5.0;
setAttr ($part[0] + ".curlSpeed") 0.8;
addAttr -ln "phaseRate" -at double3 $part[0];
addAttr -ln "phaseRateX" -at double -p phaseRate $part[0];
addAttr -ln "phaseRateY" -at double -p phaseRate $part[0];
addAttr -ln "phaseRateZ" -at double -p phaseRate $part[0];
setAttr -type double3 ($part[0]+".phaseRate") 0 0 0;
setAttr -e-keyable true ($part[0]+".phaseRate");
setAttr -e-keyable true ($part[0]+".phaseRateX");
setAttr -e-keyable true ($part[0]+".phaseRateY");
setAttr -e-keyable true ($part[0]+".phaseRateZ");
setAttr ($part[0]+".phaseRateX") 0.4;
setAttr ($part[0]+".phaseRateY") 0.4;
setAttr ($part[0]+".phaseRateZ") 0.4;
addAttr -ln "phaseOffset" -at double3 $part[0];
addAttr -ln "phaseOffsetX" -at double -p phaseOffset $part[0];
addAttr -ln "phaseOffsetY" -at double -p phaseOffset $part[0];
addAttr -ln "phaseOffsetZ" -at double -p phaseOffset $part[0];
setAttr -type double3 ($part[0]+".phaseOffset") 0 0 0;
setAttr -e-keyable true ($part[0]+".phaseOffset");
setAttr -e-keyable true ($part[0]+".phaseOffsetX");
setAttr -e-keyable true ($part[0]+".phaseOffsetY");
setAttr -e-keyable true ($part[0]+".phaseOffsetZ");
Now run this in runtime before dynamics...
//copy this script into the runtime before or after dynamics
vector $pos = worldPosition + (noiseAmp * dnoise(<<time*phaseRateX + phaseOffsetX,time*phaseRateY +phaseOffsetY,time*phaseRateX+phaseOffsetZ>>));
$pos = <<$pos.x * noiseFrequencyX, $pos.y * noiseFrequencyY, $pos.z * noiseFrequencyZ>>;
vector $dx = dnoise( $pos + << curlSpeed, 0.0, 0.0 >> );
vector $dy = dnoise( $pos + << 0.0, curlSpeed, 0.0 >> );
vector $dz = dnoise( $pos + << 0.0, 0.0, curlSpeed >> );
vector $dnx = dnoise( $pos - << curlSpeed, 0.0, 0.0 >> );
vector $dny = dnoise( $pos - << 0.0, curlSpeed, 0.0 >> );
vector $dnz = dnoise( $pos - << 0.0, 0.0, curlSpeed >> );
float $vx = ($dy.z - $dny.z) - ($dz.y - $dnz.y);
float $vy = ($dz.x - $dnz.x) - ($dx.z - $dnx.z);
float $vz = ($dx.y - $dnx.y) - ($dy.x - $dny.x);
velocity = <<$vx,$vy,$vz>> * (noiseAmp) / (2.0*curlSpeed);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment