Maya Bifrostでシンプルなリグをつくる

Tech

はじめに

この記事では、Bifrostのリギングモジュールフレームワークを使い、シンプルなFKリグをセットアップする手順を解説します。

Bifrostリグの完成イメージ - コントロールとジョイントが配置された状態

Bifrostリグの構成要素

Bifrostリグの構成要素の概念図

Bifrostリグはピンコントロールジョイント(、オペレーター)で構成されます。

要素説明
ピンリグのレスト状態を規定します。コントロールやジョイントのトランスフォームの基準になります。
コントロールユーザーが操作するためのカーブです。
オペレーターcycle freeモードではコントロールを直接操作せず、オペレーターを介してアトリビュートを作成したり操作したりします。

この記事ではcycle freeモードではなく、nativeモードで作成します。
※ モードは後から変更可能です。

作成ワークフロー

bifrostRigの作成

template_moduleroot_module を作成し、画像のように接続します。template_module は「Make Editable」しておきます。

template_moduleとroot_moduleを接続したBifrostグラフ

template_modulePins を任意の数だけ作成します。

Pivot Matrixはピンのトランスフォームを表します。デフォルトが単位行列ではなく零行列である点に注意してください。
また、Pinsを編集する際は、先ほど接続したinputを一時的に外す必要があります。設定が終わったらつなぎ直してください。
Pinは後からビューポート上でも移動できます。

template_moduleのPinsを作成する設定画面

root_moduleControl NameJoint Name を設定しておきます。この2つが同じだと後でエラーメッセージが表示されます。

root_moduleのControl NameとJoint Nameを設定する画面

MayaメインメニューのRiggingメニューセットから、Bifrost Rigging > Create Rig From Modules □ を開きます。synced Container にチェックを入れ、Setup Methodnative にしてApplyすると、bifrostRig が作成されます。ビューポートにはrootコントロールのみ表示されます。

Create Rig From Modulesの設定とbifrostRig作成後のビューポート

コントロールの作成

Bifrostグラフに戻り、template_module > user_setup に入ります。

template_moduleのuser_setupに入るナビゲーション

SetupInputspinsfind_pin をつなぐとピンの情報を、parentsfind_parent をつなぐと親の情報を取得できます。

  • Find には検索する文字列を入れます(ワイルドカード * 使用可能)。
  • find_parentKind を Control にすれば親のControlを取得できます。
  • ここでは find_pin に各ピンの名前を入力して取得し、find_parent は Find に * を入れて取得しています。
find_pinとfind_parentノードの接続設定

作成したいコントロールの数(用意したピンの数)だけ define_control を作成し、以下のように接続します。

  • find_pin.pivot_matrix → define_control.pivot_matrix
  • find_parent.parent_definition → define_control.parent_control
  • define_control.control_definition → set_definitions.control_definitions

parent_control には親にしたいコントロールの出力をつなぎます。ここではFKのコントロールを作成したいので、rootから順に前のコントロールを parent_control に接続しています。

define_controlノードの接続パターン

define_control の名前、タグ、形状、色をそれぞれ設定します。下の画像では名前を arm_control01、形状を circle、色を赤、上向き(rotation=[90, 0, 0])、スケール10に設定しています。

define_controlの名前・形状・色・スケールの設定画面

ビューポートを確認すると、Pinの位置にコントロールが反映されています。

ビューポートにコントロールが表示された状態

bifrostRig ノードの Auto Update がONになっている場合、コントロールを動かしても元の状態に戻ります。


ジョイントの作成

ジョイントもコントロールと同じ要領で作成します。ただし、jointの出力は set_definitionscontrol_definitions につなぎます。

Pin、コントロール、ジョイントは必ずしも同数である必要はありません。ここでは簡単のためすべて同じ位置に同じ数を作成しています。
また、ここではFKのジョイントを作成したいので、rootから順に前のジョイントを parent_joint に接続しています。

define_jointノードの接続とジョイント作成のグラフ

コントロールやジョイントは iterate コンパウンドを利用して大量かつ簡単に数を変更可能な構成にしたり、中間コントロール(ジョイント)の位置をノードで計算してプロシージャルに配置したりすることも可能です。

これで必要な部品がそろいました。


ジョイントをコントロールに追従させる

template_module > user_animation に入ります。

template_moduleのuser_animationに入るナビゲーション

AnimationInputsoutputfind_transform をつなぐと、コントロールのトランスフォーム情報を取得できます。

  • Find にはコントロールの名前を入力します(Search Method を By Tags にしてタグで検索することも可能です)。
  • 代わりに find_all_transform を使うと、任意のタグや名前のコントロールのトランスフォーム情報をまとめて配列で取得できます。
find_transformでコントロールのトランスフォーム情報を取得するグラフ

find_transform の transform 出力を access_transform_matrices に接続すると各種 Matrix が取得できます。これを build_array でまとめ、Set Joints update “From World”update_matrix につなぐことで、ジョイントがコントロールに追従するようになります。

access_transform_matricesからSet Jointsへの接続でジョイントを追従させるグラフ

※ 単にコントロールの位置をそのまま適用するだけでなく、複数のコントロールのトランスフォームを補間したり、自由に計算した結果のMatrixをジョイントに適用したりすることもできます。


リグの完成と使用

bifrostRigAuto Update をOFFにし、bifrostRig のジョイントにオブジェクトをバインドすれば、従来のリグと同じようにコントロールを動かしてモデルを操作できます。

Auto Updateはセットアップ作業中にのみONにしてください。バインド後にONにすると、バインドが外れたりアニメーションがリセットされたりするので注意が必要です。

まとめ

Bifrostリグは「ピンで基準位置を定義 → コントロールとジョイントを配置 → user_animationでジョイントをコントロールに追従させる」という流れで構築できます。従来のMayaリグとは異なりノードベースで組み立てるため、プロシージャルな配置や動的な数の変更にも柔軟に対応できるのが特徴です。

まずはこのシンプルなFKリグをベースに、IKやスペース切り替えなどの機能を追加してみてください。

コメント

タイトルとURLをコピーしました