用MEL脚本自动化螺旋形粒子设置过程

来源:互联网 发布:数码宝贝网络侦探推荐 编辑:程序博客网 时间:2024/04/29 12:38

1、创建一条曲线

2、确定曲线选中

3、点击shelf

 

脚本如下:

string $selection_list[] = `ls -sl`;
string $curveSelected = $selection_list[0];
float $startOffset = 0.1;
float $speed = (1.0/24.0);
offsetCurve -d $startOffset -n ($curveSelected + "guide");
float $startPoint[] = `pointOnCurve -pr 0 -p $curveSelected`;
float $startTangent[] = `pointOnCurve -pr 0 -nt $curveSelected`;
float $startGuide[] = `pointOnCurve -pr 0 -p ($curveSelected + "guide")`;
float $startNormal[];
$startNormal[0] = $startGuide[0] =$startPoint[0];
$startNormal[1] = $startGuide[1] =$startPoint[1];
$startNormal[2] = $startGuide[2] =$startPoint[2];

emitter -pos $startGuide[0] $startGuide[1] $startGuide[2] -dx $startTangent[0] -dy $startTangent[1]
    -dz $startTangent[2] -n ($curveSelected + "emitter") -spd 0.0 -type dir;
particle -n ($curveSelected + "particles");
setAttr ($curveSelected + "particlesShape.expressionsAfterDynamics") true;

select -r ($curveSelected + "particlesShape");
addAttr -ln "speed" -at "float";
setAttr ($curveSelected +"particlesShape.speed") $speed;
addAttr -ln "scaleOffset" -at "float";
setAttr ($curveSelected + "particlesShape.scaleOffset") $startOffset;
connectDynamic -em ($curveSelected + "emitter") ($curveSelected + "particles");
parent ($curveSelected + "emitter") $curveSelected;
string $mainCurveInfoNode = `pointOnCurve -ch on -pr 0 $curveSelected`;
string $guideCurveInfoNode = `pointOnCurve -ch on -pr 0 ($curveSelected + "guide")`;
string $exprString = "float $curve_param = " + $curveSelected + "particlesShape.age*" +
    $curveSelected    + "particlesShape.speed;/n" +
    "setAttr " + $mainCurveInfoNode + ".parameter $curve_param;/n" +
    "setAttr " + $guideCurveInfoNode + ".parameter $curve_param;/n" +
    "float $pos[] = `getAttr " + $mainCurveInfoNode + ".position`;/n" +
    "float $tan[] = `getAttr " + $mainCurveInfoNode + ".normalizedTangent`;/n" +
    "float $normEnd[] = `getAttr " + $guideCurveInfoNode + ".position`;/n" +
    "float $norm[];/n" +
    "$norm[0] = $normEnd[0] - $pos[0];/n" +
    "$norm[1] = $normEnd[1] - $pos[1];/n" +
    "$norm[2] = $normEnd[2] - $pos[2];/n" +
    "vector $posvec = <<$pos[0],$pos[1],$pos[2]>>;/n" +
    "vector $tanvec = <<$tan[0],$tan[1],$tan[2]>>;/n" +
    "vector $normvec = unit(<<$norm[0],$norm[1],$norm[2]>>);/n" +
    "vector $norm2vec = cross($tanvec,$normvec);/n" +
    $curveSelected + "particlesShape.position = $posvec + /n" +
    "(" + $curveSelected + "particlesShape.scaleOffset * $normvec *cos(" +
    $curveSelected + "particlesShape.age*20)) + /n" +
    "(" + $curveSelected + "particlesShape.scaleOffset*sin(" +
    $curveSelected + "particlesShape.age * 20));/n";
    dynExpression -rbd -s $exprString ($curveSelected + "particles");
    dynExpression -c -s $exprString ($curveSelected + "particles");

原创粉丝点击