コンテンツにスキップ

ARKit 52表情カーブ・Curve Profile・Viseme変換

v0.3.0 · UE 5.8.2 / Windows x64

LAM Audio2Expressionは標準順の52カーブを出力します。キャラクターのMorph Target名と一致させるか、既存リグでカーブ値を利用します。

Apply LAM ARKit CurvesのAlphaは0〜1で、入力ポーズに対する表情の強さを調整します。自分のメッシュで口が動かない場合は、まずjawOpenの名前とMorph Targetの存在を確認してください。

LAMCurveProfile Data Assetを作成し、ノードのCurve Profileへ指定すると、カーブごとに次を設定できます。

設定 用途
名前変換 キャラクター固有のMorph Target名へ対応付ける
無効化 適用したくないカーブを除外する
倍率 表情の動きの大きさを調整する
オフセット 推定値に一定量を加える

未指定のカーブは標準名のまま有効です。補正後の値は0〜1に制限されます。

最終値 = lerp(入力カーブ,
clamp(推定値 * 倍率 + オフセット, 0, 1),
Alpha * Weight)

無効にしたカーブとボーン姿勢は変更しません。Weightには停止時のフェードなどが反映されます。停止後は100 msで入力ポーズへ戻り、一時停止では現在の表情を保持します。

Curve ProfileのSource NameとTarget NameはjawOpen、Enabledは有効、Scaleは0.8、Offsetは0.0。

Curve ProfileでjawOpenを調整する例 · 原寸画像を開く

  1. Source NameはLAMのカーブ名、Target Nameはキャラクター側の名前です。
  2. この説明用ルールではEnabledを有効にし、Scale 0.8、Offset 0.0にしています。

0.8は撮影用の調整例で、すべてのキャラクターに共通の推奨値ではありません。作成したProfileをAnimGraphノードへ指定してください。

撮影 2026-09-30 · UE 5.8.2 · Plugin 1860d0e · Demo 9dee71d · v0.3.0に含まれる操作。

設定 既定値と意味
Style 0。上流モデルの話者スタイル番号、0〜11
Smooth 有効。5フレームのSavitzky–Golay平滑化と境界補間
Suppress Silent Mouth 有効。RMS 0.001未満が7フレーム続く区間で口の動きを抑制
Symmetrize 無効。左右対称化
Auto Blink 無効。音声からの推定ではなく、追加の瞬き演出
Blink Seed 自動瞬きの再現に使用する乱数シード

Styleは上流学習モデルの番号であり、喜怒哀楽の指定ではありません。まず既定設定で接続を確認し、キャラクターに合わせてProfileの倍率やマスクを調整します。

Style 0、SmoothとSuppress Silent Mouthを有効、SymmetrizeとAuto Blinkを無効、Blink Seed 1234にした生成設定。

Clipに保存する解析設定 · 原寸画像を開く

  1. Styleは0〜11の話者スタイル番号です。感情名ではありません。
  2. SmoothとSuppress Silent Mouthは有効、Symmetrizeは無効の例です。
  3. Auto Blinkは無効。Blink Seed 1234は自動瞬き用のシードです。

設定後、ダイアログ下部のGenerateを押します。この生成ダイアログはv0.3.0に含まれます。

撮影 2026-09-30 · UE 5.8.2 · Plugin 1860d0e · Demo 9dee71d · v0.3.0に含まれる操作。

約2.13秒の固定窓を1秒ずつ進めて解析し、表情を30 fpsのカーブ列として出力します。後処理は時系列全体へ適用します。上流デモのランダムな出力をそのまま再現する仕組みではありません。

出力カーブをControl Rigやボーン駆動へつなぐことはできますが、任意のリグへの自動リターゲットは行いません。Blueprint接続と検証範囲を参照してください。

5母音・Oculus互換Visemeへ変換する

「5母音・Oculus互換Visemeへ変換する」へのリンク

