こんにちは。
リップシンクを試してみました。リップシンクとは、映像作品、アニメーション作品に登場する人物の口の動きとセリフを合わせることです。Python+OpenCVでしてみたかったのですが、まずはすぐに試せそうでメジャーなUnityで行いました。キズナアイというかわいいモデルでリップシンクを行います。ちなみにUnityを使うのは初めてです。
前提
Unityを初めてインストールしていきなりキズナアイでリップシンクしたいという、めちゃくちゃ限られた人向けに記事を書きます。
本記事はこちらの記事を真似したものですが、Unity初心者には「え?どうやってしたの??」がありましたのでその辺りを細かく記事にしていきます。
- Windows10にUnity2020.1.2f1インストール済
- OVRLipsyncプラグインダウンロード済
- 3Dモデルデータ(ここではキズナアイ)ダウンロード済
- MMD4Mecanimスクリプトダウンロード済み
3Dモデリングデータ(PMS→FBS)変換
キズナアイダウンロードページでダウンロードした3DモデリングデータはPMX形式ですので、Unityで使えるFBX形式に変換する必要があります。以下にページにしてその手順を記載しましたので実施して下さい。
Unity+3DModel+OVRLipSync導入
ダウンロードした「OculusLipSync.unitypackage」をD&Dするとダイアログが表示されるので「Import」します。
左上の「+」を選択して「Create Empty」を選択。
GameObjectが出来上がります。
GameObjectを選択した状態で右にある「Add Compornent」で「OVR Lip sync」を加えます。
「kizunaai」を選択した状態で「Add Compornent」で「OVRLipSyncContext」、「OVRLipSyncContextMorphTarget」を加えます。
追加したコンポーネントのパラメータを変更します。「OVRLipSyncContextMorphTargetーSkinnedMeshRenderer」を「U_char_1」(頭のパーツ)にします。
次に「OVRLipSyncMorphTargetーVisemeToBlend」に次のインデックス番号を指定します。
こちらに変更
また「kizunaai」を選択した状態で「Add Compornent」で「OVRLIpSyncMicInput」を加えます。
最後にプロジェクトの中の「Assets\Oculus\LipSync\Scripts\OVRLipSyncContextMorphTarget.cs」ファイルのUpdate部分をLateUpdateに書き換えます。
/// <summary> /// Update this instance. /// </summary> void LateUpdate () { if((lipsyncContext != null) && (skinnedMeshRenderer != null)) { // get the current viseme frame OVRLipSync.Frame frame = lipsyncContext.GetCurrentPhonemeFrame(); if (frame != null) { SetVisemeToMorphTarget(frame); SetLaughterToMorphTarget(frame); } // TEST visemes by capturing key inputs and sending a signal CheckForKeys(); // Update smoothing value if (smoothAmount != lipsyncContext.Smoothing) { lipsyncContext.Smoothing = smoothAmount; } } }
あとはMainCameraをキズナアイにぐぐーっと近づけます。
実行します。
完成~
音ありませんが、、一応私の声に反応してくれています。かわいいですね~。なるほど~。Vtuberさんの気持ちが少し分かった気がします。
コメント