僕のスクリプトの分解の仕方 for Autodesk Maya

まずは分解したいスクリプトを開く事。
よりも先ず、そのスクリプトが一体どんな事をしているのか?
の全体のフローをチャート化する。
頭の中でも、ノートに書きだしても良いです。


┌-----------------┐
|ノードを選択する |
└-----------------┘
     ↓
┌-----------------┐
|ポリゴンを割る。 |
└-----------------┘

など。分岐の処理なんかもあれば

┌-----------------┐
|ノードを選択する |
└-----------------┘
        |if(対象がポリゴンかどうか?)
  ┌---------―---------┐
  ↓          ↓
┌-------------┐┌-------------┐
|何もしない 。||Split Polygon|
└-------------┘└-------------┘

その分解しようとしている対象にUIが付いていれば分解はしやすいですね。
ボタンを押した時になんのプロシージャをコールしているかが分かるので。

ボタンが無い場合は書きだしたフローチャートに見合った処理(関数)がどこにあるか?をテキストエディタの「検索」を使って
片っ端からキーワードを検索します。例えば「ノードの選択」系であれば<b>select</b>か<b>ls</b>など。

APIを使っていなければ。特にリファレンスを読みながらで分解可能です。

一番ぶつかってしまう部分としては、複雑な処理や書式(公式など)。
これに関しては、正直僕もぶつかって心折れたりします。なんせ数学は大の苦手です。(仕事上やらなきゃいけませんが。笑)
ただこれについては優秀なプログラマーさんの一言を借りれば

「ん?んなもんいちいち覚えていられないよ。(笑)」

何度もやっていればその内、感覚で覚えて行きますし。
先駆者の方が一生懸命になって作ってくれた式をそのままマルっと有効活用しちゃいましょうよ。と言うのが僕の考えです。(笑)
勿論今となっては、キチンと書ける処理もあります。
受けた恩恵は後で返しさえすればOKです。

だから例えばradianはdegree * PI / 180だとかなんだかよくわからない物でも、後々。あ、なるほど180度の部分は時計回りなのか反時計回りなのか。とかずーっとやってると、分かったりもしますんで。気長に付き合って行きましょう。一礼してからコピペしちゃえばOKです。

あとは、複雑にくまれている条件式と繰り返し。
繰り返しで戸惑うのは、カウントアップなのかカウントダウンなのか。カウントアップは<b>for( $ = 0; $i < ? ; $i++(or ++$i))</b>。
カウントダウンはfor( $i = 3; $i > 0; $i--(or --$i))。
なかには、ゼロになるまで動き続けろなんて言う男気ある書き方のものもあります。while( 1 ){ if( 対象がまだ存在するか? ) break; }など。(笑)
これはやり始めの時は、無限ループに陥ってしまいますから
外して上げれるのならば外しちゃってもいいと思います。
ただ、外す前に処理をどうしているのか?を良く理解する事が大事ではありますが。

条件式は大抵のものは読めるとは思います。
なかには、1と0のみで判断させ。処理を飛ばしている四則演算を用いた処理も在るかもしれませんが、キチンと分かってしまえば
自分なりに直してしまうのもアリです。

普通に書けば。

$i = 0;
if( $i == 0 )
{
  print "ゼロだよ";
}
else
{
  print "ゼロじゃないんだよ";
}

四則演算では

$i = 0;
print ( $i ? "ゼロじゃないんだよ" : "ゼロだよ" );

こうなります。
これちょっと使いどころとしては、Expressionとか便利です。

大体挫折する部分は、目玉の処理の複雑に組まれた公式のオンパレード。そこさえ乗り切れば後は大丈夫かなと。

そうそう。配列についてイマイチ。と言う方はこう考えてみてはどうでしょう。

配列は生まれたばかりの赤ちゃんがたくさんお昼寝している
新生児室。
看護士さんたちはお名前も勿論覚えていると思いますが
やはり管理しやすいのはカルテ(ID)ですよね。
データベースに、カルテのIDを入れると赤ちゃんの名前や
体重など色々と情報が出てくると思います。

新生児室 = 配列
カルテID = 配列ID

string $aka_chan[] = { "佐助", "茂吉", "綱吉" };

後は呼び出したいカルテナンバーを入れれば

print ( $aka_chan[1] + "くん 爆誕" ) ;
// Result: 茂吉くん 爆誕 //

と言った具合に。
・・・分かり辛いですかね。(笑)

とまあ、こんな感じでせっせと分解・理解・再構築をやったりしております。


宜しければどぞー。^^

Reply · Report Post