2013年4月30日火曜日

matrixについて

諸事情によりだいぶ期間が開きましたが今回はmatrixについてです。

mayaのtransform nodeには移動(translate)、回転(rotate)、スケール(scale)、シアー(shear)
というお馴染みのアトリビュートがありますがこれらを全て合わせたものがmatrixです。
(シアーはあまり使わないですかね・・・)

matrixは16個の数字を持ちます。
ちなみに移動(translate)は3つの数字(X、Y、Z)ですよね。
その数字についてとても分かりやすく解説して下さってるブログをご紹介します。
http://melpystudio.blog82.fc2.com/blog-entry-69.html


さて、ではmatrixをどんな時に使えばいいのかということですが
以前decomposeMatrixに触れたのでそれを使った
グレードアップ版ペアレントコンストレインをご紹介します。
(ちなみに今回はmaya2011で作ってます)















まずはこのようにオブジェクトを2つ用意し、トランスフォームのフリーズをしておきます。

プラグインマネージャでdecomposeMatrix.mllというのをロードしておいて下さい。

次に、ハイパーシェードを開いて下さい。




次に、画面左下のMELのところに
createNode decomposeMatrix;
と打ちこんでEnterキーを押してください。

するとハイパーシェードの作業領域にdecomposeMatrix1というノードが
一つ出来上がったと思います。
もし表示されない場合は
select decomposeMatrix1;
と同じくMELのところにうって入出力コネクションボタンを押してみてください。


ちなみにmaya2013の場合はノードエディタを開きTABキーを押し
decぐらいまで打ったらdecomposeMatrixが出てくるのでそれを押せば出来ます。


decomposeMatrixノードはmatrixの16個数字から移動(translate)、回転(rotate)、
スケール(scale)、シアー(shear)の値に変換してくれるノードです。






















では次にコネクションエディタを開き右側にpCube1
左側にdecomposeMatrix1をロードします。

そしてworldMatrixからinputMatrixへコネクションします。

ちなみにtransformノードにはmatrixが幾つもあるのですが
なぜworldMatrixなのかというとペアレントコンストレインのように
world座標で制御したい為です。






















次に左側にdecomposeMatrix1、右側にpSphere1をロードします。
そしてそのまま
outputTranslateとtranslate
outputRotateとrotate
outputScaleとscale
outputShearとshear
をコネクションします。

これで完成です!


で、なにがグレードアップ版かというとスケール
シアーの値もコンストレインされているという点と
コネクションされている数が全然違うので処理が軽いということです。

ハイパーシェード等で見てもらえば分かると思いますが
通常のペアレントコンストレインは17つコネクションされているのに対し
グレードアップ版ペアレントコンストレインは5つしかコネクションされていません。


今回は簡単な使い方だけでしたがいろいろと使い道はあると思います。
ペアレント化されている子供の階層のワールド座標を取得できるというだけで
夢がひろがりますよね?・・・よね・・・?

はい、ではまぁ色々とチャレンジしてみてください。

2013年4月5日金曜日

補助ボーン

また期間が開いてしまいました。
気持ち的には3日に1投稿くらいしたいのですが
私用で最近なかなか書けませんでした;;


今回は補助ボーンです。
補助ボーンとはスキニングの時の補助として作るボーンのことです。


ちなみにスキニングはボーンでしか行えないと思ってらっしゃるかたも
多いのではないでしょうか。

スキニングはポリゴン等でもバインドできます。
(たしかジョイントは必須になったと思います)

何か厚みのあるものをバインドさせたいときには便利です。
マッスルを使わずに疑似的な筋肉の表現なんかも使えると思います。

まぁ今回は説明しませんが・・・




















こんなものを用意しました。
ただの円柱にボーンをバインドしたものです。
(なんとなくスムースメッシュプレビューにしてあります)




















曲げるとこんな感じです。

ウエイトはインタラクティブで
一番下のジョイント(root)から真ん中のジョイントまでの頂点のウエイトを
一番下のジョイント(root)に対して1、
真ん中のジョイントから一番上の末端ジョイントまでの頂点のウエイトを
真ん中のジョイントに対して1にしてあります。


曲げた真ん中のジョイントに近い部分がポリゴンをえぐってしまっており
滑らかには曲がっていません。




















滑らかに曲がるために、この選択されたエッジは
真ん中のジョイントの半分の値をとってほしいです。




















そこでまず同じポジションにジョイントを新しく作ります。
回転軸は真ん中のジョイントと同じ方向にしておいて下さい。

バインドされたオブジェクトと
バインドしているルートジョイントと
新しく作ったジョイント
この3つを選択した状態で

スキン → スムース スキンの編集 → インフルエンスの追加
をします。

すると後から追加したジョイントもウエイトを持つことができるようになるので
先ほどのエッジの部分の頂点のウエイトを新しく追加したジョイントに対し1にします。


後はこの新しく追加したジョイントに真ん中のジョイントの回転値の半分を
いれてあげれば良い訳です。











こんな感じで乗算除算ノードを使い真ん中のジョイントの回転値に0.5をかけ合わせ
新しいジョイントの回転値にします。
コネクション方法は前の記事でもやってるので省きます。



















するとこんな感じで滑らかに曲がってくれます。



これを応用すれば人型でバインドするのが難しい尻、肩等の調整が
うまくできるのではないでしょうか。

リアル系は素直にマッスルを試す方がいいと思いますが
カートゥーン系のようなキャラクターは良いかもしれません。
(とか書きましたがマッスルに関してはまだまだ勉強中です;;)


以上ですー