![見出し画像](https://assets.st-note.com/production/uploads/images/132802202/rectangle_large_type_2_46ba7d82fb93a30e4ac708ff44414e75.png?width=1200)
Unityでリップシンク + FBXエクスポート(uLipSync)
どうも。
知見を得たので備忘録程度に。
Unityでリップシンク処理した後、FBXでエクスポートする流れです。
hecomiさんが開発している「uLipSync」を使用します。
FBXデータをUnityに読み込み
リップシンク処理
FBXで書き出し
の流れを解説します
元のデータがVRMの場合少し処理の仕方が変わるので
公式ドキュメントなどを読むことをおすすめします
参考記事
元のFBXデータにキーフレーム等のアニメーションがついている場合は
以下の記事を参考にアニメーションを適用することをおすすめします
https://qiita.com/noma_tongull/items/92eca0221f07d659e510
1. パッケージのインストール
Releasesから最新版パッケージを落とします
サンプル付きの方をおすすめします
Unityがインストール済みならダブルクリックで追加できるはず
追加で「Unity.Burst」「Unity.Mathematics」「FBX Exporter」をインストールします
(「Unity.Mathematics」は既にインストールされている場合がある)
上のメニューから「ウィンドウ」→「パッケージマネージャー」で開いて
Unityレジストリに変更、パッケージを検索してインストールします
![](https://assets.st-note.com/img/1709459509448-Yf9A3ISnJ8.png?width=1200)
2. リップシンクのセットアップ
読み込んだモデルをヒエラルキーにドラッグ&ドロップし、
顔モデルのインスペクターに「Skinned Mesh Renderer」が追加されていることを確認します
BlendShapeにAIUEOのパラメータがあると楽です
![](https://assets.st-note.com/img/1709460775965-HUJbcfBMbu.png?width=1200)
同様に「Audio Source」コンポーネントを追加して
リップシンクさせたい音声ファイルを入れます
![](https://assets.st-note.com/img/1709462035556-K69cvs74n8.png?width=1200)
顔モデルのインスペクターに「U Lip Sync」コンポーネントを追加します
プロファイルはサンプルのUnityちゃんプロファイルを使ってみます
![](https://assets.st-note.com/img/1709461067516-hNEkszphVD.png?width=1200)
同様に「U Lip Sync Blend Shape」コンポーネントを追加し、
「Skinned Mesh Renderer」の項目にある「Find From Children」のチェックを外して、顔モデルを追加します
「Blend Shape」項目内にそれぞれ「AIUEO」のパラメータと「N」「-」を追加して、それぞれのBlendShapeパラメータを追加していきます
「N」「-」はNoneのままで大丈夫です
![](https://assets.st-note.com/img/1709461226338-2fsmhUkQgu.png?width=1200)
「U Lip Sync」コンポーネントの「On Lip Sync Update」にリストを追加
赤枠部分に顔モデルをドラッグ&ドロップします
![](https://assets.st-note.com/img/1709461744783-snUG9oensb.png?width=1200)
ファンクション部分に「uLipSyncBlendShape」→「OnLipSyncUpdate」
![](https://assets.st-note.com/img/1709461835546-ZbLMDUdg3C.png?width=1200)
画面上部にある再生ボタンを押すとリップシンク処理が始まります
![](https://assets.st-note.com/img/1709463832435-u7gwgDkiUG.png)
3. リップシンクをベイクする
プロジェクトタブ上で
右クリック → 「作成」→「uLipSync」→「Baked Data」
で空のベイクデータを作成します
![](https://assets.st-note.com/img/1709464120993-SWtChpMwGJ.png?width=1200)
プロファイルとリップシンクさせたい音声ファイルを追加しベイクします
ここで注意ですが、長めの音声ファイルをベイクする際に
下のDataタブを開いたままにするとハングアップするバグがあるので
閉じたままベイクすることをおすすめします。
(v3.1.0で直ったらしいんですけど私の環境では直ってませんでした)
![](https://assets.st-note.com/img/1709464258128-4OCZ9dP4S0.png?width=1200)
次にアニメーションクリップを作成します
顔モデルに「Animator」コンポーネントを追加します
![](https://assets.st-note.com/img/1709464879828-kU7U9dLnPV.png?width=1200)
上のメニューから「ウィンドウ」→「uLipSync」→「Animation Clip Generator」でツールウィンドウを開きます
![](https://assets.st-note.com/img/1709464579566-NJXrCx7aHF.png?width=1200)
「アニメーター」にAnimatorコンポーネントを追加したモデル
「Anim Bake」にU Lip Sync Blend Shapeが入ってるモデル
「Baked Data List」に作成したベイクデータ
「Output Directory」に出力先を指定します
(無記入の場合Assetsフォルダ直下に出力されます)
![](https://assets.st-note.com/img/1709464902234-lyiQKzBUPw.png?width=1200)
4. ベイクデータの再生
プロジェクトタブ上で右クリック→「作成」→「アニメーターコントローラー」を追加します
![](https://assets.st-note.com/img/1709465158595-fF6n59f7dM.png?width=1200)
アニメーターコントローラーをダブルクリックで開いて
作成したベイクデータのアニメーションクリップをドラッグ&ドロップで追加します。自動的にEntryに繋がれます
![](https://assets.st-note.com/img/1709465267645-CFGgjgxTya.png?width=1200)
「Animator」コンポーネントにアニメーターコントローラーを追加します
![](https://assets.st-note.com/img/1709465474671-CRmxfCPg68.png?width=1200)
U Lip Sync 関係のコンポーネントをすべて無効化した状態で
正常にリップシンクができているか確認します
5. FBXエクスポート
FBXに元々モーションキャプチャー等で記録したキーフレームが入っていた場合、なぜかキーフレームの値が異常な数値で書き出されてしまうので、顔モデルのみFBXで書き出して3DCGソフト上でモデルを置き換えることをおすすめします。
(キーフレームが記録されていない場合は全身ごと書き出しても問題ないと思います。多分)
ここでは全身ごと書き出してみます
ヒエラルキーのオブジェクトを右クリック→「Export To FBX」で
FBXデータを書き出します
![](https://assets.st-note.com/img/1709466283146-KidDq8URYM.png)
Animated Skinned Meshにチェックをつけて書き出します
(Blenderで扱う場合は「Export Format」をBinaryに設定することをおすすめします)
![](https://assets.st-note.com/img/1709466362792-MgVYPyNmxp.png?width=1200)
3DCGソフト等で読み込んで、リップシンクがついているか確認してください
以上で解説を終わります
今回の例ではサンプルで用意されたUnityちゃんのプロファイルを使用しましたが、プロファイルは自作することができるので公式ドキュメントを読んでみてください。キャリブレーションをするとより正確なリップシンクが可能です。
この記事が気に入ったらサポートをしてみませんか?