2009年04月

2009年04月30日

フェイシャルボーンコントロールの試み その3 3ds max 2009

OpenGLのベンチマークであるSpecViewPerf10で自分の常用しているパソコンのベンチマークとってみると、Geforce8600GTSはちっとも速くないみたいだな。ここはやっぱりQuadroシリーズに手を出してみようかと考えていた矢先、LightWave3Dの認定グラボとかが発表になって、さらに今月号のCGWorldの記事。定額給付金も出る事だし、QuadroFX580とか買ってみようかなぁ・・・。価格を調べると、安いところだと2万7000円くらいで買えるんだよね。モノは試しかなぁ。

さて、舌のリグをどう作るのがいいか模索しているところなんだけど、曲線とパスコンストレイントを使ったリグにはこんな欠点がある事がわかった。

下のGIFアニメは曲線を先端のヘルパーを黄色い矢印の方向に回転させたものだ。現象がわかり易いようにパスコンストレイントの「反転を認める」をONにしていることもあるんだけど、このようにちょっとした事でボーンが裏返ったりして安定しない事がわかる。もちろん「反転を認める」をOFFにしても角度や曲率によってフリップはあちこちで起きる。

fig01

でもこれは至極当然な事で、1次元の曲線で3次元の方向を制御するには情報が足りないわけだ。

fig02

それでも緩やかなカーブであれば、MAXがそこそこ面倒を見てくれるようだけど、舌のようにかなり極端なカーブを描くようなものでこれを使うと、突然コントロール出来なくなったりする事になる。

そこでどうしたもんかと無い知恵絞って考えたのが、曲線を2本使う方法だ。パスが2本あれば、2本の線の間に面が張れるわけで、その面には法線を引く事が出来る。

まずは前回同様4ポイントのCVカーブを1本作成し、モディファイヤリストからスプラインIKコントロールを付加し、ヘルパーを作成する。そして後ろから2番目のヘルパーを最後のヘルパーにペアレントする。出来たらこれを移動ツールでSHIFTを押しながら横にコピーする。

fig03

これにボーンを仕込むためのポイントと曲線をコントロールするためのシェイプを追加していく。曲線の両端のポイントはシェイプで代用できそうな感じだけど、この先端のポイントをシェイプで代用すると、後で施す全体のねじれのコントロールがジンバルロックで回転角度が取得できなくてうまくいかなくなるよ。

fig04

次にねじるための仕組みを作って行く。

ねじりは両端のポイントのX軸回転角度を曲線上のポイントの位置によって按分したものにとりあえずしてみようと思う。さらに細かく制御したい場合はこの基本のねじりに対してパラメータで増減させるのがいいかな。
で、下の画像のように中に並んでいる両端を除く4つのポイントの回転コントローラのX軸回転に実数式を組み込む。

fig05

上の画像のを押すと下の画像のようなダイアログが出るので、実数式を選択してOKボタンを押す。

fig06

すると下の画像のような式コントローラのパネルが出てくる。ここで、左上の名前のところにp,r1,r2の3つの変数名をそれぞれ入力しては「作成」ボタンを押して、下の画像のように3つのスカラー変数を作成する。そして式には

(1−p)*r1+p*r2

を入力する。これは値pで角度r1とr2を内分する値を計算する式で、pの値が0~1の値をとれば、この式の計算結果はr1~r2の値を取る。

fig07

そして先に作った変数pをスカラーの枠内で選択し、すぐ下の「コントローラに割り当て」ボタンを押す。pに割り当てるのは式コントローラを仕込むポイントの位置をパスコンストレイントで決める時に使った「パーセント」で、下の画像ではPoint13に設定されたパスコンストレイントの中のものを選択している。pについてはPoint10~Point13でそれぞれ個別のものを指定する必要がある。

fig08

それに対して、r1とr2はそれぞれRootとEndのX回転の値を指定すればいい。
下の画像はr1に設定するRootのX回転。

fig09

そしてこっちがr2に設定するEndのX回転

fig10

Point10~Point13のそれぞれのX回転について式コントローラを上のように設定するわけだけど、いちいち全部設定するのは面倒なので、1つ設定したら保存して、残りはそのファイルをロードして変数の割り当てだけするようにすればいい。

fig11

結果としてこのようにEndとRootをX軸でねじると、2つの間にあるポイントが距離にあわせて回転の影響を受けるようになった。

fig12

これは円のシェイプで曲線を曲げても動作は変わらない。

fig13

