BlenderのRigifyアドオンでUnity用のリグを作る

Blenderには「Rigify」という便利な標準アドオンがあります。これを使えばキャラクターなどを動かすためのリグを容易に作れますが、Rigifyで作ったリグをUnityで使いたい場合、少し注意が必要です。

Rigify

Rigifyは標準のツールですが、最初から有効になっていません。

プリファレンスを開いて、アドオンで「Rigify」を検索します。

チェックボックスで有効にしておくと使えるようになります。

Rigifyが有効になっていると、追加メニューのアーマチュアに「Human (Meta-Rig)」が使えるようになります。

RigifyのMeta-Rigはアニメーションやポージングで使うリグではなく、ボーンを配置するための仮リグです。Meta-rigでボーンを配置してから、最終リグを生成するのがRigifyのワークフローです。

Meta-Rigで骨の位置を決めます
歳数的に書き出されるリグはIKなど制御用のコントロールがあります

Rigifyは人間キャラクター用に2つのMeta-Rigを提供してくれます。アーマチュアのメニューにある「Human (Meta-Rig)」は最も複雑で、指や顔の表情が細かく動かせます。これに対して、「基本」サブメニューの「Basic Human (Meta-Rig)」は必要最低限のボーンしかありません。

HumanとBasic Humanのmeta-rig

ゲーム用アニメーションならどちらかというと、ボーン数が少ないBasic Humanがいいですが、場合によって指が動かせないのは問題になるかも知れません。

不要なボーンの削除

Basic Humanのmeta-rigではなく、標準のHumanを使って、不要なボーンだけを削除する方法もあります。その場合、Rigifyが正しく動作するためにいくつかの注意が必要です。

ここは顔を動かすボーンをなくしますが、指なども他のボーンも同様に消せます。

まず、meta-rigを選択してアーマチュアのプロパティを表示します。ここに「Rigify Layer Names」というのがあります。Meta-rigのボーンはいくつかのレイヤーで管理されていて、青いモニタアイコンを押すとそのレイヤーの表示を切り替えて確認できます。

また、同じくアーマチュアの「レイヤー」でボーンの表示非表示を切り替えることができます。

まず、なくしたい顔のボーンだけを表示します。

オブジェクトモードから編集モードに切り替えて、顔のボーンを選択して削除します。

シフトキーを押しながらレイヤーを選択してすべて表示に戻します。

顔のボーンが消えています

ここで注意が必要なのは、レイヤーのボーンを削除する場合、同じレイヤーのすべてのボーンを削除しなければなりません。このままではリグを書き出してもエラーがでます。例えば、ここは顔を削除したように見えますが、実際に顔レイヤーのボーンが残っています。

リグを書き出すとこの用なエラーがでます。

最後にmeta-rigの不要レイヤーのボーンをすべて削除して、ボーンを正しい位置に配置したら、リグを書き出します。

これでリグが書き出されます。

ボーンの位置の修正が必要ならmeta-rigを残してもいいですが、最終的に書き出す前に削除しましょう。(Unityに間違えて書き出さないように。)

Rigify to Unity

このままRigifyが生成したリグをUnityに書き出そうとするといくつかの問題が発生してしまいます。どれも直せますが、Unityへの書き出し準備を行ってくれる便利なツールがあります。

Rigify to UnityのGithubページにアクセスして、ZIPファイルをダウンロードします。

Blenderではプリファレンスを開いてアドオンのインストールボタンを押します。

ダウンロードしたZIPファイルを選んで、「アドオンをインストール」ボタンを押します。最後に新しい「Rigify to Unity」アドオンが有効になっていることを確認します。

このアドオンを使ってRigifyが生成したリグをUnityが扱いやすい形に少し修正しいます。ここで重要なのはこの作業をスキンニングする前に行うことです。ボーンが移動したりするのでもしスキンニングした後にこの作業を行うならスキンのウエートを修正する必要があります。

では、この変換作業はボタン一つだけで行います。リグを選択して、アーマチュアのプロパティで「Prepare Rig for Unity」を押します。

これからは通常の方法で書き出されたリグとメッシュのスキンニングを行って、アニメーションを付けていきます。

Unityへ書き出す

