2011年9月27日火曜日

Houdini Automatic BallRolling System


ポジションアニメーションを与えると自動で転がるシステムです。
クォータニオンを使っているので、どの方向にもいつでも回転できる所がポイントです。
こんなシステム使う仕事一生なさそうだけど、、、

2011年9月26日月曜日

Recursive Tree in maxscript

先週末、今週末と「スクリプトのすすめ」の続きを、と思ったのですが、
友人の仕事がピンチ!事で少しお手伝いをさせて頂いておりました。
その為全く時間が無く、更新できずでした。
飽き性の自分ですが、タイムラプスに夢中で飽きたわけでは無いです。。。

今回のヘルプで、出来たスクリプトありますのでご紹介。
木みたいな構造を組んだオブジェクトを作るスクリプトです。 
ブランチの数、点滅のタイミング、Lineの太さ 、アニメーションカーブ等を操作出来るようになっています。
四角いオブジェクトを繋ぐLineはLinkedXformでつながっていてオブジェクトの位置の変更も可能です。
枝が分かれて先からまた分かれて、、、を繰り返して階層構造になっていくので
その為の再帰関数を書いています。
「スクリプトのすすめ」でも解説できたらと思います。

実は、もうそろそろオムニバスを辞めてから、もうすぐ1年になります。
多分1年前の自分ではこれは作れなかった。
この1年色々勉強でき、それが在ってのこのツールなので、自分自身成長出来た、と思いもかけず
認識出来る事になり、少し嬉しい今日この頃でした。




2011年9月24日土曜日

本日のタイムラプス 24th Sep 2011

朝まで起きてしまったので、せっかくなので撮ってみました。
うちのベランダからです。

2011年9月18日日曜日

moon on 18th Sep 2011

本日の月。
RICHO GXRでタイプラプス撮りたいと思い外部装置を探していたら内蔵していたっ!
これは嬉しい。

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
でも、ベクトルとクォータニオンの勉強になったので良しとします。とポジティブな書き込みで
気分を紛らわそうと思います。
もうちょっと詰めてみるか。