概要
- Deus Ex 1 のリップシンクとまばたき問題の修正Modの技術解説
- 問題の根本は Unrealscript 内のタイミングとブレンド処理の不具合
- Valveの Half-Life 2 との比較によるリップシンク技術の考察
- Unrealscript による具体的な修正内容とその限界点
- 改善点と今後の課題の整理
Deus Ex 1 リップシンク&まばたき修正Modの技術解説
- Deus Ex 1 のリップシンクとまばたきは発売当初から不具合が存在
- 2021年に Unrealscript を用いて修正Modを作成・公開
- オリジナルのリップシンクは 口の動きが不自然 で、まばたきもほぼ見えないほど高速
- 開発者Chris Nordenのインタビューから、当初は高度なリップシンク機能が存在したが、 パフォーマンスの都合で簡略化
- Half-Life 2のような 音声ファイルへの事前情報付与 (phoneme extraction)は未採用で、 リアルタイム解析 のため負荷が高かった可能性
リップシンク技術の仕組みと問題点
- リップシンクは 音声の中の音素(phoneme) を判定し、 口の形(viseme) にマッピングすることで実現
- Half-Life 2では オフライン解析 で音素情報を.wavファイルに付与し、効率化
- Deus Ex 1では リアルタイムで音素解析 していた疑い
- キャラクターの頭部モデルは 7種類のvisemeとまばたき アニメーションを持つ
- nextphoneme 変数により口の形を切り替え、 IsSpeaking 時のみ処理
Unrealscriptの不具合と修正内容
- アニメーションのブレンド時間(tweentime)の計算ロジックに フレームレート判定の逆転ミス
- 本来は高fps時にブレンド、低fps時はスナップ切り替えのはずが逆になっていた
- ブレンド時間も 0.1秒では速すぎ、 0.35秒 に変更し滑らかに
- IsSpeaking=false 時に口が即座に閉じる仕様→ 常時ブレンド処理 に変更し、自然な口閉じへ
- tweentime 初期値が0で顎がスナップ閉じ→ 0.3秒 に設定
- まばたきの頻度が高すぎたため、 間隔を大幅に拡大 し自然な動きへ
残る問題点と限界
- nextphoneme の更新頻度が低く、一定でないため、ブレンドが正しく機能しない場合あり
- Unrealscript外(C++側) での処理のため、現状は根本的な解決が不可
- プレイヤーキャラとNPCで 同様の関数が重複実装 されている構造上の非効率
修正後のUnrealscript概要
- フレームレート判定ロジックの削除、 tweentime の適正化
- IsSpeaking チェックの緩和で口閉じの自然化
- まばたき処理のタイミング見直し
- これにより 滑らかなリップシンクと自然なまばたき を実現
今後の課題
- nextphoneme の更新頻度を上げるには C++ソースコードへのアクセスが必要
- 音素解析を オフラインで事前処理 する仕組みが理想
- 現状のUnrealscriptの枠内では これ以上の改善は困難
ダウンロードリンクや詳細はTwitter投稿参照