UnityはBlenderの.blendファイルを読み込んでくれますが、Mayaの.mbファイル同様にその方法が少しハックっぽいです。本来、Unityが読み込める3Dのファイル形式はFBX、OBJ、DAEとDXFだけです。他の形式はBlenderやMaya、他のアプリを裏でFBXに変換してもらいます。ユーザーから見ればその仕組みが全く見えないので、普通に.blendファイルがUnityで開けたように見間違えます。シンプルな3Dモデルならこの方法で問題はありませんし、作業効率がよくなります。しかし、注意点が必要です。まず、BlenderやMayaそのファイルをFBXに書き出してくれるソフトウェアがインストールされていない環境でプロジェクトが使えなくなります。特に高価なMayaの場合、注意が必要です。そして、細かな書き出し設定が必要なら手動でFBXを書き出すしかありません。アーマチュアやアニメーションがあればやはり設定を確認して書き出したいので.blendファイルをそのままUnityで使うのをやめましょう。

では、切りのいいところで作ったモデルとアニメーションをUnityに書き出します。リグされたモデルから始めます。

書き出したいリグを右クリックして、階層を選択します。

メッシュも選択されているのを確認します

ファイルメニューからFBXをエクスポートします。

書き出し先を選んで、右側に表示されている設定を調整します。最初は、選択しているオブジェクトだけを書き出すオプションを選択します。

次は書き出す書類のオブジェクトを設定しておきます。一応選択したオブジェクトだけを書き出すようにすればこの変更をしなくてもいいですが、念のために(習慣づけに)行いましょう。

エンプティ、カメラとライトは書き出さなくていいです

トランスフォームのスケール適用を「全てFBX」に変えます。

次の設定が重要です。リグにはメッシュを変形させるボーンと他のボーンを動かす制御ボーンがあります。ゲームエンジンは変形ボーン以外はいらないので書き出してしまうと必要以上に複雑なリグになります。

デフォームボーンのみ」を必ず有効にします。この下の「リーフボーン」は、指先など最後の骨の長さを指定するボーンです。このオプションを有効にすると書き出されるリグはこう変わります。

リーフボーンなし
リーフボーンあり

まあ、ゲームエンジンではリーフボーンを使わないでしょう。このでこのチェックを外してもいいです。

残りの設定はデフォルトのままでいいです。一旦書き出しを実行して、FBXファイルをUnityのプロジェクトに追加します。

アニメーションの書き出し

リギングされたメッシュを書き出したら、あとはメッシュを書き出さずにアニメーションだけを書き出します。方法は基本的に同じですが、メッシュデータを選択から外します。

Unityでの設定

Unityで最初にリグされたメッシュの読み込み設定を行います。このメッシュがアバターになってメッシュを持たないアニメーションで使われます。

プロジェクトウィンドウでアセットを選択して、「Rig」タブでアニメーションタイプを「ヒューマノイド」に変えて、アバターの定義をこのモデルから作成するようにして、変更を適用します。Rigify to Unityを正しく使っていればここで問題は起こらないでしょう。読み込みが正しく行われたかを確認するために、「設定」ボタンを押します。

必要なボーンがすべて正しく見つかったようです

この画面で手のボーンも確認できます。

ここは自動的に検出できなかったボーンがありますが、ちゃんとあるので手動で設定します。

リグ全体を確認して見つからなかったボーンをこのように設定しておきます。最後に「Apply」で変更を適用して、「Done」で画面を閉じます。

アバターはアニメーションを使わないので、「Animation」タブでインポートしないようにします。

これでアバターの読み込みが完了します。次はアニメーションです。

プロジェクトウィンドウでアニメーションのFBXを選択して、インポート設定の「Rig」でアニメーションタイプをヒューマノイドにいして、アバターは先ほど用意したメッシュを使うようにします。

「Source」でそのアバターを選択します。

アニメーション設定の方では、アニメーションクリップの名称を変えたり、タイムラインを複数のクリップで分けることができます。

例えば、ここはジャンプのモーションを3つのクリップに分けました。

このように、アバターを作成すればアニメーションのパターンを増やすたびにメッシュを書き出さずにアーマチュアだけを書き出して、アニメーションを読み込みます。ただし、アバターとアニメーションは必ず同じリグを使わなければなりません。

Leave a Reply

Your email address will not be published. Required fields are marked *

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください