Toon Rig Series: Bonus - Rigging an FFD Deformer

Photo of Sebastian Pfeifer

Instructor Sebastian Pfeifer

Share this video
  • Duration: 14:29
  • Views: 1032
  • Made with Release: 23
  • Works with Release: 23 and greater

In the bonus part of the tutorial series you will learn how to rig an ffd deformer to get the ultimate head squetch control for your character.

Less...

Transcript

ToonRigチュートリアルのボーナスチャプターへようこそ。 このチャプターでは、FFDデフォーマを使った、 頭部をコントローラでストレッチさせるリグのセットアップを解説します。 まずは、FFDデフォーマを作成します。 頭部の中心において、大きさを合わせます。 ただし、余裕をもたせたサイズにしてください。 理由は後で説明します。 X 方向の分割数を3、Y方向の分割数を4、 Z方向の分割数は3にします。 頭部を変形させるわけですが、 普通であればメッシュの階層に入れれば完了です。 実際にやってみましょう。 FFDをスキンオブジェクトの次に配置します。 キャラクターがどんな状態でも変形させるためです。 しかし、目が変形に追従していません。 これは、目のリグが別の階層になっているからです。 別の方法も試してみましょう。 アンドゥでFFDを初期状態に戻して、 階層の外に出します。 新しいヌルを作成して、好きな名前にして メインのリグとメッシュをヌルに入れます。 そして、FFDもこの階層に入れます。 テストしてみると、かなりいいようですが、 問題もあります。 FFDの影響の範囲内と範囲外の差がはっきりしすぎています。 また、キャラクターが顔に触ろうとすると、 望まない変形の状態になってしまいます。 この問題にどう対処したら良いでしょうか? こうした問題に対応するための「制限タグ」があります。 制限タグはその名前の通り、 デフォーマの影響を特定の名前の選択範囲で制限できます。 ポリゴン選択、ポイント選択、頂点マップに対して 制限することができます。 頭部のメッシュに対して、影響を制限する範囲を設定しましょう。 首から頭部にかけてなめらかに変形させるため、 頂点マップを使います。 頭部のメッシュを選択して、 ポリゴンモードに切り替えます。 Ctrl/Command+Aで全てのポリゴンを選択します。 選択メニューから、頂点マップを記録を選びます。 値を0%にして、OKを押します。 頂点マップタグをダブルクリックして、 属性マネージャにペイントマネージャを表示して 半径の値をかなり大きくします。 減衰は、ドームにして、 可視エレメントのみのチェックは外します。 正面や側面のビューで確認しながら ブラシでなぞって 境目がなめらかになるようにペイントします。 これはいつでも戻って調整できます。 終わったら頂点マップタグの名前を 統一した名前に変更します。 ここでは、ffd_defにしました。 defはデフォーム(変形)の略です。 他に、デフォーマで変形させたいオブジェクトに対して、 頂点マップを設定する必要があります。 この場合、歯、舌、眉、髪、ヘアバンドです。 もちろん、目も行います。 頭部と連動するパーツは、頂点マップを100%で割り当て、 タグの名前を先ほどと同じffd_defに変えます。 この作業を舌、眉、髪、アクセサリーに対して行います。 オブジェクトマネージャで、 検索バーを出し、eyeball_meshと入力します。 左目のメッシュを選択して、全体を選択 頂点マップを100%で割り当て、名前をffd_defに変えます。 右目も同じように設定します。 最後に検索バーに「_spec」と入力して、 同じように頂点マップを割り当て、名前を変えます。 制限タグを割り当て頂点マップは、 名前が同じであれば、すべて影響されるので、 同じ名前の一つを最初の欄にドラッグすれば、 FFDは、同じ名前のすべての頂点マップに制限されます。 FFDを動かせば頭部だけが影響を受けるようになります。 うまく変形出来ているか確認して、 必要に応じて頂点マップを調整します。 それでは別の問題をテストしてみましょう。 head_mid_CONを動かして、頭部のメッシュが FFDのケージを超えるまで動かします。 この問題が発生するため、 FFDの空間に余裕をもたせることを最初に言いました。 ですので、FFDを初期状態に戻して、 FFDのグリッドサイズを調整します。 それではコントローラを設定します。 キャラクターメニューからジョイントを選び、 ジョイントを作成します。 名前をface_ffd_mainに変えます。 ジョイントの位置をだいたいFFDの中心にします。 このジョイントをCtrl+ドラッグで複製して、 名前をface_ffd_topに変えます。 位置を、FFDの上より少し下にします。 そのほうがアクセスしやすくなります。 また、複製して、名前をL_face_ffdにして、 FFDの左横に合わせます。 複製して、名前をR_face_ffdに変えて、 P.Xの座標をマイナス値にして、反対側に移動させます。 topを複製して、名前をface_ffd_chinにして、 顔の前面の下に置きます。 また、複製して、face_ffd_front/backを作成して、 前面と背面に配置します。 コントローラを作成するため、 スプラインメニューから多角形を選びます。 それをface_ffd_topの子にして、 PSRをリセットを実行します。 使いやすいサイズに変更して、 複製して、90度回転させ、 もう一度複製して別の角度に90度回転させます。 これで球状のコントローラになり、 選択しやすくなります。 3つのスプラインを選択して、 右クリックで一体化+消去を実行します。 好みに応じて、アイコンを変更します。 私の好みのIDは、17106になります。 アイコンカラーを表示カラーにして、 表示カラーを明るい緑にします。 ジョイントの名前をコピーして、コントローラにペースト 「_CON+」を後ろに追加します。 スプラインのコントローラは、 補間法をなしにして、 リグの速度が落ちるような設定は 極力オフにします。 出来たら階層の外に出して、 複製して、L_face_ffdの子にして、 PSRをリセットを実行して、 コントローラの名前をコピーして_CON+を付けます R_face_ffdとface_ffd_chinに対しても 同様の作業を行います。 他のジョイントはもう少しコントローラが必要です。 適切な階層に並べます。 新しいヌルオブジェクトを作成して、 名前をface_ffd_controlsにします。 選択して、右クリックでコンストレイントタグを追加します。 PSRをチェックして、FFDを非表示にしてから ターゲットにHead_CON+を選択します。 スケールにチェックを入れることを忘れないでください。 これで頭部のジョイントに合わせて 動くようになります。 作成したジョイントとコントローラを選択して、 ヌルにドラッグ&ドロップします。 top、chin、L_、R_を 各コントローラの子にします。 L_とR_については、追加のヌルを親にすることで、 回転させても自由に移動できるようになります。 L_コントローラを選択して、 Alt+Gを押してグループ化します。 新規ヌルができるので、 名前の後ろに_parentと付けます。 R_も同じように設定します。 LとRのヌルを選択して、 アイコンと表示カラーを変えます。 face_ffd_controlsも同様に アイコンを変更します。 FFDのポイントをジョイントにバインドします。 全てのジョイントとFFDを選択します。 キャラクターメニューから、バインドを選びます。 ウェイトタグができましたが、 自動ウェイトは効かないので、ウェイトマネージャを開きます。 キャラクターメニューから、 ウェイトマネージャを選びます。 レイアウトに埋め込みます。 マネージャのジョイントタブで、face_ffd_mainを選択して、 全てのポイントをウェイトを100%の絶対値でペイントします。 face_ffd_topジョイントを選択して、 FFD上部2段のポイントを100%でペイントします。 face_ffd_chinジョイントを選択して、 正面一番下の3つのポイントを100%でペイントします。 L_face_ffdは、サイドの中心のポイントをペイントをします。 R_face_ffdは、反対側をペイントします。 L_とR_ジョイントの両方を選択して、 中心のポイントをペイントします。 こうすることでウェイトは 左右均等に割り当てられます。 frontとbackは、それぞれ残ったポイントに ウェイトを割り当てます。 ここでコントローラを動かしてみると、 全て動作します。 ただ私は、右側のコントローラを作ったときに PSRをリセットを忘れていましたが、簡単に修正できます。 ジョイントを一旦階層から外して、 コントローラのP.Xの値をマイナスにして 正しい位置にしてから、ジョイントを戻します。 頭部を伸縮変形させたときに 頭部のボリュームを保つようにするためには、 XPressoを使う必要があります。 でも安心してください。とてもシンプルです。 その前に少し整理をしておきましょう。 必ず各コントローラのトランスフォームの固定をして 初期のPSRの値をゼロにします。 実行するには、コントローラを選択して、 属性マネージャで座標タブにある トランスフォームを固定の全て固定をクリックします。 わかりやすいように、適切なレイヤーに割り当てます。 すべてのコントローラを選択して、右クリックで レイヤーにあるControllersレイヤーを割り当てます。 全てのヌルを選択して、RigElementsレイヤーの子の nulls_and_solversレイヤーを割り当てます。 そして、すべてのジョイントを選択して、 BindJointsレイヤーを割り当てます。 ところで、frontとbackジョイントの トランスフォームの固定を忘れていたので実行します。 ここからXPressoのパートです。 face_ffd_controlsを選択して、右クリックをして プログラミングタグからXPressoを選びます。 XPressoウインドウが開くので、 face_ffd_top_CON+をドラッグ&ドロップします。 XPressoのノードは、青が入力で赤が出力です。 このノードの値を読み込みしたいので、 右上の赤い部分をクリックします。 座標→位置→位置.Yを選択します。 この出力で影響させたいアイテムをドラッグします。 L_とR_face_ffd_parent、frontとbackのジョイントを ドラッグします。 L_とR_のヌルの入力に位置.Xをそれぞれ追加します。 そのまま出力と入力をつなげると、 動きますが思った状態にはなりません。 これを直すには、XPressoのキャンバスの空いているところで、 右クリックして、新規ノード→Xpresso→計算→マップ変換を選びます。 Ctrl+ドラッグで複製して、一方はデフォルト値のままで もう一方の「出力の上限」を「-1」にします。 face_ffd_CON+の出力を両方のマップ変換の入力に接続して、 それぞれの出力をL_とR_face_ffd_parentにつなげます。 実際動かしてみて、動きが正しくなければ 入力先を入れ替えてください。 frontとbackでは、位置.Zにつなげて、 Z軸方向に動くように設定します。 マップ変換ノードを複製して、 frontとbackに接続します。 今回も方向が間違っていたので入れ替えます。 Xpressoによってメッシュのボリュームが 保たれるようになりました。 FFDが正しく動作しているか確認してみましょう。 うまくいっているようですが、 頭部のコントローラを動かすと移動量の2倍移動しています。 これは正しくありません。 これも簡単に修正できます。 どうしてこうなるのかと言うと、 頭部のコントローラを動かすと FFDのポイントが追従して動いていて、 FFDオブジェクトそのものが動いているわけではありません。 そのため、FFDそのものも追従させる必要があります。 FFDオブジェクトを選択して右クリックで、 リギングタグからコンストレイントを選びます。 PSRをチェックしますが、FFDの位置は Head_CON+コントローラと軸の位置が同じではないので、 オフセットさせる必要があります。 これを行うために、 一時的にスキンオブジェクトをオフにします。 スケールもオンにして、 ターゲットにHead_CON+を割り当てます。 オフセットのP.Yの値を入力して、 元の位置を同じくらいになるように調整します。 それほど正確である必要はありません。 大体で結構です。 FFDのウェイトタグを選び、 現在の状態をバインドポーズとして設定をクリックします。 そして、スキンオブジェクトを有効にして FFDを非表示にすれば完了です。 後は、両方のコンストレイントタグの X優先順位の値を1にします。 これでアニメーションしたときに 1フレームずれることがなくなります。 さらに顔のFFDの階層オブジェクトを メインの階層に入れます。 これで本当に完成しました。 皆さん、理解できたでしょうか? もし、わからないことがあれば、ご連絡ください。 メールやTwitterなどでお問い合わせください。 できるだけ回答させていただきます。 リグを楽しんでください。 さようなら!
Resume Auto-Scroll?