結構はまった。
Blenderには、ドライバといってシェイプキーとボーンを関連付け、ボーンアニメーションとしてシェイプキーを操作する機能がある。
てっきりこの機能を使って出力すれば、表情のアニメーションが出力されると思い込んでいたため、はまってしまった。
どうも、このドライバやコントロールリグの機能はブレンダーの世界だけの話みたいだ。
実際にUnityに取り込まれるのは、最終的なボーンアニメーションのみであり、あるボーンに紐づいたコントロールはデータとして入っていないみたい。
試しにグーパーの制御ボーンをUnity上で動かしてみても、掌はピクリともしない。
じゃあ、表情のブレンドシェイプはどうすんだ?というと、俺の調べた限りでは2つのアプローチがある。
一つ目は、スクリプトによる制御によるもの。これについては以前の記事で扱っているので今回は省略。
【Unity4】Unityでスクリプトからスキンメッシュアニメーションのフルコントロールに挑戦、その1
二つ目は、Unityエディター上で、時間軸に沿ってシェイプキーの値(0~100)が変化するアニメーションファイルを作成して、それをメカニムを使ってブレンドシェイプする方法。
今回は後者のやり方で実装しました。
まず、シェイプキーを持つメッシュをヒエラルキー上で選択すると、インスペクターに登録されているシェイプキーが表示される。
そして、この値を変化させるアニメーションファイルを作成する(やり方は割愛、Animationタブを開いたことのある人ならすぐにわかると思います)
ここからが肝なんですが、メカニムにもレイヤー機能があって、複数のステート管理を並行して適用したり、ブレンドすることができる事を今日はじめて知った。
それが冒頭の画像なんだけれども、Faceというレイヤーが表情のそれで、このパラメータ設定を次のようにする。
ここで、アバターマスクが重要で、これを指定しないと表情用に作ったアニメーションファイルのもつ初期値のポーズ(おそらく)で上書きされてしまう。
アバターマスクの設定は下記のとおり。
シェイプキーを持つメッシュ以外にチェックを入れる。
こうして出来上がった動画がこちらになります。
オンゲーム中のイベントシーンをイメージしたレイアウトにしてみました。
http://bribser.co.jp/blog/animationlayermask/
マスクのかけ方、逆じゃないでしょうか?
たしかに、記事の書き方はおかしいですね。
マスクはモーションを適用させたいところを緑にするかチェックする、はずですね。
けれども今みたら、この設定で動いてました。
ちなみに、画像にあるcocoacocoのチェックのオンオフは結果に影響しませんでした。
ひょっとしたら、ブレンドシェイプは全身マスク(赤にする)だけでいいのかもしれません。
このへんいまひとつ理解できていませんでした。ご指摘ありがとうございます。