この構造物にボーンチェーンを乗せて、前回のように位置コンストレイントとルックアットコンストレイントでくっつけていくんだけど、ボーンのねじり回転がポイントの回転に追従できるように、Root、Point10~Point13の各ポイントの上に新たにポイントを作り、それぞれのポイントにペアレントする。

fig14

これで基本的なところは出来たので、ボーンチェーンを作って前回のように位置コンストレイントとルックアットコンストレイントでこの構造にボーンを組み込む。
そして、各ボーンのルックアットコンストレイントのアップノードを選択のワールドのチェックを外して各ボーンの上のポイントを設定することで、ボーンはポイントに追従してねじる事が出来るようになる。

fig15

ここまでのところをアップしておくね。

続きはまた次回。

maxまとめページ



take_z_ultima at 11:30|この記事のURLComments(0)TrackBack(0)3ds Max | CG

2009年04月29日

お休みなので

ブログの方は書かないけど、舌のモデルはちょっと進展したのでアップしておいたよ。舌のカールと幅の調整を舌先のポイントに仕込んだカスタムアートリビュートで調整できるようにしたのと、まだ未完成だけど両端のポイントのY軸の回転角度を中間のポイントの位置で按分した角度で滑らかにねじれるように式コントローラを入れたよ。

http://zarchives.web.fc2.com/lib/280/282/index.html



take_z_ultima at 11:53|この記事のURLComments(0)TrackBack(0)3ds Max | CG

2009年04月28日

フェイシャルボーンコントロールの試み その2 3ds max 2009

今回は舌のコントロールを考えてみたい。

fig01

舌はフレキシブルに曲がるし伸縮するし、筒状にしたりも出来る。これに対応出来るCATのボーンで一番近いのは尻尾かも知れないけど、CATのwikiにMAXのボーンを使ってフレキシブルで伸縮出来るボーンチェーンの作り方があったのでそれを使ってやってみたい。

まずは作成タブのシェイプパネルのNURBSカーブでCVカーブボタンを押して、ビューポートで4点を順にクリックして最後に右ボタンを押して4ポイントで構成されたCVカーブを作成する。

fig02

次にモディファイタブのモディファイヤリストからスプラインIKコントロールを選択し、ヘルパーを作成ボタンを押して、コントロールオブジェクトを作成する。ヘルパーが大きすぎたらヘルパーサイズの値を調整する。貼るパーは根元から順にリンクされているので、最後から2番目のヘルパーを最後のヘルパーにリンクしなおして、両端のヘルパーを動かした時に隣接するヘルパーが追従するようにする。

fig03

これでヘルパーを動かすと、両端のヘルパーで線の両端の位置が決まって、中の2つのヘルパーで曲線の曲がり具合が調整出来るようになった。

fig04

次に舌をコントロールするボーンのチェーンの数を考えて、その数から1つ減らした数(エンドボーンを含めない数でね)のポイントを作成し、そのポイントをパスコンストレイントで先に作ったカーブに沿って動くようにする。このままだと時間と共にポイントが移動しちゃうので、ポイントの最終フレームに打たれたキーを削除する。これでポイントはパス方向にアニメーションしなくなる。あとは、そのポイントを曲線上の配置したい場所に移動させる。このポイントが舌を動かすボーンをコントロールするものになるので、各間隔はボーンの長さの比率を考えて決めればいい。手順は下のGIFアニメで見てね。

fig05

次に舌を動かすためのボーンのチェーンを作成し、各ボーンの位置コントローラを位置コンストレイントで先に作ったポイントにくっつける。これで曲線を動かすとボーンの基点と長さが追従するようになる。ただ、方向はそのままなので、今度は各ボーンの回転コントローラにルックアットコンストレイントを設定して、各ボーンの向きが曲線に沿うように、ターゲットを隣のポイントにする。これで曲線のヘルパーを操作すればボーンのチェーンを伸び縮みさせたり曲げたり出来るようになった。曲がり具合を決める2つのヘルパーは曲線の端点にあるヘルパーにペアレントしているので、端点のヘルパーを回転させても曲線を曲げる事が出来る。

fig06

これをボーンの形を調整したり、ヘルパーの大きさを変えたりして使いやすく加工したのが下の画像だ。このように自由に動くようになった。

fig07

さらにボーンの左右に子ボーンを追加して舌を筒状に丸めたり出来るようにした。

fig08

