blenderでshape key actionをarmature actionに変換する方法

MMDで配布されるリップモーションはmmd_toolsで読み込むとshape key actionとして認識される。
でもリンク先のファイルでは通常のshape key action (animation) ができないためdriver boneを使ってshape keyを制御するしかない。
そのためshape key actionをarmature actionに変換する必要がある。
 

  1. 適当なオブジェクトであ/い/う/え/おのshape keyを作ったあと、mmd_toolsを使ってリップモーションをshape key actionとして読み込む

    f:id:usausakokoko:20180502022405p:plain

  2. mouth.a/i/u/e/oとかの名前のボーンを5つ作る

    f:id:usausakokoko:20180502022415p:plain

  3. それぞれに以下のようなdriverを与える

    f:id:usausakokoko:20180502022455p:plain

    - BoneのTransform panelのlocation Xとかを選んで右クリック -> Add drivers -> Manually create later (single)
    - Graph editorのDrivers panelでsingle property選択
    - PropでID typeでKey -> Key選択
    - Pathのところに、1で作ったオブジェクトのshape keyあいうえおのいずれかを右クリック -> Copy data pathしたものをpaste (Path: key_block["あ"].value的になってればok)
     - Type: Scripted Expression以下の Expr:のところをvarにする(そのままでもいいけどボーンがめっちゃ動くのを避けるためvar*.2とかにする)
    ※python error invalid target channelとかでたときはtypeのところ一度適当なものに変更したあと再度scripted expressionに戻すとなんかうまくいく
 ※copy driver -> paste driverすればdriverのtargetをいじるだけですむからちょっと楽かもしれない
  1. この段階でshape key animationにしたがって各ボーンがうごくようになったはずなのでボーンをpose modeにして Pose-> Animation -> Bake ActionでActionとして保存できる

  2. 保存したarmature actionを、shape keyにdriverを与えたarmature (2で作ったarmatureと同じ構造) に与えれば、リップモーションをarmature actionとして表現できる

 

モデルをリンクした先のファイルで、リップモーション (armature action) を与えた様子

f:id:usausakokoko:20180502023304p:plain