_581x100.png CGsyomei_583x102.gif 訪問者 無料カウンター ページビュー 無料カウンター

2009年10月04日

Max Script勉強中(ワイヤーカラーのランダムな色の割り当て。)

一念発起して遂にスクリプトの勉強を本格的に始めました。いやー、ほんと素人には難しいです。なのでプロな方のご意見をいろいろ伺ってみたいところです^^;

 とりあえず今回は破片系のエフェクトをやっていて大量の破片に分かりやすく色を付けたい場合を想定してやってみました。

Max Script wire_color.jpg

************************************************************

for i in 0 to 10 do
( box pos:[i*30,0,random 0 90]
)
for i in 1 to 10 do
( box pos:[i*30,30,0]
)
for i in 1 to 10 do
( box pos:[i*30,60,0]
)             --適当にボックスオブジェクトを製作。

select $box* --boxの名前を含む全てのオブジェクトをワイルドカード選択。


objList = selection as array --変数objListを宣言して先ほど選択したボックス群を配列化。

for i in objList do  --変数iを宣言してobjList内の諸々の要素にそれぞれ( )内の作業を反復。

(

r = random 0 255  -- 0から255までのランダムな値を変数rに代入。

g = random 0 255  -- 0から255までのランダムな値を変数gに代入。

b = random 0 255  -- 0から255までのランダムな値を変数bに代入。

i.wirecolor = [r,g,b] --変数iのワイヤーカラーに先ほどのランダムな値の変数r,g,bを指定。
)

************************************************************えー、ここで早速問題にぶちあたったんですが、先ほどのスクリプトを--以下の注釈なしで実行すると問題なく動作するんですが、注釈つけるともれなく

-- Error occurred in anonymous codeblock; filename: ; position: 404
-- Syntax error: at (, expected "do" or "collect"
-- In line: (


というエラーがでてしまいます。注釈はスクリプトの動作に影響しないと思うのですが、これは一体どういうことなのでしょうか。キャリアの問題でしょうかwほんと初歩的なことなのかもしれないですが、どなたか心当たりのある方ご指摘をよろしくお願いします。

 でもほんと今はかなり歩みが遅いですが、いろいろ概念的には理解できてきたのであとは場数を踏んでスクリプトのお約束事に慣れていけばいろいろできそうな展望は見えてきました。ゆくゆくはFumeと絡めて爆発のセッティングを簡単にできるツールとか作れたらいいなーとか思ってますが、いつになることやらです。

*追記

先ほど後輩にエラーが出る件を質問したら、どうやら注釈前のスペースが日本語スペースだと駄目なようです。英語スペースだと問題なくうまくいきました。

あと

select $box*

objList = selection as array

のこの2行も

objList = $box* as array

こう1行でまとめていいそうで。


いやー、こういう些細なことを知らないとなかなか前進しないもんですねー。先は長いなー。
posted by けゑ at 10:54| Comment(5) | TrackBack(0) | Max Script
この記事へのコメント
どもです。

Maxscript詳しくないんですが、doの後に(が無いとダメ、と言っているように見えます。
で、予想なんですが、doはすぐ次に(がこないとダメなんじゃないでしょうか。もしくは日本語をつかったことによる不具合とか…?
何らかの原因でコメントが無視されていないか、厳密な順番があるか、、、

普通に動きそうなもんですけどね、この感じ!!
直接明確な答えじゃなくてすみません、、、!!


がんばつてくださいーーー!
Posted by tai at 2009年10月04日 11:52
>taiさん どもどもー。そうですねー。doの後の部分の日本語スペースがまさにエラーの原因でした。確かにスクリプトエディターで見てみると、きちんと文が通っている場合はdoの文字が青くなるんですが、ミスっている場合は黒字のままでした。なので、完全にスペースを無くすか、英字のスペースを入れればOKだということです。これは言われなきゃ気がつかないなー。いやー、MaxScriptですらこうなのにこれでまたMelとかPythonとか覚えなきゃとかなるともう悶絶しますね^^;
Posted by けゑ at 2009年10月05日 11:32
MaxScriptの仕様はMELとかPythonと比べたら、かなりの異種...
VBっぽい感じありますし、いろんな言語から引っ張って混ざってる(混血)Script言語ですから…
個人的にはMaxScriptはかなり嫌いです Orz

一応MaxでPythonも使えそうですけど、いろいろ面倒な設定しなくちゃいけないらしい
いつかXSI、MAYAみたいに原生でPythonサポートできたらいいなぁと思います。

>とりあえず今回は破片系のエフェクトをやっていて大量の破片に分かりやすく色を付けたい場合を想定してやってみました。
と仰ってますけど、破片系はどのプラグインがメインでしょうか。PFlow?それともThinkngParticles?
ちなみに、PFlowにもTPにも簡単に色づけできますよ。PFlowはDisplay OPで、TPはGroupで設定できます ;)
Posted by まだまだNewbie at 2009年10月05日 11:56
少しだけ改造してみました。
ご参考まで;)
基本機能:
選択されたObjを複製し、ランダムにワイヤカラーとスケールを変更
複製の数は copyNum で定義されてます。

===============================

-- Define Pure Colors
pureWhite = color 255 255 255;
pureBlack = color 0 0 0;

-- Define Copy Numbers
copyNum = 5;

-- Get Active Selection List
sel = getCurrentSelection();
cloneNodes=#();

-- Do copy & Change Position & Random Scale
for obj in sel do
(
objPos = obj.pos
for i=0 to copyNum do
(
clone = copy obj;
clone.pos=random objPos [90,90,0];
scale clone [random 0.3 1,random 0.3 1,random 0.3 1]
appendIfUnique cloneNodes clone;

-- Change Wirecolor With Random Function
randomColor = random pureWhite pureBlack
clone.wirecolor = randomColor
print ("Set "+clone.name+" to "+randomColor as string)
)
)
Posted by まだまだNewbie at 2009年10月05日 13:37
>まだまだNewbieさん どうも詳しい解説&改造ありがとうございます。Maxscriptはやはり異質なんですね。自分はそこら辺まだ全く区別がつかないんでそこら辺は自分にとって得なのか損なのかわからないところですが。

今回のはPFlowとかというよりは、Rayfire等で作った大量の破片オブジェクトに対していろいろやるといった感じですね。ちなみにPflowのdisplay opでもランダムなカラー割り当てってできるんですか。ちょっとやり方わからないんですが、後で見ておきます。

 改造していただいたスクリプトは現状ちょっと自分のスキルでは理解に乏しい部分が多々あるのですが、今後すごく勉強になりそうです。ありがとうございます。for obj in sel do以下の辺りがさすがスクリプト理解している人が書いてあるなあといった感じです。現状なるべく簡単なオペレーションはスクリプトを使って制御するように頑張っています。お陰様で現状作業スピードは従来の7分の1くらいです^^;これがそのうち同等になって、さらに2倍3倍の作業効率になるんでしょうね。楽しみです。また今後ともいろいろ相談させてください!
Posted by けゑ at 2009年10月07日 19:03
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/32656505

この記事へのトラックバック