OVRLipSync
Oculusのリップシンク
OVRLipSync自体は昔使ったことがある。
ただ、VRMには適用したことなかった。
なんかVRMとORLipSyncを変換するものが必要らしい
VRM+リップシンクのサンプルスクリプトなど
VRMLipSyncContextMorphTarget
OVRLipSyncを使ったシンプルなスクリプト1枚
VRMLipSync_CorrespondOVRLipSync
ねこますさんの
ご本人による解説記事
VRMLipSyncSample
SALSAというリップシンクアセットを使ったバージョンとOVRLipSyncを使ったもの両方ある
昔はOVRLipSyncがiOSに対応していなかったのでSALSAを使うしかなかったぽい
だがOVR1.36.0でiOSサポートしたので、SALSAを使う必要はないかも
OVRLipSyncで動かす
過去のOVR記事を見ると微妙に使用が違ったりする。
OVRLipSyncのアップデートによるもの。こちらが詳しい
ここからOVRLipSyncをダウンロード。私は最新版1.43.0をダウンロードした
使い方の記事。VRM用には一番上で紹介したスクリプトを使っている。
設定
下の3つのスクリプトをつける。モデル本体である必要はなく、空のオブジェクトに付けた
OVRLipSyncContextMorphTargetのSkinnedMeshRendrerにVRMのFaceを指定。
すると勝手に音のところにBlendShapeがセットされるが正しくない
とりあえずaa E ih oh ouにはAEUOUAをセットしたけど、他のところを空にできない
MTH_CLoseを選べば口閉じそう。とりあえずこんな感じにしてみた。
この状態で実行。しゃべると反応する。VRMとOVRを変換するスクリプト付けなくていいのか?
無音の時の表情
無音のとき意図せぬ変な顔になる。FunがMaxになってた。
他の記事では怒り表情になるって書いてた。
注意点としては、アニメーションで上書きされることを防ぐために、OVRLipSyncContextMorphTargetのUpdate()をLateUpdate()に変更することが必要となることです。
また、OVR Lip Sync Context Morph Targetをデフォルトのままにしていると怒り顔がデフォルトになってしまうのでViseme To Blend Targetsの各要素を指定しなおしましょう。(私は要素0を26にしました。)
MorphTarget全部変えているんだけどなー
VRM
坪倉さんのVRMLipSyncContextMorphTargetを付けて、OVRLipSyncContextMorphTargetを消す。LipSyncContextにOVRLipSyncContextをセット
GitHub - TsubokuLab/VRMLipSyncContextMorphTarget: OVRLipSyncでVRMモデルのリップシンクをさせるシンプルなやつ。
すると変な表情もならないし、モーフは勝手にスクリプトの中で設定してくれる!
sotanmochiさんのVRMLipSyncMorphTarget.csのほうもつけてみた
同じように動いた。
こちらはVRMアバターについているBlendShapeを付ける必要がある。
坪倉さんのはシーンにあるBlendShapeを取得する
proxy = FindObjectOfType<VRMBlendShapeProxy>();
最後に
OVRだけでもできるけど、VRM用のを使ったほうが良さそう