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

Bifrostリグの構成要素

Bifrostリグはピン、コントロール、ジョイント(、オペレーター)で構成されます。
| 要素 | 説明 |
|---|---|
| ピン | リグのレスト状態を規定します。コントロールやジョイントのトランスフォームの基準になります。 |
| コントロール | ユーザーが操作するためのカーブです。 |
| オペレーター | cycle freeモードではコントロールを直接操作せず、オペレーターを介してアトリビュートを作成したり操作したりします。 |
この記事ではcycle freeモードではなく、nativeモードで作成します。
※ モードは後から変更可能です。
作成ワークフロー
bifrostRigの作成
template_module と root_module を作成し、画像のように接続します。template_module は「Make Editable」しておきます。

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

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

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

コントロールの作成
Bifrostグラフに戻り、template_module > user_setup に入ります。

SetupInputs の pins に find_pin をつなぐとピンの情報を、parents に find_parent をつなぐと親の情報を取得できます。
- Find には検索する文字列を入れます(ワイルドカード * 使用可能)。
find_parentは Kind を Control にすれば親のControlを取得できます。- ここでは
find_pinに各ピンの名前を入力して取得し、find_parentは Find に * を入れて取得しています。

作成したいコントロールの数(用意したピンの数)だけ define_control を作成し、以下のように接続します。
find_pin.pivot_matrix →define_control.pivot_matrixfind_parent.parent_definition →define_control.parent_controldefine_control.control_definition →set_definitions.control_definitions
※ parent_control には親にしたいコントロールの出力をつなぎます。ここではFKのコントロールを作成したいので、rootから順に前のコントロールを parent_control に接続しています。

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

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

bifrostRig ノードの Auto Update がONになっている場合、コントロールを動かしても元の状態に戻ります。
ジョイントの作成
ジョイントもコントロールと同じ要領で作成します。ただし、jointの出力は set_definitions の control_definitions につなぎます。
Pin、コントロール、ジョイントは必ずしも同数である必要はありません。ここでは簡単のためすべて同じ位置に同じ数を作成しています。
また、ここではFKのジョイントを作成したいので、rootから順に前のジョイントを parent_joint に接続しています。

コントロールやジョイントは iterate コンパウンドを利用して大量かつ簡単に数を変更可能な構成にしたり、中間コントロール(ジョイント)の位置をノードで計算してプロシージャルに配置したりすることも可能です。
これで必要な部品がそろいました。
ジョイントをコントロールに追従させる
template_module > user_animation に入ります。

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

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

※ 単にコントロールの位置をそのまま適用するだけでなく、複数のコントロールのトランスフォームを補間したり、自由に計算した結果のMatrixをジョイントに適用したりすることもできます。
リグの完成と使用
bifrostRig の Auto Update をOFFにし、bifrostRig のジョイントにオブジェクトをバインドすれば、従来のリグと同じようにコントロールを動かしてモデルを操作できます。
Auto Updateはセットアップ作業中にのみONにしてください。バインド後にONにすると、バインドが外れたりアニメーションがリセットされたりするので注意が必要です。
まとめ
Bifrostリグは「ピンで基準位置を定義 → コントロールとジョイントを配置 → user_animationでジョイントをコントロールに追従させる」という流れで構築できます。従来のMayaリグとは異なりノードベースで組み立てるため、プロシージャルな配置や動的な数の変更にも柔軟に対応できるのが特徴です。
まずはこのシンプルなFKリグをベースに、IKやスペース切り替えなどの機能を追加してみてください。



コメント