2011年9月17日土曜日

本日のタイムラプス


今日は、ひと際タイムラプス日和でした。良い雲。
もっと広く空が写る所で撮ってみたかった。

2011年9月15日木曜日

Houdini memo

Hscript Texportで
echo `primgrouplist("/obj/point1/")`
グループを全てをHscript Texportに表示。

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にしてみました。
まず、スタンダードマテリアルを用意してその値を変更し
最後に選択オブジェクトに割り当てするといった流れです。

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

2011年9月4日日曜日

scriptのすすめ4 ~forループとrandom関数~

forループの解説です。

maxscriptで使うforループの書き方は、基本的にはこのような↓2種類しかありません。
for i = 1 to 100 do
for o in selection do

場合によっては、iやoやselectionが別のものに置き換わったりしますが。
(以前書きましたが、iやoは何の文字でも良いです。)

では、forループでboxを10個作ってみましょう。
for i = 1 to 10 do
(
     box()
)
これでは、同じ場所に出来てしまうので、一個ずつ位置をずらします。

for i= 1 to 10 do
(
    b=box()
    b.pos = [i*25,0,0]
)

forループの中では、iという値を使うことが出来ます。
iの値はforループの回数毎に、1,2,3.....10と順番に変化していくので
上記の様なことが出来ます。

とこんな感じで基本は出来ました。

次にランダム関数を使ってみましょう。
ランダム関数は、実行される度にランダムな数字を返すメソッドです。

書き方は以下の様な感じです。

random 最小値 最大値

random 1 20 -- 1から20のうちのランダムな値を返す。
random 0.2 25.5 -- 0.2から25.5のうちのランダムな値を返す。

なぜ、2つ例を出したかというと、整数か小数点という違いです。
欲しいランダムな値を、整数値が欲しい場合は整数で書き、
小数点が欲しい場合は、小数点で書かないといけません。

では、boxをランダムに平面状に並べてみます。
for i = 1 to 10 do
(
    r = random -100 100
    b = box()
    b.pos = [r,r,0]
)

思った結果と違うかと思います。

これは、b.pos = [r,r,0]と書いてあるように、xとyの座標が同じランダム値が
入っている為に上記の様な結果になってしまいます。

なので、

for i = 1 to 10 do
(
    r1 = random -100 100
    r2 = random -100 100
    b = box()
    b.pos = [r1,r2,0]
)
この様に書くと望んだ結果になるかと思います。
ランダム関数は同じ書き方をしても、毎回毎回ランダムな値を返します。
ランダム関数を使うと、やっとスクリプトっぽい感じ(自動で行っている感)が
出てくると思います。

今回はこの辺で。

2011年9月1日木曜日

Houdini CardStick System


Houdiniでこれをやるのに3日間色々調べたり、試行錯誤しようやく出来た。
maxなら5分で出来ましたorz
でも、ベクトルとクォータニオンの勉強になったので良しとします。とポジティブな書き込みで
気分を紛らわそうと思います。
もうちょっと詰めてみるか。