リグやその他アニメーションとシェイプキーのアニメーションを、ドライバーを使って一括管理する方法を紹介します。
もくじ
問題
リグやその他のアニメーションと、シェイプキーのアニメーションは、別々のアクションとして保存される。
このため、1つのプロジェクト内で複数のアニメーションを作ろうとすると、それぞれ別々のアクションを作って、モーションを切り替える際にも毎回両方のアクションを切り替える必要がある。
これは手間なので、一括管理する方法を紹介する。
ドライバーを使う
シェイプキーにドライバーを設定して、リグの方の動きでシェイプキーを管理する。
上のGIF動画では、パンツが見えてしまう問題を修正するためのシェイプキーを、ドライバー用に作ったオブジェクトにキーフレームを打つことで管理しやすくしている。
このキーフレームを、リグのアニメーションと同じアクション内に入れることで、シェイプキーと体の動きの一括管理ができる。
ドライバーとは
ドライバーとは、値を別の値の動きにリンクさせる機能。
オブジェクトの位置や回転などに関連付ける事ができるので、視覚的に値を操作しやすくしたり、特定の動きをした時に同時に形状も変形させたりすることができる。
ドライバーを設定することで、シェイプキーのメニューには一切触らずにリグの方にアニメーションを付けて、1つのアクションで管理することができる。
ちなみに、同じアクションを利用できればよいので、ドライバーのリンク先はドライバー用のメッシュやエンプティオブジェクトでも構わない。
ドライバーの作り方
ドライバー用のリグを作る
ドライバー用のリグを作る。
ボーンは横に倒すと、次に作るカスタムシェイプの向きがワールド座標と同じようになるので扱いやすい(後述)。
ボーン名をわかりやすいものにする(スカート用ドライバーなので、DRV_Skirtとした)。
下記のように作る。
- 全てのドライバーのルート
- 各ドライバーの親
- ドライバーにするボーン
- 各ドライバーの親
オブジェクトのチャンネルは全て同じ
オブジェクトにキーフレームを打ってしまうと、アクションを共有した時、体のリグのオブジェクト自体が動いてしまう。
これはアニメーションデータが入っているチャンネルが「Object Transforms」という同じ項目になってしまっているためドライバー用のオブジェクトの動きがリグのオブジェクトの動きにもなってしまう。
別の項目として扱えるようにするためには、個別の名前を持ったボーンを作る必要がある。
カスタムシェイプを作る
ドライバー用リグの、ビューポート上での見た目を変える。
なくてもドライバーとして利用することはできるが、ボーンの形状では選択しづらいのと、より視覚的にわかりやすくするためにやる。
わかりやすければ形状は何でもいいので、今回は面のないメッシュオブジェクトで作る。
しっかりと0.0と1.0になっていることが確認できる形状だとよい。
- カスタムシェイプ用のメッシュオブジェクトを作る
- 意図した位置になるよう原点の位置に注意する
- ポーズモードにして、ボーンを選択する
- プロパティエディター > ボーン > ビューポート表示 > カスタムシェイプ > カスタムオブジェクト に、作ったメッシュオブジェクトを設定する
- 「ボーン長で拡大縮小」をオフ
- 作ったメッシュの大きさそのままにする
- 「ワイヤーフレーム」をオンにすれば、カスタムオブジェクト側で面を削除する必要がない
原点の位置に注意する
Blenderのボーンには、ヘッド(先頭)とテール(先端)があり、カスタムオブジェクトはヘッドの位置に作られる。ボーンの中心ではないので注意。
ボーンは、倒した状態だとワールド座標のようにZが上になるので、リグ構造上問題ないのなら倒したほうが編集が楽(画像右)。
倒せないリグなら、カスタムオブジェクトの方を回転させる必要がある。
動かす値以外をロックする
今回はZ位置の値にドライバーを設定する。
それ以外の値は動かないように、錠前アイコンでトランスフォームをロックする(位置制限コンストレイントがあれば十分かも?)。
コントローラーの値はすべて初期値しておく。
位置制限コンストレイントを設定
- プロパティ > コンストレイント > 位置制限コンストレイントを追加
- Z位置が、0.0から1.0までしか動かないように設定する
- 変換はローカル空間にする
シェイプキーにドライバーを追加する
- シェイプキーを右クリック > ドライバーを追加
- 設定ウィンドウが出てくるが、後で設定できるのでそのままでよい
- ドライバーエディターを開く
- 設定したオブジェクトに、「値(Skirt)」のようなものが作成されているので、クリックすると、右のメニューに作成したドライバーのメニューが出る
- オブジェクト > コントローラーの名前 に設定
- タイプ > Z位置
- スペース > ローカル空間
これでコントローラーのZ位置を動かすと、シェイプキーの値を動かすことができる。
アニメーションを付ける
このコントローラーのキーフレームは、リグのアニメーションと同じアクション内に入れることで、シェイプキーと体の動きの一括管理ができる。
参考
blenderのシェイプキーアニメの注意点 | とあるプログラマーのブログ