- 2021年に制作された Deus Ex 1 のリップシンクとまばたきを改善する MOD の解説
- 開発者は、原作ゲームの リップシンク実装 が発売当初から正しく動作していなかったことを発見
- Valve の Half-Life 2 に似た方式の音素抽出と口形状マッピングが Deus Ex にも適用されていることを分析
- Unrealscript コード 内の誤ったフレームレート判定とブレンディングのタイミングの問題を修正し、自然なアニメーションの実現に成功
- 完全な実装のためには 音素更新頻度 の問題解決がさらに必要
紹介と背景
- 本MODは Deus Ex 1 のキャラクター音声におけるリップシンクとまばたきアニメーションを改善するプロジェクト
- 原作ゲームでは リップシンク動作とまばたきが発売時点から正常に実装されていない
- 自身の Twitter で公開していた作業内容を整理して紹介
- MOD のダウンロードは別リンク(ModDB)で提供
既存のリップシンク実装の調査
- ゲームプレイ中に、リップシンクの 口形状の切り替え問題 と奇妙なアニメーション現象を確認
- Chris Norden(Deus Ex 開発者)のインタビューを参照: 初期のリップシンクシステムは精巧だったが、性能上の理由で簡略化された
- Unrealscript 側でどこまで実装されているか、また修正可能かを検討
- ソースコードはなく、スクリプトのみにアクセス可能
リップシンクの動作原理
- 筆者は以前に Half-Life 2 のリップシンクシステムを分析した経験がある
- Valve は 音声ファイルの音素(phoneme)を抽出 して言語情報を .wav ファイル末尾に付加し、実行時にそのタイミングに合わせて 口形状(viseme)を切り替える 方法を使用
- この方式は事前の音素抽出により、実行中の負荷を減らせる利点 がある
Deus Ex の構造的問題
- Deus Ex では音素情報がどこにも 保存されておらず、実行時にリアルタイム抽出 している可能性がある
- Unrealscript の分析結果では、skeletal animation ではなく vertex animation ベースで、計7種類の口形状と1種類のまばたきアニメーションしか提供されていない
- 外部オーディオシステムから nextphoneme が A, E, F, M, O, T, U または X(口を閉じた状態)として指定され、キャラクタースクリプトがそれに応じて口形状を切り替える
バグと改善作業
- 原作コードでは フレームレート判定ロジックが逆に動作 しており、高フレームレートでも口形状が即座に切り替わっていた
- ブレンディング継続時間(tweentime)が 短すぎる(0.1秒) ため、自然な移行感が失われていた
- フレームレートチェック条件を 無視し、tweentime を十分長い 0.35秒 に調整
- その結果、リップシンクが滑らかにつながる ようになった
口を閉じる処理とまばたき処理
- セリフ終了後に口を閉じる際にも 自然なブレンディングを適用 するため、追加ロジックを挿入
- アニメーションロジックが bIsSpeaking だけをチェック していたが、常にリップシンクアニメーションが動作するよう改善
- まばたき速度 も調整し、ユーザーが継続的に認識できるようにした
構造的限界と惜しい点
- nextphoneme の更新頻度 自体が不規則で、毎 tick ごとに更新されないという構造的限界がある
- その結果、すべてのブレンディングを適切に適用しても 完璧なリップシンク体験は不可能
- もし一定頻度で更新されるなら、それに合わせてブレンディング速度を最適化できるが、現状の構造では不可能
- NPC とプレイヤーキャラクターのクラスに同一ロジックが 重複実装 されているなど、コード上の非効率も存在
最終修正のコード例
- 本文下部で 改善後のリップシンク関数の全コード を提供
- 主な改善点: フレームレート判定の無視、tweentime の大幅増加、セリフ終了後の滑らかな口閉じ、まばたき頻度と速度の調整
結論
- 本MODを使えば、原作よりもはるかに自然で改善されたリップシンクとまばたきアニメーション を体験できる
- 構造的制約により 完全なリップシンク は難しいが、現時点で実現可能な最善の解決策
まだコメントはありません。