2019年7月12日金曜日

BlenderでのRigifyのリグを作成してUnityへインポートする手順

今までFKで作成したモーションがほとんどだったものの人型でRigifyを利用することになったのでメモ
基本的にはdaskjalさんののところの記事と同じなのだけれど幾つか相違点があったので記事とします
執筆時点でBlender2.8のリリース直前ですが 2.79で記事を書きます
一通り試した範囲では2.8では標準でRigifyが有効になっている以外は2.79と同じ操作になるようです。

0.インストール

まずrigifyアドオンを有効にしてPythonスクリプトの自動実行をオンにします
アドオンの検索にrigと入力すると一覧から絞り込まれて見つけやすいかと思います。

自動実行はrigifyに必要なGUIを作成するためのもののようです。
(因みに2.79のrigifyは rigify用以外のアーマーチュアがある時にうまく動かないことがあるようです)

1.メタリグの作成

メタリグの追加

Rigifyは一度メタリグというものを使ってボーンの配置等を設定します
2.79以降は一旦rigを作成した後にもメタリグを編集することで関節位置を微調整したりできます。

位置の調整

metarigという名前のアーマーチュアが作成されるので編集モードでボーンの位置を関節を移動させます。
2.79以降のmetarigでは表情のボーンも作成されますが、ここでは深く考えず頭の位置に合わせておきます。

ボーンのオブジェクトの表示設定を描画タイプをワイヤーフレームにしてレントゲンのチェックを入れて
アーマーチュアオプションのX軸ミラーをオンにすると
形状内に合っても透過表示されますし 位置合わせもしやすいでしょう。
基本的には移動だけですが 一か所だけ首のボーンの数が多いので消去します

中間の接続部分を選択して融解(削除のXキーのプルダウンから選択 または Ctrl+X)をします

2.リグの設定

メタリグから実際に操作するのリグを作成するための設定をします。
メタリグを選択した上で Rigify BottonsのGenerateRig を押すとリグが作成されますが
リグ生成の調整をしない状態だと こういったリグが生成されUnity等で利用できないボーンも生成されます。

例えば腕のボーンをデフォルトで作成すると

肩関節とひねり用のボーンが別に作成されたり、掌の動きを制御するためのボーンが生成されますがUnityのHumanoidとは互換性がないのでそちらの調整になります。

リグ生成の設定の話しに戻ります。
設定はメタリグのポーズモードで各ボーンを選択することで行います

腕 脚の分割数の設定

まずは上腕のボーンを選択してボーンタブにあるRigfyTypeという項目のlimb segmentsの数値を1に変更します

これで腕のボーンの中間にボーンが生成されることがなくなります
同様に大腿部分のボーンのlimb segmentsの数値を1にします この設定が必要なのは左右の上腕 大腿の4カ所です。

胸、顔 腰 掌 の設定の消去

Humanoidでは利用できない部分の設定を消去して空白状態にします
設定を消去するのは腰、胸、顔の表情の制御 掌を動かす設定です

各ボーンを選択して RigTypeとなっている項目の×を押して設定項目を消すことでRigifyでは利用されなくなります

掌は人差し指の根本部分 顔は頭部にあるボーンの小さいものに Rigifyの生成設定がされています

Humanoid互換のために設定を変更したメタリグのボーンはこれだけになります。

3.リグの作成

リグは先にも触れた通りメタリグを選択した上で Rigify BottonsのGenerate Rig を押すと生成されます

Blender内だけでリグを使用するには問題ないのですが Humanoidとしてスムーズに読み込ませるためにもう少し変更を加える必要があります。

4.ボーンの親子関係の調整

Rigifyで通常表示されているボーンはすべて「ボーンを制御するためのボーン」
メッシュの変形を制御しているのは29番レイヤにある DEF で始まる名前のボーンになります。

他に31番にはORGで始まる名前の メタリグと同じ構造をしたボーンが入っています

DEF で始まる名前のボーンが変形を制御していると書きましたが
Unityにインポートした時にHumanoid自動的に対応付けがされるのもDEFのボーンです
Unityはボーンの親子関係を元に構造を辿るもののRigifyはDEFでないボーンを親にする構造になってる部分があり、そちらを設定しなおす必要があります。

例えば鎖骨部分のDEF-shoulderの親は DEFのボーンではなく ORG-shoulderというボーンになってしまっています

変更が必要なボーンは 鎖骨 上腕 指の付け根 大腿 の部分になります。

それぞれ 子にしたい部分のボーンを選択した後 親にしたいボーンを選択して ペアレントを作成(Ctrl+A)の「オフセットを保持」で親子関係を設定します
元々親子関係を設定されていORGのボーンも3Dの座標は同じ位置にあるので 関係の点線のつながっている位置にあるDEFのボーンを親に設定しなおすことになります。

5.関節位置の再調整

リグの作成後に動きをつけてみて 関節位置等を変更したくなることが度々あります
Blender2.79以降のRigifyはそういった操作を行いやすくなっています。
(再設定の難しさは自分が2.78までのRigifyを使用してこなかった理由の一つでした)
メタリグのボーン配置を崩して試してみます
メタリグのGenerateRigボタンの下にある 詳細オプションのボタンを押して
overwriteのタブを選択状態にします

ここでGenerateRigのボタンを押すことで変更したメタリグの配置でリグが上書き生成されます
メッシュとのバインドは維持されるのでスキニングをやり直す必要はありません
画像は上書き操作を押した直後にリグを操作したものですが
ボーンを滅茶苦茶な位置にしたので崩れていますがスキニングは維持されています。

因みに Humanoid互換で出力する場合は リグの再生成後に 4.の親子関係の調整を再度やりなおす必要があります。

6.Unityへの出力

細かい操作に関してはここでは取り上げませんがUnityに持っていく場合の操作を少しだけ

ウエイトの割り当て数を制限

自動ウエイト等でウエイトを設定した場合に 頂点に割り振られているウエイトを見ると 小さな値のウエイトがいくつも割り振られていることがあります
Unityトでは1頂点あたりウエイト4つまでとのことで調整が必要です(ボーンインフルエンス数)
ここで「合計を制限」という機能を使用します
日本語訳からは分かりにくいですが 頂点に設定されているウエイトの数を制限の値より少なくなるように切り捨てる機能です。

ただし 値の小さいものを消去するだけの機能なので ウエイトの合計値を1にする正規化をする必要があります。
図では特定の頂点のウエイトを見るために頂点を選択した状態ですが
ウエイトペイントモードの選択マスクを使用しない状態で
合計を制限 > すべてを正規化 と順に実行するだけでいいかでしょう。

Unityでの読み込み

特別な操作はないですが書き出したものをUnityで確認するまでの処理を
最後にメモ代わりに書いておきます。

UnityにインポートしたアセットのRigのタブで Animatin TypeをHumanoidにしてApply
設定が正常にできていると DEFで名前の始まるボーンが関連付けされます
Configureのボタンを押してボーンの対応付けが埋まっているか確認しておきます。
ボーン親子の対応付けがうまくいっていない場合は 人型に灰色に表示(グレーアウト)される部分ができます
特に鎖骨部分と背骨との親子付けが設定されていないとはっきりエラーが表示され、
指のボーンの親子付けがされてない時はエラー表示がなく手がグレーアウトされます
背骨部分の〇がグレーアウトされている場合は大腿部の親子付けが間違ってる場合があります。

0 件のコメント:

コメントを投稿