はじめに
id:bibinbaleo さんのブログで uLipSync を試してみていただいており、その中で VRM モデルのアニメーション書き出しについての記述がありましたので補足解説させていただきます。
uLipSync についてはこちら。
アニメーション書き出しについて
トマシープさんの記事では uLipSyncBlendShapeVRM
を試されていらっしゃいましたが、現状、uLipSync のアニメーション書き出しは残念ながら uLipSyncBlendShape
のみとなっています。VRM 0.X では VRMBlendShapeProxy
というコンポーネントを介して、VRM 1.0 では Expression という仕組みを介してブレンドシェイプを扱っています。uLipSync ではこれらの仕組みを利用して VRM モデルにリップシンクをさせていました。このように一層かんでしまっている関係で直接 Unity のアニメーションとしてベイクできなくなっています。
一方で、一層かまない形で直接 BlendShape を駆動する uLipSyncBlendShape
を利用することでアニメーションはベイクすることが出来ます。
1. 不要なコンポーネントの削除
uLipSyncBlendShapeVRM
や uLipSyncExpressionVRM
は外します。
2. uLipSyncBlendShape の追加とセットアップ
VRM のモデルと言えど、内部的には SkinnedMeshRenderer
を保持しており、その中でブレンドシェイプが定義されています。サンプルでは VRoid を利用して作ったモデルとなっており、ここでは Face
というゲームオブジェクトに該当の SkinnedMeshRenderer
がありました。
Fcl_MTH_*
(* は AIUEO や Up, Down, Joy など)という名前で様々なブレンドシェイプが登録されています。
では uLipSyncBlendShape
をアタッチします。Skinned Mesh Renderer から顔を含むメッシュを選択して下さい。出てこない場合は Find From Children を外していただき、直接該当の SkinnedMeshRenderer
をドラッグドロップします。これで音素を追加して該当のブレンドシェイプを指定してセットアップします。
3. uLipSync への登録
忘れずに uLipSync へイベントを登録しておきます。
4. アニメーション書き出し
あとは以前の記事の通りアニメーション書き出しを行います。
おさらいとしては、BakedData
という事前焼き込みアセットを制作しリップシンク結果をベイク、そしてそれを Window > uLipSync > Animation Clip Generator で指定してアニメーション変換、という感じです。
これでアニメーションが生成されました。
おわりに
エラーで止まってしまう問題は警告を出してプロセスが走らないよう修正しておきます。また、uLipSyncBlendShapeVRM
や uLipSyncExpressionVRM
利用時でも自動的に該当のブレンドシェイプを探し出しアニメーションベイクまでたどり着けないかの調査もしようと思います。WebGL 書き出しサポートもそろそろなんとかしたいですね…(年末のお休みなどで対応したいところです)。