プラグインの使用方法
このガイドでは、MetaHumanキャラクター向けにRuntime MetaHuman Lip Syncをセットアップする手順を説明します。
注記: Runtime MetaHuman Lip SyncはMetaHumanとカスタムキャラクターの両方で動作します。本プラグインは以下のような様々なキャラクタータイプをサポートしています:
- 人気商用キャラクター (Daz Genesis 8/9, Reallusion CC3/CC4, Mixamo, ReadyPlayerMeなど)
- FACSベースのブレンドシェープを持つキャラクター
- ARKitブレンドシェープ標準を使用するモデル
- Preston Blairフォネームセットを持つキャラクター
- 3ds Maxフォネームシステム
- 顔の表情用にカスタムモーフターゲットを持つ任意のキャラクター
上記すべての標準に対するビセームマッピングリファレンスを含む、カスタムキャラクターのセットアップ詳細についてはカスタムキャラクター設定ガイドを参照してください。
前提条件
開始前に以下を確認してください:
- MetaHumanプラグインがプロジェクトで有効になっていること(注: UE 5.6以降ではこの手順は不要。MetaHuman機能がエンジンに直接統合されています)
- 少なくとも1つのMetaHumanキャラクターがダウンロード済みでプロジェクト内で利用可能であること
- Runtime MetaHuman Lip Syncプラグインがインストールされていること
追加プラグイン:
- オーディオキャプチャ(例: マイク入力)を使用する場合は、Runtime Audio Importerプラグインをインストールしてください。
- テキスト読み上げ機能を使用する場合は、Runtime Text To Speechプラグインをインストールしてください。
プラットフォーム固有の設定
Android / Meta Quest設定
AndroidまたはMeta Questプラットフォームをターゲットにしており、このプラグインでビルドエラーが発生する場合、プロジェクト設定でx86_64 (x64) Androidアーキテクチャを無効にする必要があります:
- 編集 > プロジェクト設定に移動
- プラットフォーム > Androidに移動
- プラットフォーム - Androidのビルドセクションで、**Support x86_64 [aka x64]**を見つけて無効にします(下図参照)
これは、本プラグインが現在Android/Meta Questプラットフォーム向けにarm64-v8aとarmeabi-v7aアーキテクチャのみをサポートしているためです。
セットアップ手順
ステップ1: フェイスアニメーションブループリントの特定と修正
- UE 5.5以前(またはUE 5.6+のレガシーMetaHumans)
- UE 5.6+ MetaHuman Creator キャラクター
MetaHumanキャラクターのフェイスアニメーションに使用するアニメーションブループリントを修正する必要があります。デフォルトのMetaHumanフェイスアニメーションブループリントは以下にあります:
Content/MetaHumans/Common/Face/Face_AnimBP
リップシンク機能を実装するにはいくつかの選択肢があります:
- デフォルトアセットを直接編集 (最も簡単なオプション)
- 複製を作成
- カスタムAnimation Blueprintを使用
デフォルトの Face_AnimBP
を直接開いて変更を加えます。この変更は、このAnimation Blueprintを使用するすべてのMetaHumanキャラクターに影響します。
注: この方法は便利ですが、デフォルトのAnimation Blueprintを使用するすべてのキャラクターに影響を与えます。
Face_AnimBP
を複製し、わかりやすい名前を付けます- キャラクターのBlueprintクラスを探します(例: "Bryan"というキャラクターの場合、
Content/MetaHumans/Bryan/BP_Bryan
にあります) - キャラクターBlueprintを開き、Faceコンポーネントを見つけます
- Anim Classプロパティを新しく複製したAnimation Blueprintに変更します
注: この方法では、特定のキャラクター向けにリップシンクをカスタマイズしつつ、他のキャラクターは変更せずに残すことができます。
必要な顔のボーンにアクセスできる任意のAnimation Blueprintでリップシンクのブレンディングを実装できます:
- カスタムAnimation Blueprintを作成または既存のものを使用します
- Animation Blueprintが、デフォルトのMetaHumanの
Face_Archetype_Skeleton
(すべてのMetaHumanキャラクターで使用される標準スケルトン)と同じ顔のボーンを含むスケルトンで動作することを確認します
注: この方法では、カスタムアニメーションシステムとの統合において最大限の柔軟性が得られます。
UE 5.6以降では、新しい MetaHuman Creator システムが導入され、従来の Face_AnimBP
アセットなしでキャラクターが作成されます。これらのキャラクター向けに、プラグインは以下の場所にface Animation Blueprintを提供します:
Content/LipSyncData/LipSync_Face_AnimBP
プラグインのFace Animation Blueprintの使用:
- MetaHuman CreatorキャラクターのBlueprintクラスを特定
- キャラクターBlueprintを開き、Faceコンポーネントを見つける
- Anim Classプロパティをプラグインの
LipSync_Face_AnimBP
に変更 - Runtime MetaHuman Lip Sync機能を設定するためにステップ2-4を続行
代替オプション:
- レガシー手順の使用: レガシーMetaHumansを扱っている場合や従来のワークフローを好む場合は、上記のUE 5.5手順に従うことが可能
- カスタムAnimation Blueprintの作成: MetaHuman Creatorスケルトン構造と連携する独自のAnimation Blueprintを作成
注意: UE 5.6+を使用しているが、レガシーMetaHumans(MetaHuman Creatorで作成されていないもの)を扱っている場合は、「UE 5.5 and Earlier」タブの手順を使用してください。
重要: Runtime MetaHuman Lip Syncのブレンディングは、デフォルトMetaHumanのFace_Archetype_Skeleton
に存在する顔面ボーンを含むポーズにアクセスできる任意のAnimation Blueprintアセットに実装可能です。上記のオプションに限定されません - これらは一般的な実装アプローチです。
ステップ2: イベントグラフの設定
Face Animation Blueprintを開き、Event Graph
に切り替えます。オーディオデータを処理し、リップシンクアニメーションを生成するジェネレータを作成する必要があります。
- Standard (Faster) Model
- Realistic (Higher Quality) Model
- まだ存在しない場合は
Event Blueprint Begin Play
ノードを追加 Create Runtime Viseme Generator
ノードを追加し、Begin Playイベントに接続- 出力を変数(例: "VisemeGenerator")として保存し、グラフの他の部分で使用
- まだ存在しない場合は
Event Blueprint Begin Play
ノードを追加 Create Realistic MetaHuman Lip Sync Generator
ノードを追加し、Begin Playイベントに接続- 出力を変数(例: "RealisticLipSyncGenerator")として保存し、グラフの他の部分で使用
注意: Realistic ModelはMetaHumanキャラクター専用に最適化されており、カスタムキャラクタータイプとは互換性がありません。
Realistic Modelで信頼性と一貫性のある操作を行うためには、非アクティブ期間後に新しいオーディオデータを供給する際に、必ずRealistic MetaHuman Lip Sync Generatorを再作成する必要があります。これは、ONNXランタイムの動作により、無音期間後にジェネレータを再利用するとリップシンクが機能しなくなる可能性があるためです。
例: TTSリップシンクを実行して停止した後、新しいオーデ ィオで再度リップシンクを実行したい場合、既存のジェネレータを再利用せずに新しいRealistic MetaHuman Lip Sync Generatorを作成してください。
ステップ3: オーディオ入力処理の設定
オーディオソースに応じて、オーディオ入力を処理する方法を設定する必要があります。
- マイク(リアルタイム)
- マイク(再生)
- テキスト読み上げ(ローカル)
- テキスト読み上げ(外部API)
- オーディオファイル/バッファから
- カスタムオーディオソース
このアプローチでは、マイクに話しながらリアルタイムでリップシンクを実行します:
- Standard (Faster) Model
- Realistic (Higher Quality) Model
- Runtime Audio Importerを使用してCapturable Sound Waveを作成
- オーディオキャプチャを開始する前に、
OnPopulateAudioData
デリゲートにバインド - バインドされた関数で、Runtime Viseme Generatorから
ProcessAudioData
を呼び出し - マイクからオーディオキャプチャを開始
Realistic ModelはStandard Modelと同じオーディオ処理ワークフローを使用しますが、VisemeGenerator
変数の代わりにRealisticLipSyncGenerator
変数を使用します。
Standard Modelの各例では、単に以下を置き換えてください:
VisemeGenerator
をRealisticLipSyncGenerator
変数に- 関数名とパラメータは両モデル間で同一
このアプローチでは、マイクからオーディオをキャプチャし、リップシンク付きで再生します:
- Standard (Faster) Model
- Realistic (Higher Quality) Model
- Runtime Audio Importerを使用してCapturable Sound Waveを作成
- マイクからオーディオキャプチャを開始
- キャプチャ可能なサウンドウェーブを再生する前に、
OnGeneratePCMData
デリゲートにバインド - バインドされた関数で、Runtime Viseme Generatorから
ProcessAudioData
を呼び出し
Realistic ModelはStandard Modelと同じオーディオ処理ワークフローを使用しますが、VisemeGenerator
変数の代わりにRealisticLipSyncGenerator
変数を使用します。
Standard Modelの各例では、単に以下を置き換えてください:
VisemeGenerator
をRealisticLipSyncGenerator
変数に- 関数名とパラメータは両モデル間で同一
注意: よりレスポンシブなリップシンクのためにオーディオデータを小さなチャンクで処理したい場合は、SetNumSamplesPerChunk
関数の計算を調整してください。例えば、サンプルレートを100(10msごとにストリーミング)ではなく150(約6.67msごとにストリーミング)で割ると、より頻繁なリップシンク更新が可能になります。
- 通常
- ストリーミング
このアプローチでは、テキストから音声を合成し、リップシンクを実行します:
- Standard (Faster) Model
- Realistic (Higher Quality) Model
- Runtime Text To Speechを使用してテキストから音声を生成
- Runtime Audio Importerを使用して合成オーディオをインポート
- インポートしたサウンドウェーブを再生する前に、
OnGeneratePCMData
デリゲートにバインド - バインドされた関数で、Runtime Viseme Generatorから
ProcessAudioData
を呼び出し
Runtime Text To Speechプラグインが提供するローカルTTSは、ONNXランタイムの競合により、現在Realisticモデルではサポートされていません。Realisticモデルでテキスト読み上げを使用する場合は、外部TTSサービス(Runtime AI Chatbot Integrator経由 のOpenAIやElevenLabsなど)を使用するか、代わりにStandardモデルを使用してください。
注意: よりレスポンシブなリップシンクのためにオーディオデータを小さなチャンクで処理したい場合は、SetNumSamplesPerChunk
関数の計算を調整してください。例えば、サンプルレートを100(10msごとにストリーミング)ではなく150(約6.67msごとにストリーミング)で割ると、より頻繁なリップシンク更新が可能になります。
このアプローチでは、テキストからのストリーミング音声合成とリアルタイムリップシンクを使用します:
- Standard (Faster) Model
- Realistic (Higher Quality) Model
- Runtime Text To Speechを使用してテキストからストリーミング音声を生成
- Runtime Audio Importerを使用して合成オーディオをインポート
- ストリーミングサウンドウェーブを再生する前に、
OnGeneratePCMData
デリゲートにバインド - バインドされた関数で、Runtime Viseme Generatorから
ProcessAudioData
を呼び出し
Runtime Text To Speechプラグインが提供するローカルTTSは、ONNXランタイムの競合により、現在Realisticモデルではサポートされていません。Realisticモデルでテキスト読み上げを使用する場合は、外部TTSサービス(Runtime AI Chatbot Integrator経由のOpenAIやElevenLabsなど)を使用するか、代わりにStandardモデルを使用してください。
注意: よりレスポンシブなリップシンクのためにオーディオデータを小さなチャンクで処理したい場合は、SetNumSamplesPerChunk
関数の計算を調整してください。例えば、サンプルレートを100(10msごとにストリーミング)ではなく150(約6.67msごとにストリーミング)で割ると、より頻繁なリップシンク更新が可能になります。
- 通常
- ストリーミング
このアプローチでは、Runtime AI Chatbot Integratorプラグインを使用してAIサービス(OpenAIやElevenLabs)から合成音声を生成し、リップシンクを実行します:
- Standard (Faster) Model
- Realistic (Higher Quality) Model
- Runtime AI Chatbot Integratorを使用して外部API(OpenAI、ElevenLabsなど)からテキストで音声を生成
- Runtime Audio Importerを使用して合成オーディオデータをインポート
- インポートしたサウンドウェーブを再生する前に、
OnGeneratePCMData
デリゲートにバインド - バインドされた関数で、Runtime Viseme Generatorから
ProcessAudioData
を呼び出し
Realistic ModelはStandard Modelと同じオーディオ処理ワークフローを使用しますが、VisemeGenerator
変数の代わりにRealisticLipSyncGenerator
変数を使用します。
Standard Modelの各例では、単に以下を置き換えてください:
VisemeGenerator
をRealisticLipSyncGenerator
変数に- 関数名とパラメータは両モデル間で同一
注意: よりレスポンシブなリップシンクのためにオーディオデータを小さなチャンクで処理したい場合は、SetNumSamplesPerChunk
関数の計算を調整してください。例えば、サンプルレートを100(10msごとにストリーミング)ではなく150(約6.67msごとにストリーミング)で割ると、より頻繁なリップシンク更新が可能になります。
このアプローチでは、Runtime AI Chatbot Integratorプラグインを使用してAIサービス(OpenAIやElevenLabs)からストリーミング合成音声を生成し、リップシンクを実行します:
- Standard (Faster) Model
- Realistic (Higher Quality) Model
- Runtime AI Chatbot Integratorを使用してストリーミングTTS API(ElevenLabs Streaming APIなど)に接続
- Runtime Audio Importerを使用して合成オーディオデータをインポート
- ストリーミングサウンドウェーブを再生する前に、
OnGeneratePCMData
デリゲートにバインド - バインドされた関数で、Runtime Viseme Generatorから
ProcessAudioData
を呼び出し
Realistic ModelはStandard Modelと同じオーディオ処理ワークフローを使用しますが、VisemeGenerator
変数の代わりにRealisticLipSyncGenerator
変数を使用します。
Standard Modelの各例では、単に以下を置き換えてください:
VisemeGenerator
をRealisticLipSyncGenerator
変数に- 関数名とパラメータは両モデル間で同一
注意: よりレスポンシブなリップシンクのためにオーディオデータを小さなチャンクで処理したい場合は、SetNumSamplesPerChunk
関数の計算を調整してください。例えば、サンプルレートを100(10msごとにストリーミング)ではなく150(約6.67msごとにストリーミング)で割ると、より頻繁なリップシンク更新が可能になります。
このアプローチでは、事前に録音されたオーディオファイルまたはオーディオバッファを使用してリップシンクを実行します:
- Standard (Faster) Model
- Realistic (Higher Quality) Model
- Runtime Audio Importerを使用してディスクまたはメモリからオーディオファイルをインポート
- インポートしたサウンドウェーブを再生する前に、
OnGeneratePCMData
デリゲートにバインド - バインドされた関数で、Runtime Viseme Generatorから
ProcessAudioData
を呼び出し - インポートしたサウンドウェーブを再生し、リップシンクアニメーションを観察
Realistic ModelはStandard Modelと同じオーディオ処理ワークフローを使用しますが、VisemeGenerator
変数の代わりにRealisticLipSyncGenerator
変数を使用します。
Standard Modelの各例では、単に以下を置き換えてください:
VisemeGenerator
をRealisticLipSyncGenerator
変数に- 関数名とパラメータは両モデル間で同一
注意: よりレスポンシブなリップシンクのためにオーディオデータを小さなチャンクで処理したい場合は、SetNumSamplesPerChunk
関数の計算を調整してください。例えば、サンプルレートを100(10msごとにストリーミング)ではなく150(約6.67msごとにストリーミング)で割ると、より頻繁なリップシンク更新が可能になります。
カスタムオーディオソースの場合、以下が必要です:
- Standard (Faster) Model
- Realistic (Higher Quality) Model
- float PCM形式のオーディオデータ(浮動小数点サンプルの配列)
- サンプルレートとチャンネル数
- これらのパラメータを使用してRuntime Viseme Generatorから
ProcessAudioData
を呼び出し
カスタムソースからオーディオをストリーミングする例:
Realistic ModelはStandard Modelと同じオーディオ処理ワークフローを使用しますが、VisemeGenerator
変数の代わりにRealisticLipSyncGenerator
変数を使用します。
Standard Modelの各例では、単に以下を置き換えてください:
VisemeGenerator
をRealisticLipSyncGenerator
変数に- 関数名とパラメータは両モデル間で同一
注意: よりレスポンシブなリップシンクのためにオーディオデータを小さなチャンクで処理したい場合は、SetNumSamplesPerChunk
関数の 計算を調整してください。例えば、サンプルレートを100(10msごとにストリーミング)ではなく150(約6.67msごとにストリーミング)で割ると、より頻繁なリップシンク更新が可能になります。
ステップ4: アニメーショングラフの設定
イベントグラフの設定後、Anim Graph
に切り替えてジェネレータをキャラクターのアニメーションに接続します:
リップシンク
- Standard (Faster) Model
- Realistic (Higher Quality) Model
- MetaHumanの顔を含むポーズを特定(通常は
Use cached pose 'Body Pose'
から) Blend Runtime MetaHuman Lip Sync
ノードを追加- ポーズを
Blend Runtime MetaHuman Lip Sync
ノードのSource Pose
に接続 RuntimeVisemeGenerator
変数をViseme Generator
ピンに接続Blend Runtime MetaHuman Lip Sync
ノードの出力をOutput Pose
のResult
ピンに接続
オーディオでリップシンクが検出されると、キャラクターは動的にアニメーションします:
- MetaHumanの顔を含むポーズを特定(通常は
Use cached pose 'Body Pose'
から) Blend Realistic MetaHuman Lip Sync
ノードを追加- ポーズを
Blend Realistic MetaHuman Lip Sync
ノードのSource Pose
に接続 RealisticLipSyncGenerator
変数をLip Sync Generator
ピンに接続Blend Realistic MetaHuman Lip Sync
ノードの出力をOutput Pose
のResult
ピンに接続
Realistic Modelは、より自然な口の動きで視覚的な品質を向上させます:
注意: Realistic ModelはMetaHumanキャラクター専用に設計されており、カスタムキャラクタータイプとは互換性がありません。
笑いアニメーション
オーディオで検出された笑いに動的に反応する笑いアニメーションを追加することも可能です:
Blend Runtime MetaHuman Laughter
ノードを追加RuntimeVisemeGenerator
変数をViseme Generator
ピンに接続- 既にリップシンクを使用している場合:
Blend Runtime MetaHuman Lip Sync
ノードからの出力をBlend Runtime MetaHuman Laughter
ノードのSource Pose
に接続Blend Runtime MetaHuman Laughter
ノードの出力をOutput Pose
のResult
ピンに接続
- リップシンクなしで笑いのみを使用する場合:
- ソースポーズを直接
Blend Runtime MetaHuman Laughter
ノードのSource Pose
に接続 - 出力を
Result
ピンに接続
- ソースポーズを直接
オーディオで笑いが検出されると、キャラクターは動的にアニメーションします:
ボディアニメーションとの組み合わせ
既存のボディアニメーションを上書きせずにリップ シンクと笑いを適用するには:
- ボディアニメーションと最終出力の間に
Layered blend per bone
ノードを追加。Use Attached Parent
がtrueであることを確認。 - レイヤー設定を構成:
Layer Setup
配列に1アイテムを追加- レイヤーの
Branch Filters
に以下のBone Name
で3アイテムを追加:FACIAL_C_FacialRoot
FACIAL_C_Neck2Root
FACIAL_C_Neck1Root
- 接続を作成:
- 既存のアニメーション(
BodyPose
など)→Base Pose
入力 - 顔面アニメーション出力(リップシンクや笑いノードから)→
Blend Poses 0
入力 - Layered blendノード → 最終
Result
ポーズ
- 既存のアニメーション(
なぜこれが機能するのか: ブランチフィルタは顔面アニメーションボーンを分離し、リップシンクと笑いが元のボディアニメーションを保持しながら顔面の動きのみとブレンドできるようにします。これはMetaHumanの顔面リグ構造に一致し、自然な統合を保証します。
注意: リップシンクと笑いの機能は、既存のアニメーション設定と非破壊的に連携するように設計されています。これらは口の動きに必要な特定の顔面ボーンのみに影響を与え、他の顔面アニメーションはそのまま残ります。つまり、アニメーションチェーンの任意の時点で安全に統合できます - 他の顔面アニメーションの前( それらのアニメーションがリップシンク/笑いを上書きできるように)または後(リップシンク/笑いが既存のアニメーションの上にブレンドされるように)。この柔軟性により、リップシンクと笑いを、まばたき、眉の動き、感情表現、その他の顔面アニメーションと競合なく組み合わせることができます。
設定
リップシンク設定
- Standard (Faster) Model
- Realistic (Higher Quality) Model
Blend Runtime MetaHuman Lip Sync
ノードには、プロパティパネルに設定オプションがあります:
プロパティ | デフォルト | 説明 |
---|---|---|
Interpolation Speed | 25 | リップの動きがビジーム間を遷移する速さを制御。値が高いほど、より速く突然の遷移になります。 |
Reset Time | 0.2 | リップシンクがリセットされるまでの秒数。オーディオが停止した後にリップシンクが続くのを防ぐのに有用です。 |
Blend Realistic MetaHuman Lip Sync
ノードには、プロパティパネルに設定オプションがあります:
プロパティ | デフォルト | 説明 |
---|---|---|
Interpolation Speed | 30 | リップの動きが位置間を遷移する速さを制御。値が高いほど、より速く突然の遷移になります。 |
Reset Time | 0.2 | リップシンクがリセットされるまでの秒数。オーディオが停止した後にリップシンクが続くのを防ぐのに有用です。 |
笑い設定
Blend Runtime MetaHuman Laughter
ノードには独自の設定オプションがあります:
プロパティ | デフォルト | 説明 |
---|---|---|
Interpolation Speed | 25 | リップの動きが笑いアニメーション間を遷移する速さを制御。値が高いほど、より速く突然の遷移になります。 |
Reset Time | 0.2 | 笑いがリセットされるまでの秒数。オーディオが停止した後に笑いが続くのを防ぐのに有用です。 |
Max Laughter Weight | 0.7 | 笑いアニメーションの最大強度をスケーリング(0.0 - 1.0)。 |
リップシンクモデルの選択
プロジェクトに使用するリップシン クモデルを決定する際は、以下の要素を考慮してください:
考慮事項 | Standard Model | Realistic Model |
---|---|---|
キャラクター互換性 | MetaHumansと全てのカスタムキャラクタータイプ | MetaHumansのみ |
視覚的品質 | 良好なリップシンクと効率的なパフォーマンス | より自然な口の動きでリアリズム向上 |
パフォーマンス | モバイル/VRを含む全てのプラットフォーム向けに最適化 | やや高いリソース要件 |
使用ケース | 一般的なアプリケーション、ゲーム、VR/AR、モバイル | シネマティック体験、クローズアップキャラクターインタラクション |
ほとんどのプロジェクトでは、Standard Modelが幅広いキャラクタータイプをサポートしながら、品質とパフォーマンスの優れたバランスを提供します。Realistic Modelは、パフォーマンスオーバーヘッドが重要でない状況で、MetaHumanキャラクター