舌はこのままだとちょっとコントロールが面倒なので、リアクションマネージャとかを付けるのがいいのかな?それともCATのポーズミキサーで少し補助するか、いずれにしても実験はこれからだ。

とりあえずこの舌のボーンはアップしとくね。ちなみにまだ捻じれないよ(捻じりたい時はルックアットコンストレイントのアップノードコントロールをルックアットにしてね)。

GWなので明日は更新はお休み。次回は木曜日。

それではまた次回。

maxまとめページ



take_z_ultima at 11:30|この記事のURLComments(0)TrackBack(0)3ds Max | CG

2009年04月27日

フェイシャルボーンコントロールの試み 3ds max 2009

早い人ではもうゴールデンウィークに突入しているらしいな。

さてせっかくポーズミキサーもあることだし、顔のパーツをボーンでコントロールしてみようかと思い立った。そこで下の画像のように顔の主なパーツにとりあえずボーンを入れてみた。ボーンは顔半分のボーンを作って残りは新規に頭のボーンに追加したボーンにそのボーンを反転ペーストすることで作成することでボーンに左右の対応を付ける。こうしておけばポーズミキサーで顔半分のパーツのポーズを作れば残り半分は反転したポーズとして貼り付け出来る。

fig01

実際にやってみないことにはどの程度のものが必要かわからないから動かしながら調整するしかないだろうね。皺なんかは以前にやったノーマルマップを使う方法なんかが有効みたいだし、モーフターゲットを作って合成する方法より直接的にコントロール出来るので、お手軽かも。

さて、実際のボーンはCATリグの頭のボーンにAddBoneで追加したボーンを上の画像の位置に並べただけで、まぶたの上下だけはボーンの中心点を眼球の中心点にあわせて位置をロックして回転だけするようにしてある。

fig02

目をコントロールするボーンはこのように4つ作ってみた。ネーミングは内側をIn、外側をOut、上をUp、下をBottomの頭文字を付けてみたけど、Bottomだったら上はTopだったかな・・・。そしてLはLeftのLね。

fig07

各ボーンのウェイトを変形具合を見ながら調整していく。

これがOgreRigHeadEyeLUのウェイト

fig03

これがOgreRigHeadEyeLBのウェイト

fig04

これがOgreRigHeadEyeLOのウェイト

fig05

これがOgreRigHeadEyeLIのウェイト

fig06

このほかに頭自体をフィックスさせるために頭のボーンのウェイトを皮膚の動かない部分に施してある。アゴは別のボーンで動かすので含まれていない。まぶたは閉じた時に皺が伸びるように外側に行くほど頭のボーンの影響が強くなって、内側に行くほどまぶたを動かすボーンの影響が強くなるようにしてある。

fig08

CATリグにアニメーションレイヤーを加えてアニメーションモードにし、まぶたを動かすボーンを回転させてまばたきさせて、引きつりが解消するようにウェイトマップをちょっとずつ修正していく。今回もmodoを使って修正した

fig10MaxScript起動で「weight_transport.ms」を起動して、モディファイアリストからスキンを選択して「SelectSkin」を押してスキンモディファイヤを設定し、SelectFileを押してCドライブに「selverts.tmp.wgt」というファイルを作った。このファイルでmodoにウェイト値を渡し、modoからは「selverts.tmp_modo.wgt」を使ってウェイト値を戻す。Exportボタンを押してウェイト値を書き出してmodo側で同じOgreのファイルを開いてファイルの読み込みから「selverts.tmp.wgt」を読み込むとmodo側のOgreにウェイトマップが読み込まれる。

fig11modo側でWeightPanelを出してInitializeボタンを押してパネルを初期化し、ウエイト値をペイントしていく。ある程度できたら別名で保存で「selverts.tmp_modo.wgt」にウェイトマップを書き出す。次回からは単純に上書き保存して行けば、このファイルにウェイトマップだけ書き出される。次にmax側でImportボタンを押せばウェイト値が修正されて表示される。

これがまぶたを動かしてみたところ。

fig09

ウェイトマップは左右対称モードで塗っておいて、ウエイトマップのリストを右クリックしてコピー&ペーストすることで反対側のウェイトマップに同じマップを写して、必要ない側のウェイトをクリアーすれば左右対称のマップが作れる。スキンモディファイアでウェイトのミラーコピーをする方法もある。

まぶたを閉じるボーンのポーズが出来たらCATメニューからポーズミキサーを出して、CATRigボタンを押してリグを選択してリグを設定してから目を閉じる時に動かしたボーンをすべて選択してからSaveボタンを押して、ポーズファイルを作る。

