【Unity&Blender】表情のブレンドシェイプ

結構はまった。

Blenderには、ドライバといってシェイプキーとボーンを関連付け、ボーンアニメーションとしてシェイプキーを操作する機能がある。

てっきりこの機能を使って出力すれば、表情のアニメーションが出力されると思い込んでいたため、はまってしまった。

どうも、このドライバやコントロールリグの機能はブレンダーの世界だけの話みたいだ。

実際にUnityに取り込まれるのは、最終的なボーンアニメーションのみであり、あるボーンに紐づいたコントロールはデータとして入っていないみたい。

試しにグーパーの制御ボーンをUnity上で動かしてみても、掌はピクリともしない。

じゃあ、表情のブレンドシェイプはどうすんだ?というと、俺の調べた限りでは2つのアプローチがある。

一つ目は、スクリプトによる制御によるもの。これについては以前の記事で扱っているので今回は省略。

【Unity4】Unityでスクリプトからスキンメッシュアニメーションのフルコントロールに挑戦、その1

二つ目は、Unityエディター上で、時間軸に沿ってシェイプキーの値(0~100)が変化するアニメーションファイルを作成して、それをメカニムを使ってブレンドシェイプする方法。

今回は後者のやり方で実装しました。

まず、シェイプキーを持つメッシュをヒエラルキー上で選択すると、インスペクターに登録されているシェイプキーが表示される。

20150427-0

そして、この値を変化させるアニメーションファイルを作成する(やり方は割愛、Animationタブを開いたことのある人ならすぐにわかると思います)

ここからが肝なんですが、メカニムにもレイヤー機能があって、複数のステート管理を並行して適用したり、ブレンドすることができる事を今日はじめて知った。

それが冒頭の画像なんだけれども、Faceというレイヤーが表情のそれで、このパラメータ設定を次のようにする。

20150427-2

ここで、アバターマスクが重要で、これを指定しないと表情用に作ったアニメーションファイルのもつ初期値のポーズ(おそらく)で上書きされてしまう。

アバターマスクの設定は下記のとおり。

20150427-3

シェイプキーを持つメッシュ以外にチェックを入れる。

こうして出来上がった動画がこちらになります。

オンゲーム中のイベントシーンをイメージしたレイアウトにしてみました。

4年前

2 コメント

    1. たしかに、記事の書き方はおかしいですね。

      マスクはモーションを適用させたいところを緑にするかチェックする、はずですね。

      けれども今みたら、この設定で動いてました。

      ちなみに、画像にあるcocoacocoのチェックのオンオフは結果に影響しませんでした。

      ひょっとしたら、ブレンドシェイプは全身マスク(赤にする)だけでいいのかもしれません。

      このへんいまひとつ理解できていませんでした。ご指摘ありがとうございます。

コメントを残す

メールアドレスが公開されることはありません。