ゴマちゃんフロンティア

アザラシが大好きなエンジニアの開発日記です

【Blender】口の開閉アニメーションをboneで表現する方法

time 2017/12/04

Blender2.80でUIが大幅に変更されました。
本記事は2.79以前のバージョンを想定して書いているため、設定方法が異なっている可能性があります。
あらかじめご了承ください。

というわけで、今回はBlenderを使った口のアニメーションに関するお話です。

ゲーム画面上でキャラクターの口を見る機会は少ないものの、攻撃時や被ダメージ時などそれっぽい時は口パクして欲しいものです。
Blenderで口元のアニメーションと言うとシェイプキーを使いたいところですが、Unityへインポートする前に「頂点数を変更するモディファイアをApplyする」必要があります。
各頂点に設定するものなので妥当な仕様ではありますが、キャラクター制作中はモディファイアを適用せず保ったままにしておきたいところ。特に頂点再分割 (Subdivision Surface) やSolidifyは確定してしまうと戻すのが大変です。
そこで口もboneを使ったアニメーションで実現しようとした次第です。

口部分の作成

人間キャラクターでもなければリアリティを求める必要もないので、適当に丸く作ります。
縦横に1~2回ループカット (Ctrl+R) し、口にする部分を頂点選択→エルード (E) で凹ませます。また、口の内部でも1回ループカットしておくとやりやすくなります。

自分のキャラの場合は上のような感じです。冒頭の経緯で書いた通り、頂点再分割モディファイアを入れています。

口用boneと頂点グループの割り当て

Armatureの頭部分のboneからエルードで伸ばし、口用のboneを作成します。アニメーションは口の開閉だけで十分なので、上下に2つ作りました。

親子関係を設定する際はあらかじめArmature全体を選択→ポーズモードに切り替えておくと、個々のboneを選択して頂点グループを追加できます。今回は手動でウェイトを設定するので、「With Empty Groups」が良いでしょう。

口付近のウェイトペイント

難関となるのは「口部分のウェイトペイント」ではないでしょうか。かく言う私もウェイトペイントが上手くできずに挫折していました。
で、最近知ったのは「特定の頂点にのみウェイトを設定する方法」で、これを使うと割とあっさりいけたりします。

下準備として、口用boneに分かりやすいような名前を付けておきます。「Armatureを選択→プロパティウィンドウのBoneタブ」から付けられます。

エディットモードでウェイトを設定する頂点を選択します。上側と下側で2回に分けて行いますので、最初は人間で言う下唇部分を選択しました。
その状態でプロパティウィンドウの「データ」タブを開き、「頂点グループ」リストから口用boneの下側を選びます。リスト下にある「Weight」を調節し、「Assign」ボタンを押しましょう。
どの程度に調節するかはモデルや頂点数に寄りますが、自分の場合は中央側を0.65、外側を0.3に設定してみました。

同様の手順で上のboneにもウェイトを設定します。

設定後はウェイトペイントの度合いとポーズモードでの口の動きを確認し、微調整を行います。ウェイトとboneの回転を上手く調節すれば、口を閉じるのもあまり違和感なく行えます。
このようにboneでも簡単な口のアニメーションを作れるので、モディファイアの関係でシェイプキーを断念してしまった方は挑戦してみてください。

down

コメントする