v0.3.0に含まれる機能です。 Apply LAM Viseme Curvesは補間後のARKit 52フレームを5母音またはOculus互換15枠へ変換します。SoundWaveの動的解析・保存済みClip・ライブ入力で使え、追加モデル・Oculus SDK・再解析は不要です。口形状の変換であり、音素認識ではありません。公開仕様・2026-09-30確認

  1. ニュートラルな口形状と必要なMorph Targetを持つメッシュを用意します。任意キャラクターのモーフを自動生成する機能ではありません。
  2. Show Plugin Contentを有効にし、/LAMAudio2Expression/Profiles/のProfileをプロジェクトへ複製します。Target Namesを実際のMorph Target名に合わせます。Noneは書き込みません。
  3. AnimGraphで元のポーズ → Apply LAM Viseme Curves → Output Poseと接続します。Profileを指定し、ActorのLAMコンポーネントをSource Componentへ渡します。空欄なら所有Actorから検索しますが、複数ある場合は明示してください。
  4. 一時停止・シーク・停止・中立口形状と自分の音声で確認します。存在しないモーフ名へカーブを出してもメッシュは変形しません。
Profile 変換方式・対象モーフ
DA_JapaneseFive FiveVowelRules。初期名はA/I/U/E/O
DA_OculusReference / DA_OculusSDK 15枠の名前を持つFiveVowelRules。子音9枠は常に0
DA_OculusOpenFaceFX TemplateFit。OpenFaceFX配合、ih/oh/ouなどのSDK名
DA_OculusTalkingHead TemplateFit。TalkingHead配合、viseme_I/viseme_O/viseme_Uなどの接頭辞付き名

出力名と変換方式は独立した設定です。5母音だけのメッシュはFiveVowelRulesを使います。Profile未指定時は既定の5母音設定とA/I/U/E/O名を使用します。FiveVowelRulesは中立時のInput Corrections → Activation → Width / Roundness / OpenSplit → Vowel Gainsの順に調整します。形状による近似で、モデル横断の発音精度を保証するものではありません。

目・眉もLAMで動かす場合はARKitノードにDA_UpperFaceOnlyを指定します。

元のポーズ
→ Apply LAM ARKit Curves (DA_UpperFaceOnly)
→ Apply LAM Viseme Curves (キャラクター用Profile)
→ Output Pose

UpperFaceOnlyはjaw*・mouth*・tongueOutの書き込みを無効化します。入力ポーズにすでに存在する口カーブを消去する設定ではありません。 全ARKitノードやSet Morph Targetで同じ口を同時制御しないでください。一時停止では保持、シークでは新しい時刻に追従し、停止ではコンポーネントの100 msフェードで入力ポーズへ戻ります。変換による追加の時間平滑化はありません。

ConversionMode=TemplateFitは、選んだ順方向の配合へ非中立14重みを当てはめます。各値は非負、合計は1以下です。silは残余の1 − 合計であり、音声の無音検出ではありません。中立用モーフが不要ならTarget NameをNoneにします。

tongueOutなど未供給の入力はInput Corrections → FitWeight=0にします。Scale=0では「観測した値が0」という意味になります。出力14枠の倍率はViseme Gainsで調整し、silの倍率は無視されます。Vowel Gainsと開口・横幅・丸みの閾値はFiveVowelRules専用です。変更後はValidate AssetsでProfileを検証してください。

両テンプレートの行列はランク11で、14重みを常に一意に逆算できません。TalkingHeadのCHとRRは同一配合で、倍率適用前に均等配分します。笑顔などの表情も口形状へ影響します。TemplateFitは形状近似であり、Oculusの音声推論の再現や、発話した子音の確実な識別ではありません。固定配合と詳細な制約を参照してください。

Get Current Expression Frame
→ Convert ARKit To Visemes (Frame, Profile)
→ Get Vowel Weights / Get Viseme Weight

15枠の順序はsil, PP, FF, TH, DD, kk, CH, SS, nn, RR, aa, E, ih, oh, ouで固定です。独自適用ではbValidを確認し、Valuesには未適用のWeightとAlphaを一度だけ掛けます。無効フレームはsilを含む15個の0です。外部ARKit入力はGet ARKit Curve Namesの順に52個の有限値を設定し、有効な時刻・Weight等も渡してください。

デモアセットと配布版の検証も参照してください。配合データとMIT表記はプラグインに同梱されますが、OpenFaceFX・TalkingHead・Blender・Oculusのランタイムは不要です。クレジット

ライセンス・クレジット · デモのソース