fig12

この時左目用のボーンのポーズとして設定しておけば、反対側のボーンをRightの値で操作出来るようになる。

fig13

Left側で保存したのでこのポーズを選択してLeftの値を上げていくと左目が閉じていく。

fig15

Right側の値を上げていくと右目が閉じていく。

fig16

まだ目と口の1ポーズしかやってないけど各パーツごとにいろんなポーズを作って保存し、これらのブレンドを調整すれば様々な表情が作れるようになるわけだ。

fig14

表情が出来たら頭のボーンを右クリックしてSavePoseでその表情を記録しておけば、

fig18

いつでもLoadPoseで呼び出して使う事が出来るようになる。

fig17

そしてキー間のトランジションの時に破綻するようなら修正レイヤーを加えて顔のボーンの動きを部分的に修正すれば、キーが増えてもコントロール出来るので、なかなかいいかも。欲しい表情を作るのにどんなボーンとどんなポーズのセットが必要か、これから研究してみたい。

それではまた次回。

maxまとめページ



take_z_ultima at 11:30|この記事のURLComments(0)TrackBack(0)3ds Max | modo

2009年04月24日

遅ればせながらCATやってみた その22 3dsMax 2009

ライブドアのサーバー・・・11時半にアップ予約しといたのに全然公開されてないし・・・。

前回はリグが保存できたり出来なかったりの話を書いたけど、あれに追加して今回GIFアニメで紹介するような事例でも上書きが出来ない事がわかったので、リグの保存をする時は上書き保存に注意だ。

それから、今回やる方法でリグを保存した場合、リグは保存したサイズで固定されて読み込まれてしまい、他のテンプレートで提供されているリグのようにドラッグしながら大きさが変えられない状態になってしまう。おそらく何らかの方法があるんだろうけど、今の所不明だ。ただしCATメニューの中にリグのサイズを変更するツールがあるので、読み込んだ後でサイズを変える事は可能だ。

さて、マッスルやポイントへルパー、いろんなコントローラを付けてせっかく作ったリグは保存しておいてテンプレートで使いたいけど、そのまま保存してもボーン以外は保存されない。

これはリグのグループに他のMAXオブジェクトやマッスルなどが含まれていないからで、追加するには「Add Rigging」か「Extra Parts」を使えばいいようだ。

fig01Add Riggingは各ボーンを選択した時にモディファイアタブのところに表示される「Bone Setup」ロールアウトの中に現れる。

fig02Extra Partsはリグのルートノードを選択した時にモディファイアタブのところに表示される「CATRig Load Save」ロールアウトの中に現れる。

fig03どちらもボタンを押すとこのようなパネルが出て、Addボタンをクリックするとアイテムリスト表示されて、その中から追加したいアイテムを選択してPickNodesボタンをクリックすればこのパネルに追加されたアイテムが表示される。

マッスルはその1部分が選択されれば自動的にそのマッスル全体が追加される。MAXのIKチェーンも選択すれば、それに属したボーンやオブジェクトが自動的に追加されるけど、逆にボーンやオブジェクトを選んでも、それが属するIKチェーンや連なる他のボーンやオブジェクトは自動的に追加されないようだ。

で、Add RiggingとExtra Partsの2つの機能の差は自分が確認したところではボーンにAdd Riggingで登録したアイテムはそのボーンが削除されると一緒に消えるくらいで、他に差があるかはよくわからない。

また、コントローラは「Remember Layer Settings」によってボーンに設定しておけば、リグと共に保存可能だけど、試しにルックアットコンストレイントを設定して登録してみたら、複数のリグを読み込んだ時にルックアットコンストレイントのターゲットが全部同じ1つのものになってしまって、それぞれのリグに割り当てておいたものにはならなかった。その様子は下のGIFアニメで見てね。

fig04

それから、リグに追加登録したアイテムはボーンなどリグのどこかとペアレントさせておけばリグのローカル座標で読み込まれるけど、そうしなかった場合はワールド座標系で読み込まれるので、複数のリグを読み込んだ時にそのアイテムは同じ場所に配置されて重なってしまうのでちょっと面倒だ。何か解決策があるかも知れないけど、いまのところ不明だ。それとリグの上書きがうまく行かない例について下のGIFアニメでやってみたよ。

fig05

それではまた来週。

maxまとめページ



take_z_ultima at 11:30|この記事のURLComments(6)TrackBack(0)3ds Max | CG
Archives