見出し画像

Unityでリップシンク + FBXエクスポート(uLipSync)

どうも。

知見を得たので備忘録程度に。
Unityでリップシンク処理した後、FBXでエクスポートする流れです。

hecomiさんが開発している「uLipSync」を使用します。


  1. FBXデータをUnityに読み込み

  2. リップシンク処理

  3. FBXで書き出し

の流れを解説します

元のデータがVRMの場合少し処理の仕方が変わるので
公式ドキュメントなどを読むことをおすすめします

参考記事

元のFBXデータにキーフレーム等のアニメーションがついている場合は
以下の記事を参考にアニメーションを適用することをおすすめします
https://qiita.com/noma_tongull/items/92eca0221f07d659e510

1. パッケージのインストール

Releasesから最新版パッケージを落とします
サンプル付きの方をおすすめします

Unityがインストール済みならダブルクリックで追加できるはず
追加で「Unity.Burst」「Unity.Mathematics」「FBX Exporter」をインストールします
(「Unity.Mathematics」は既にインストールされている場合がある)

上のメニューから「ウィンドウ」→「パッケージマネージャー」で開いて
Unityレジストリに変更、パッケージを検索してインストールします

2. リップシンクのセットアップ

読み込んだモデルをヒエラルキーにドラッグ&ドロップし、
顔モデルのインスペクターに「Skinned Mesh Renderer」が追加されていることを確認します

BlendShapeにAIUEOのパラメータがあると楽です

同様に「Audio Source」コンポーネントを追加して
リップシンクさせたい音声ファイルを入れます

顔モデルのインスペクターに「U Lip Sync」コンポーネントを追加します
プロファイルはサンプルのUnityちゃんプロファイルを使ってみます

同様に「U Lip Sync Blend Shape」コンポーネントを追加し、
「Skinned Mesh Renderer」の項目にある「Find From Children」のチェックを外して、顔モデルを追加します

「Blend Shape」項目内にそれぞれ「AIUEO」のパラメータと「N」「-」を追加して、それぞれのBlendShapeパラメータを追加していきます

「N」「-」はNoneのままで大丈夫です

「U Lip Sync」コンポーネントの「On Lip Sync Update」にリストを追加
赤枠部分に顔モデルをドラッグ&ドロップします

ファンクション部分に「uLipSyncBlendShape」→「OnLipSyncUpdate」

画面上部にある再生ボタンを押すとリップシンク処理が始まります

3. リップシンクをベイクする

プロジェクトタブ上で
右クリック → 「作成」→「uLipSync」→「Baked Data」
で空のベイクデータを作成します

プロファイルとリップシンクさせたい音声ファイルを追加しベイクします

ここで注意ですが、長めの音声ファイルをベイクする際に
下のDataタブを開いたままにするとハングアップするバグがあるので
閉じたままベイクすることをおすすめします。

(v3.1.0で直ったらしいんですけど私の環境では直ってませんでした)

次にアニメーションクリップを作成します

顔モデルに「Animator」コンポーネントを追加します

上のメニューから「ウィンドウ」→「uLipSync」→「Animation Clip Generator」でツールウィンドウを開きます

「アニメーター」にAnimatorコンポーネントを追加したモデル
「Anim Bake」にU Lip Sync Blend Shapeが入ってるモデル
「Baked Data List」に作成したベイクデータ
「Output Directory」に出力先を指定します
(無記入の場合Assetsフォルダ直下に出力されます)

4. ベイクデータの再生

プロジェクトタブ上で右クリック→「作成」→「アニメーターコントローラー」を追加します

アニメーターコントローラーをダブルクリックで開いて
作成したベイクデータのアニメーションクリップをドラッグ&ドロップで追加します。自動的にEntryに繋がれます

「Animator」コンポーネントにアニメーターコントローラーを追加します

U Lip Sync 関係のコンポーネントをすべて無効化した状態で
正常にリップシンクができているか確認します

5. FBXエクスポート

FBXに元々モーションキャプチャー等で記録したキーフレームが入っていた場合、なぜかキーフレームの値が異常な数値で書き出されてしまうので、顔モデルのみFBXで書き出して3DCGソフト上でモデルを置き換えることをおすすめします。

(キーフレームが記録されていない場合は全身ごと書き出しても問題ないと思います。多分)

ここでは全身ごと書き出してみます
ヒエラルキーのオブジェクトを右クリック→「Export To FBX」で
FBXデータを書き出します

Animated Skinned Meshにチェックをつけて書き出します
(Blenderで扱う場合は「Export Format」をBinaryに設定することをおすすめします)

3DCGソフト等で読み込んで、リップシンクがついているか確認してください

以上で解説を終わります

今回の例ではサンプルで用意されたUnityちゃんのプロファイルを使用しましたが、プロファイルは自作することができるので公式ドキュメントを読んでみてください。キャリブレーションをするとより正確なリップシンクが可能です。

この記事が気に入ったらサポートをしてみませんか?