チュートリアル / 人体構造を意識したキャラクターセットアップ方法 ~ゼロから始めるMayaリギングの基本~
第2回:人体セットアップシンプル編/バインドスキン
- Maya
- アニメ
- インテグラル・ヴィジョン・グラフィックス
- キャラクター・リグ
- ゲーム
- コラム
- チュートリアル
- 学生・初心者
- 映画・TV
00.ごあいさつ
01.バインドスキン
01-1.インフルエンスとウェイト
01-2.バインドスキンオプション
02.HumanIKの設定
03.スキニング
03-1.Paint Skin Weights Tool(スキン ウェイト ペイント ツール)
03-2.Weight Hammer(ウェイト ハンマー)
03-3.Mirror Skin Weights(スキン ウェイトのミラー)
04.Tips紹介
04-1.ホットキー登録
05.おわりに
00.ごあいさつ
皆様こんにちは。
インテグラル・ヴィジョン・グラフィックスのリードリガーの古屋です。
引き続きシンプルなキャラクターセットアップについて解説していきます。
前回はキャラクターに骨入れを行いました。今回はスキニングとHumanIKを使用したコントローラ設定まで解説していきます!
01.バインドスキン
第一回で配置した骨でメッシュを動かせるようにします。
こちらはMayaの ”Bind Skin” という処理で実現します。
まずはこの処理について少し説明します。
01-1.インフルエンスとウェイト
骨とメッシュを選択してバインドを実行すると、骨がメッシュの「インフルエンス」として登録されます。
インフルエンスは文字通り ”メッシュに影響を与えるオブジェクト” である事を意味しており、インフルエンスを動かすとメッシュが追従する状態になります。
さらに、バインドされたメッシュの、各頂点に割り振られているウェイト値の大きさによって、インフルエンスの影響の度合いを制御できます。
ウェイト値が1.0であればインフルエンスと全く同じ動きをするようになり、0.0であれば全く反応しません。
※インフルエンスによってメッシュを変形させることを「デフォーム(=変形)する」と表現します。
これから行うバインドからウェイト調整までの作業は、人体の動きを再現するために必要な作業になります。
人体構造を模したジョイント群をメッシュのインフルエンスとして登録し、さらにそれぞれのウェイト値を調整して行きます。
01-2.バインドスキンオプション
実際にバインドを行う前にバインドスキンオプションについて説明します。
まずはデフォルト設定を確認してみましょう。
メッシュと前回作成したHips骨を両方選択し、
Rigging(リギング)メニューの左上のタブ Skin(スキン) > Bind Skin(スキンのバインド)でバインド処理を行ってみましょう。
メッシュと骨をバインドする事で、骨によってメッシュをデフォームする事が出来るようになりました。
ただし、それぞれのジョイントを動かしてポーズを付けてみると、足の辺りの形状が破綻してしまっているようです。
今回はデフォルト設定だとうまくいかないようなので、設定を変えて破綻を軽減させましょう。
バインドを実行し直すため、バインド実行前の状態に戻します。
Skin(スキン) > Go to Bind Pose(バインド ポーズに移動)を実行してください。
これで元のポーズに戻ったかと思います。
こちらは bindPoseノード を参照して、バインド実行時のポーズを再現してくれる機能になります。
bindPoseノードはバインド実行時に自動で作成されており、その時のインフルエンスの配置情報が保存されています。
次にSkin(スキン) > Unbind Skin(スキンのバインド解除)を実行してバインドを解除します。
デフォルト設定であれば問題ないですが、念のため、実行前に四角いアイコンからオプションメニューを開いて、Delete history(ヒストリの削除)が選択されていることを確認してください。
Delete history(ヒストリの削除)が選択されていないとバインドに関するノードが削除されずに残ってしまいます。
これで元のバインド実行前の状態に戻せたかと思います。
次に形状の破綻を軽減するためにオプションを編集します。
以下のオプションでバインドを実行してみます。
デフォルトで崩れてしまっていた部分が改善されている事が確認出来るかと思います。
設定したオプションについて解説します。
■Bind to (バインド先): Joint hierarchy(ジョイント階層)
バインド時にインフルエンスに含めるオブジェクトの検出方法を選択できます。
Joint hierarchy にすると選択したジョイントと階層関係にあるジョイントが、全てインフルエンスとして設定されます。
選択したジョイントのみでバインドしたい場合は Selected Joint(選択したジョイント)、
ジョイント以外の階層関係にあるオブジェクトもインフルエンスに含めたい場合は Object hierarchy(オブジェクト階層)の設定がそれぞれ有効です。
■Bind method(バインド方法) : Heat Map(ヒートマップ)
バインド時のウェイトの初期配分方法を選択します。
計算手法がいくつかありますが、今回は Heat Map を採用しました。
公式サイトの言葉を借りると「熱放散テクニック」を使用してバインドを行います。
ボーンを熱源として、そこからウェイトが減衰していくイメージがわかりやすいかと思います。
デフォルト設定の Closest distance(最短距離)がジョイント同士をつなぐボーンの中心点からウェイトが広がっていくのに対して、Heat Map ではボーン全体を中心としてウェイトが減衰するので、人体の骨に肉がついてくる印象を再現しやすいです。
Heat Mapの場合、末端のEnd骨などボーンを持たないものにはウェイトが振られません。
末端の骨にウェイトを含ませたい場合は Closest distance(最短距離)にすると後々インフルエンスを追加せずに済みます。
■Skinning method(スキニング方法) : Classic linear(クラシック リニア)
デフォーム時の頂点位置の補間方法を選択します。
Mayaでは2種類の補間方法があり、同じウェイト配分でもデフォーム結果が変わります。
・Classic Linear:シンプルな補間形式で、Maya 以外のソフトとも互換性があります。
・Dual Quaternion:Classic Linearよりも、骨を曲げたり捻じったりしたときのメッシュのやせが緩和されます。ただし、骨をスケーリングすると破綻しやすい・他のソフトと互換性がないなどの制限があります。
少ないジョイント構成でスキニングする場合、Dual Quaternion の方がメッシュのボリュームを維持した結果を得ることができますが、
今回はリアル編での発展を考慮し、Classic Linear を選択しています。
■Allow multiple bind poses(複数のバインド ポーズを許可) : チェック無し
Bind Pose が複数ある状態を許可するか選択できます。
Bind Pose が複数あると Go to Bind Pose(バインド ポーズに移動)が実行できないなどの問題が起きてしまいますので、チェックを外すことをお勧めします。
■Max influences (最大インフルエンス数): 4
バインド実行時に一つの頂点が持てるインフルエンスの最大数を設定できます。
例えば 5 に設定すると、一つの頂点が 5 つのインフルエンスからの影響を受けられるようになります。
デフォルト設定は 5 ですが、シンプル編では 4 で十分です。
インフルエンス数が増えるとデータが重くなったり、ウェイトの管理がしづらくなるので、むやみに数を増やさない事をお勧めします。
■Maintain max influences (最大インフルエンス数の保持): チェックあり
上記で設定したインフルエンスの最大数を保持するか選択できます。
こちらのチェックを入れておかないと、せっかく設定した最大インフルエンス数が保持されなくなってしまいますので、チェックを入れておくことをお勧めします。
■Remove unused influences (使われていないインフルエンスの除去): チェック無し
チェック有りの状態ですと、バインド時に Maya 側の計算結果でウェイトが振られなかったオブジェクトが、自動的にインフルエンスから外されてしまいます。
チェックを外して手動でインフルエンスを管理する事をお勧めします。
■Heatmap falloff(ヒートマップ減衰) : 0.68
バインド時に Heat Map の計算方法によるウェイトの減衰幅を調整できます。
0に近づけると、それぞれのインフルエンスのウェイトの減衰幅が広くなり、1.0に近づけると狭くなります。
■Normalize weights(ウェイトを正規化) : Interactive(インタラクティブ)
ウェイトの正規化方法を設定できます。
Interactive(インタラクティブ)に設定すると、一つの頂点のウェイトの合計値が常に1.0になるように自動で各インフルエンスのウェイト値が正規化されます。
Post(ポスト)の場合、ウェイトの合計値が 0.0~1.0 以上の値で設定可能になり、
合計値に対するそれぞれのインフルエンスのウェイトの比率を計算してメッシュをデフォームします。
None(なし)に設定すると正規化が行われません。
インフルエンス同士のウェイトのやり取りが感覚的につかみやすいため、今回は Interactive(インタラクティブ)に設定しています。
以上、オプション項目について紹介しましたが、これらの設定は常に最適なものではありません。
最適な設定は状況によって変わるので、作業するモデルに合う設定を探ってみてください。
公式ドキュメントでもバインド設定について紹介されていますので、一度目を通しておくと良いでしょう。
<参考>
https://help.autodesk.com/view/MAYACRE/JPN/?guid=GUID-CF2C698A-44BB-4CA0-BCB9-DB36500DA812
02.HumanIKの設定
スキニング作業に入る前にHumanIKの設定を行ってしまいましょう。
実際にアニメータさんが動かすコントローラを触ってポーズを付けてみると、モーション作業中に発生するデフォーム形状の破綻を発見しやすいです。
前回HumanIKの仕様に沿ってジョイントの配置と命名を行ったので、HumanIKのコントローラを適用できます。以下の動画を基に設定してみてください。
03.スキニング
コントローラ設定が終わったらメッシュのウェイトを調整して、デフォーム形状を整えましょう。
使用する機能について簡単に紹介します。
03-1.Paint Skin Weights Tool(スキン ウェイト ペイント ツール)
主にウェイトの調整は Paint Skin Weights Tool(スキン ウェイト ペイント ツール)という機能で行います。基本的な使い方については動画で解説を行いました。
03-2.Weight Hammer(ウェイト ハンマー)
ウェイト値のばらつきやムラを修正する機能です。
調整したい頂点を選択して Skin(スキン) > Hammer Skin Weights(スキン ウェイト ハンマー)を実行する事で、周辺の頂点に合わせてウェイトを調整できます。
03-3.Mirror Skin Weights(スキン ウェイトのミラー)
メッシュを選択して Skin(スキン) > Mirror Skin Weights(スキン ウェイトのミラー)を実行する事でウェイトをミラーリングできます。
前回ではジョイントにラベル設定を行いましたので、以下のオプションをお勧めします。
それぞれのオプションについて解説します。
■Mirror across(ミラー平面): YZ
ミラー平面を設定します。YZに設定すると、グローバルY軸とZ軸を基準として定義された平面でウェイトがミラーされます。
■Direction/Positive to negative(方向/正負反転): チェック有り
ミラーを実行する方向を選択します。
チェック有りにすると、ミラー平面に対して垂直方向なグローバル軸の+側から-側へウェイトのミラーリングを行います。モデルの正面が+Z軸を向いている場合、左半身から右半身へミラーされます。
■Surface Association(サーフェスの関連付け): Closest point on surface(サーフェス上の最近接ポイント)
ミラー実行時、ソース側とターゲット側のウェイト値を関連付けする方法を選択します。
今回設定した Closest point on surface(サーフェス上の最近接ポイント)は、
ミラー平面を基準にソース側とターゲット側を比較した際に、最も近いサーフェス上のウェイトを検出してミラーを実行します。
頂点単位ではなくサーフェス上でウェイト値を参照するので、完全に対称なモデルではない場合でも、ある程度は汎用的にミラーの実行が可能です。
■Influence Association(インフルエンスの関連付け) : Label(ラベル)
ミラー実行時、ソース側とターゲット側のインフルエンスを関連付けする方法を選択します。
Label(ラベル)を選択した場合、ジョイントのラベル設定を参照してウェイトをミラーするインフルエンスを決定します。
Type(タイプ)が同じもので、Side(サイド)が L(左側)と R(右側)のものをミラーします。
Type(タイプ)が Other(その他)に設定されていると Other Type(その他のタイプ)が同じものでミラーを実行します。
■Normalize (正規化): チェック有り
ミラー実行時にウェイトの正規化を行うか選択できます。
有効にするとウェイト値の合計が1.0になるように正規化されます。
04.Tips紹介
04-1.ホットキー登録
ウェイトペイントでウェイトを調整する際、足すブラシと削るブラシをショートカットキーで切り替えられるようにすることで、ブラシの設定作業を省略することが出来ます。
ホットキーの登録手順は以下の動画で説明しています。
登録が完了しましたら、ウェイト作業を行いたいメッシュを選択し、Paint Skin Weights Tool(スキン ウェイト ペイント ツール)のオプションを開きます。
この状態で Alt+6、Alt+7 を入力するとブラシの設定が切り替わります。
今回登録した内容は以下になります。
Name(名前):SkinPaintAddMode
Description(説明):SkinPaint Add Mode
Language(言語):MEL
Hotkey(ホットキー):Alt + 6
artAttrPaintOperation artAttrSkinPaintCtx Add;//ペイント操作
artUpdateStampProfile gaussian artAttrSkinPaintCtx;//プロファイル
artSkinSetSelectionValue 0.05 false artAttrSkinPaintCtx artAttrSkin;//値
Name(名前):SkinPaintScaleMode
Description(説明):SkinPaint Scale Mode
Language(言語):MEL
Hotkey(ホットキー):Alt + 7
artAttrPaintOperation artAttrSkinPaintCtx Scale;//ペイント操作
artUpdateStampProfile solid artAttrSkinPaintCtx;//プロファイル
artSkinSetSelectionValue 0 false artAttrSkinPaintCtx artAttrSkin;//値
05.おわりに
今回は、バインドスキンとHumanIKコントローラの設定方法など、スキニング作業に必要な基本的な機能を紹介しました!
次回は綺麗なデフォームを実現するために、各部位をスキニングする上でのポイントを紹介する予定です。
それでは、次回もよろしくお願いいたします!