2011年9月13日火曜日

scriptのすすめ5 ~カラー値とマテリアル~

今回はカラーとマテリアル周りをやっていきましょう。

その前に、少しプロパティの説明を。
以前、showproperties $ を紹介しましたが
これは、$(選択オブジェクト)の持っているプロパティをリスナーに表示してくれるメソッドでした。

maxでは、様々な値は階層構造になっています。
例を出すと、
$.pos.controller.X_position.controller.value
$.material.diffuse
の様に、ドットで区切って階層を潜ってアクセスできます。
少し特殊ですが、こんな書き方もできます。
$.parent.rotation.contoller選択オブジェクトの親の回転のコントローラーにアクセスできます。
(親オブジェクトが無い場合はエラーになると思います。)

Twitterでも少し書きましたが、showpropertiesはどの階層でも使えるので
showproperties $.parent.materialの様な書き方もできます。
(プロパティを持たない場合はエラーになります。)

では、前回のスクリプトで作ったオブジェクトのワイヤフレームの色を変えてみようと思います。
別ソフトで作った多くのオブジェクトをmaxにインポートした場合、全て同じワイヤーフレームの色で
見づらいなんて事が起きますね。
他のソフトはそれがデフォルトですが、max育ちの自分にはあーやだやだってな感じです。
なので、ランダムにカラーを割り当てようと思います。

for o in selection do
(
     Rr= random 0 255
     Rg= random 0 255
     Rb= random 0 255
     o.wirecolor = color Rr Rg Rb
)


カラーの値の基本は、
color 赤 緑 青 
の様に書きます。前回同様ランダムを3つ用意したのはRGBに全て同じ値が入ると
グレースケールになってしまうからです。逆にそのようにしたい場合は同じランダム値を
アサインすると良いと思います。
では、次にマテリアル版です。
maxではオブジェクトが作られた段階では、何もマテリアルが割り当てられていないので
そこから書く必要があります。

for o in selection do
(
     Rr= random 0 255
     Rg= random 0 255
     Rb= random 0 255
     m = standardmaterial()
     m.diffuse = color Rr Rg Rb
     m.selfillumination = 100
     o.material = m
)



ついでに、自己照明の値も100にしてみました。
まず、スタンダードマテリアルを用意してその値を変更し
最後に選択オブジェクトに割り当てするといった流れです。

今回はこの辺で。
次回はアニメーション周りを解説したいと思います。

0 件のコメント :