日本でハリウッドVFXを制作! 「経産省アイディアボックス」 結果:  
●まとめエントリはこちら ●FAQ ●お問い合わせは左のメールフォームから

2009年5月14日木曜日

magコマンド応用編 (1):近づいたら色が変わる

オブジェクトを二つ作り、片方だけtranslateのアニメーションをつける。
そして、距離が近づいたら赤くなるエクスプレッションを作成する。

まず、エクスプレッションでは、任意に選択されたものではなく、決められたオブジェクトに固定される。

今回、以下の二つのオブジェクトを使用するので
nurbsSphere1 ;
nurbsCone1 ;

これを前回の$name[]配列に代入するようにすると以下のようになる。


{
string $name[] = { "nurbsSphere1","nurbsCone1"};

vector $obj1Vec = `xform -q -t -ws $name[0]`;
vector $obj2Vec = `xform -q -t -ws $name[1]`;

vector $distVec = $obj1Vec - $obj2Vec;
float $dist = `mag $distVec`;

print ($dist + "\n");
}



--------------------
次に色を変える手順だが、距離が離れていくと赤になるようにするほうが簡単なので、まずそれを作ってみることにした。

シェーダー名は
lambert2
で変更したいアトリビュート名は
.colorR

$distの値をシェーダーのカラーR値のドライバとして使用する。


その際に$distの値をそのまま使うと1ユニット動くとすぐ赤になってしまうので、10ユニットの移動でやっとRが1となるように$distに.1を掛けた。

$color = $dist*0.1;
lambert2.colorR=$color;

この二行をエクスプレッションに追加。

結果、ちゃんと動作はしてくれるが、オブジェクトに近づいたときに青緑になる
近いときはデフォルトのグレイになって欲しいのだが、Rがデフォルト値の0.5以下に下がってしまうので、
別の方法を考える必要がある。

1)デフォルトのグレイ(0.5)以下に値が小さくならないようにする。
2)オブジェクトの距離が大きくなると値がプラスされる・

$dist =(0.5+$dist*0.1);


これで対象オブジェクトと同じ位置にある時はグレイ、離れるに従って赤になる。

 

0 件のコメント:

コメントを投稿