はじめに
Unreal Engine を使って映像作品を作ってみたいと思い、リップシンクアニメーションを作る方法を調べてまとめました。
筆者のレベルは Unity ちょっと使ったことのある Unreal Engine 初心者なので、ご指摘歓迎です。
動作環境
Windows 11
Omniverse Audio2Face 2022.1.2
Unreal Engine 5.1.0
Omniverse Audio2Face のインストール
Omniverse Launcher のインストール
下記ページの「Get Started」から個人情報を入力してダウンロードしてインストールする。
https://www.nvidia.com/en-in/omniverse/
Omniverse Audio2Face のインストール
- プログラム「NVIDIA Omniverse Launcher」を起動する。
- 「更新」タブを開く
- 検索窓に「audio2face」と入力し、表示されるアプリ「OMNIVERSE AUDIO2FACE」を選択しインストールする
Nucleus サービスを追加する
- Omniverse ではサンプル素材の利用や作成したリソースの共有のために Nucleus サービスというファイルサーバーのようなものが用意されているので、これをインストールする
- Omniverse Launcher の「NUCLEUS」タブを開く
- 「ローカル Nucleus サービスを追加する」を選択
- サーバー名とファイルの保存場所を確認されるので、デフォルトのまま「次へ」
- Nucleus サービス上での管理者アカウント情報の入力が求められるので、任意のユーザー名やパスワードなどを入力して「セットアップを完了する」
Unreal Engine 5.1 Omniverse Connector のインストール
- Omniverse から Unreal Engine へリソースの共有をするためのアプリケーションをインストールする
- 「更新」タブを開いて「unreal engine」を検索し、表示される「Epic Games Unreal Engine 5.1 Omniverse Connector」をインストールする
Omniverse Audio2Face で音声からリップシンクアニメーションを作成する
- 下記の動画を参考にリップシンクアニメーションを作成する
- https://www.youtube.com/watch?v=jrZ71xtaJ5E
音声の用意
https://ondoku3.com/ja/
音声読み上げサービスを使って音声を用意した。
ダウンロードできたファイルは mp3 だったので、
https://convertio.co/ja/
を使って wav に変換した。
Omniverse Audio2Face の起動
- Omniverse Launcher の「ライブラリ」タブを開く
- アプリケーションの Omniverse Audio2Face を選択し「スタート」
ブレンドシェイプ用のモデルを読み込み
- デフォルトのアニメーションから Unreal Engine で利用できるブレンドシェイプアニメーションに変換する
- 動作確認をするためのブレンドシェイプ用のモデルを読み込む
- 対象のファイルは Content パネルの「omniverse://localhost/NVIDIA/Assets/Audio2Face/Samples/blendshape_solve/male_bs_46.usd」にある
- このファイルをドラッグアンドドロップで Stage パネルにコピーする
- デフォルトのモデルと同じ座標に配置されており見づらいので、Stage で World > male > char_male_model_hi > c_headWatertight_hi を選択し、Viewport で移動させる
ブレンドシェイプアニメーションへの変換
- 右上の A2F Data Conversion タブを選択
- BLENDSHAPE CONVERSION 欄の編集をする
- Input Anim Mesh に /World/male/char_male_model_hi/c_headWatertight_hi に
- Blendshape Mesh に /World/male_bs_46/neutral に
- SET UP BLENDSHAPE SOLVE を押す
- Audio2Face Tool タブで AUDIO PLAYER 欄で音声の再生を行い、青いモデルが動いたら成功
音声ファイルをセットする
- Audio2Face Tool タブの AUDIO PLAYER の Audio Source Directory に音声ファイルのあるディレクトリを指定
- WAV Audio File に対象の音声ファイルを指定
- 再生し、リップシンクが動いていることを確認
アニメーションを書き出す
- 右上の A2F Data Conversion タブを選択
- COMMON SETTINGS 欄で File Name にアニメーション名を入力する
- BLENDSHAPE CONVERSION 欄の EXPORT AS USD SkelAnimation を押してアニメーションの書き出しをする
Unreal Engine 5 へ MetaHuman を読み込む
Unreal Engine 5 のインストール
- 公式ドキュメントに従ってインストールし、起動する
- ゲーム > Blank を選択、任意のプロジェクト名を入力して「作成」
MetaHuman の読み込み
- 上部メニューから「ウィンドウ > コンテンツブラウザ1」と選択してコンテンツブラウザを開く
- コンテンツブラウザパネルの「追加」ボタンを押し、「Quixel コンテンツを追加」を選択
- Quixel Bridge パネルが開くので、右上のユーザーアイコンを押し、Epic Games アカウントでログイン
- 左メニューの「MetaHumans > MetaHuman Presets」プリセットの MetaHuman が表示されるので好きなものを選択。今回は Ada を選択
- Download して Add する
- コンテンツブラウザの「コンテンツ > MetaHumans > Ada > BP_Ada」に読み込まれるので、これをビューポートにドラッグアンドドロップして配置する
リップシンクアニメーションを MetaHuman に適用
アニメーションのインポート
- コンテンツブラウザの「MetaHuman > Ado」で右クリックし「Import Facial Animation」を選択
- Input USD File で Audio2Face でエクスポートしたファイルを選択(エクスポート時にパスを覚えておく。今回はデフォルトで「ドキュメント > Kit > shared > capture」になっていた。)
- Skelton に Face_Archetype_Skelton を選択
- OK
音声のインポート
- コンテンツブラウザの「インポート」を押し、リップシンクのアニメーション作成の際に利用した音声ファイルをインポートする
レベルシーケンスの作成
- Unreal Engine で Premiere Pro などのようにタイムラインでオブジェクトを操作するシーケンサーを導入する
- ビューポートパネルのカチンコのアイコンから「レベルシーケンスを追加」
- シーケンサーパネルが追加されることを確認
シーケンサーへ音声と MetaHuman の登録
- アウトライナーパネルから BP_Ada を選択し、追加したレベルシーケンスのシーケンサーパネルへドラッグアンドドロップする
- シーケンサーの左側で右クリックし「オーディオトラック」を選択、「+ オーディオ」ボタンを押下し、インポートした音声ファイルを選択
シーケンサーへリップシンクアニメーションの追加
- BP_Ada の Face の Face_ControlBoard_CtrlRig をミュートする
- Face の「+ トラック」を押下し「アニメーション」を選択、インポートしリップシンクアニメーションを読み込む
- シーケンサーを再生し、音声に合わせてアニメーションが動くことを確認する