凹みTips

C++、JavaScript、Unity、ガジェット等の Tips について雑多に書いています。

uLipSync の VRM モデル向けリップシンクアニメーションベイクについて

はじめに

id:bibinbaleo さんのブログで uLipSync を試してみていただいており、その中で VRM モデルのアニメーション書き出しについての記述がありましたので補足解説させていただきます。

bibinbaleo.hatenablog.com

uLipSync についてはこちら。

github.com

アニメーション書き出しについて

トマシープさんの記事では uLipSyncBlendShapeVRM を試されていらっしゃいましたが、現状、uLipSync のアニメーション書き出しは残念ながら uLipSyncBlendShape のみとなっています。VRM 0.X では VRMBlendShapeProxy というコンポーネントを介して、VRM 1.0 では Expression という仕組みを介してブレンドシェイプを扱っています。uLipSync ではこれらの仕組みを利用して VRM モデルにリップシンクをさせていました。このように一層かんでしまっている関係で直接 Unity のアニメーションとしてベイクできなくなっています。

一方で、一層かまない形で直接 BlendShape を駆動する uLipSyncBlendShape を利用することでアニメーションはベイクすることが出来ます。

1. 不要なコンポーネントの削除

uLipSyncBlendShapeVRMuLipSyncExpressionVRM は外します。

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. アニメーション書き出し

あとは以前の記事の通りアニメーション書き出しを行います。

tips.hecomi.com

おさらいとしては、BakedData という事前焼き込みアセットを制作しリップシンク結果をベイク、そしてそれを Window > uLipSync > Animation Clip Generator で指定してアニメーション変換、という感じです。

これでアニメーションが生成されました。

おわりに

エラーで止まってしまう問題は警告を出してプロセスが走らないよう修正しておきます。また、uLipSyncBlendShapeVRMuLipSyncExpressionVRM 利用時でも自動的に該当のブレンドシェイプを探し出しアニメーションベイクまでたどり着けないかの調査もしようと思います。WebGL 書き出しサポートもそろそろなんとかしたいですね…(年末のお休みなどで対応したいところです)。