前回しれっと使ってしまった『transform node』という単語みなさん理解していたでしょうか。
そもそもMayaはnode(ノード)で出来ています。
そしてノードは大きく分けて二つの種類に分けられます。
DAGノードと、DGのノードです。
詳しくは↓
http://mukaimame-cg.jugem.jp/?eid=100
今回は、その中でもオブジェクトを作る上でかかせない
DAG ノードで DG ノードの一種でもあるtransform nodeとshape nodeについて書きます。
まず、ポリゴンの球を作ってハイパーシェードの入出力コネクションをしてみます。
上のような関係が出ると思います。
左から説明すると、
create node
shape node
shading group node
transform node
となっています。
まず、create nodeですがこれが今回で言う球の形状を決めています。
この中に半径、分割数といった値が入っています。
そしてcreate nodeのoutputからshape nodeのinMeshに繋がれています。
shape nodeではcreate nodeからきた形状を
私達がUI上で見れるように形作ってくれます。
他にもレンダリングの詳細やスムースメッシュなどの値が入っています。
ちなみにUI上でヒストリの削除をすると
このshape nodeのoutMeshの前に繋がれていたノード達が消えていきます。
そしてshading group nodeはおおまかにいうとshape nodeで形作ったものに色を付けています。
ここではディスプレイメントやレンダリングの設定等様々な値が入っています。
そして最後transform nodeですがこれら設定がされたオブジェクトが
どこに配置されるのかどこにピボットがあるのかなどの値が入っています。
さてお次はアウトライナです。
ディスプレイ → シェイプ にチェックを入れています。
見て分かるようにpSpere1には二つのノードによる階層が出来ています。
ちなみに上がtransform node下がshape nodeです。
つまり何が言いたいかというとtransform nodeとshape nodeは親子関係があるということです。
では試しにUI上でpSpere1を選択し、↓キーを押してみて下さい
ちなみに↓キーはpick workのdownのショートカットでひとつ下の階層を選択します。
右下のスクリプトエディタに
// 結果: pPlaneShape1 //
と表示されshape nodeが選択できたかと思います。
・・・と、このような意外と基礎知識は見落としがちです。
これを知っていたら何ができるという具体例はあまり浮かびませんが
これを知っているのと知っていないのとでは制作において大きく違うと思います。
とくにバインド時のshape nodeの繋がりは理解しておくと
後からブレンドターゲットを追加したりなど活用できると思います。
なんか今回は活字ばっかになってしまいましたが参考になればと思います。
2013年5月4日土曜日
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つしかコネクションされていません。
今回は簡単な使い方だけでしたがいろいろと使い道はあると思います。
ペアレント化されている子供の階層のワールド座標を取得できるというだけで
夢がひろがりますよね?・・・よね・・・?
はい、ではまぁ色々とチャレンジしてみてください。
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をかけ合わせ
新しいジョイントの回転値にします。
コネクション方法は前の記事でもやってるので省きます。
するとこんな感じで滑らかに曲がってくれます。
これを応用すれば人型でバインドするのが難しい尻、肩等の調整が
うまくできるのではないでしょうか。
リアル系は素直にマッスルを試す方がいいと思いますが
カートゥーン系のようなキャラクターは良いかもしれません。
(とか書きましたがマッスルに関してはまだまだ勉強中です;;)
以上ですー
気持ち的には3日に1投稿くらいしたいのですが
私用で最近なかなか書けませんでした;;
今回は補助ボーンです。
補助ボーンとはスキニングの時の補助として作るボーンのことです。
ちなみにスキニングはボーンでしか行えないと思ってらっしゃるかたも
多いのではないでしょうか。
スキニングはポリゴン等でもバインドできます。
(たしかジョイントは必須になったと思います)
何か厚みのあるものをバインドさせたいときには便利です。
マッスルを使わずに疑似的な筋肉の表現なんかも使えると思います。
まぁ今回は説明しませんが・・・
こんなものを用意しました。
ただの円柱にボーンをバインドしたものです。
(なんとなくスムースメッシュプレビューにしてあります)
曲げるとこんな感じです。
ウエイトはインタラクティブで
一番下のジョイント(root)から真ん中のジョイントまでの頂点のウエイトを
一番下のジョイント(root)に対して1、
真ん中のジョイントから一番上の末端ジョイントまでの頂点のウエイトを
真ん中のジョイントに対して1にしてあります。
曲げた真ん中のジョイントに近い部分がポリゴンをえぐってしまっており
滑らかには曲がっていません。
滑らかに曲がるために、この選択されたエッジは
真ん中のジョイントの半分の値をとってほしいです。
そこでまず同じポジションにジョイントを新しく作ります。
回転軸は真ん中のジョイントと同じ方向にしておいて下さい。
バインドされたオブジェクトと
バインドしているルートジョイントと
新しく作ったジョイント
この3つを選択した状態で
スキン → スムース スキンの編集 → インフルエンスの追加
をします。
すると後から追加したジョイントもウエイトを持つことができるようになるので
先ほどのエッジの部分の頂点のウエイトを新しく追加したジョイントに対し1にします。
後はこの新しく追加したジョイントに真ん中のジョイントの回転値の半分を
いれてあげれば良い訳です。
こんな感じで乗算除算ノードを使い真ん中のジョイントの回転値に0.5をかけ合わせ
新しいジョイントの回転値にします。
コネクション方法は前の記事でもやってるので省きます。
するとこんな感じで滑らかに曲がってくれます。
これを応用すれば人型でバインドするのが難しい尻、肩等の調整が
うまくできるのではないでしょうか。
リアル系は素直にマッスルを試す方がいいと思いますが
カートゥーン系のようなキャラクターは良いかもしれません。
(とか書きましたがマッスルに関してはまだまだ勉強中です;;)
以上ですー
登録:
コメント (Atom)










