ON-BLOG

CGのこと、あれこれ書いてます。

XSIユーザーから観たMELスクリプトについて 其の二

では次。
球を円状に配置するスクリプト。
MELはこんな感じでした。

global proc circlesphere2(float $rad,float $pai,int $num)
{
        int $i;
        float $r = 0.0;
        float $add = 360.0 / $num;


        for($i = 0; $i < $num ; $i ++)
                {
                sphere;
                scale $pai $pai $pai;
                move $rad 0 0;
                rotate -ws -p 0 0 0 0 $r 0;
                $r += $add;
                }
}

こんな感じ
f:id:tommy_on:20130613221627p:plain

引数だけみましょうか。。
この部分

global proc circlesphere2(float $rad,float $pai,int $num)

それぞれ引数が
float $rad・・・・配置される円の半径
float $pai・・・・作成される球の半径
int $num・・・・・作られる球の数

コード自体の説明は特にいらないっすね。

で、SI版↓

「rotate -ws -p 0 0 0 0 $r 0;」

このコマンドはSIにはないので、
こんな感じに。

circlesphere(10.0,2.0,6);
function circlesphere(rad,pai,num)
{
        var r = 0.0;
        var add = 360.0 / num;
        
        for(var i = 0; i < num ; i++)
                {
                var Sphere= CreatePrim("Sphere", "NurbsSurface");
                SetValue(Sphere+".sphere.radius", 1);
                Scale(Sphere, pai, pai, pai);
                Translate(Sphere, rad, 0, 0, siRelative, siGlobal, siObj, siXYZ, null, null, null, null, null, null, null, null, null, 0, null);
                TranslatePivot(Sphere,0,0,0);
                Rotate(Sphere, 0, 0, r , siRelative, siGlobal, siObj, siXYZ, null, null, null, null, null, null, null, 0, null);
                r += add;
                }
}

f:id:tommy_on:20130613223127p:plain
このコマンドでMELっぽくしてます。

TranslatePivot(Sphere,0,0,0);

要はセンターを原点にして、スフィアを回してるだけですね。

まぁこんな感じで細かい部分ではSI、MAYAは違えど、
根本はやっぱ一緒ですね。特に数学系。

上げるとすれば、

「変数の前には「$」をつける」
「変数を使う場合は必ず(``)をつける」(シングルクォテーションではないです。)
「引数に型をきちんと設定する」
「セミコロンは必ずつける」
「プロシージャの名前にコマンド名は付けない」
この辺りを気をつけていればなんとかなるはず。。。


あと操作に関していえば、
スクリプトはエディタで実行できますが、
実行するとコードはエディタ上から消えます。

あとプロシージャの起動は
「SourceScript」を実行して名前と引数を指定すれば、
新しいソースを読むまで名前と引数だけでひたすら実行出来ます。

この微妙な違いが結構きつかったりしますね。。。



では…