【概要】作業全体の流れ
リップシンクの対応を行うには3Dのモデリングツールでリップシンク用のシェイプキーを作成した上で、Unityで設定を行う必要があります。
- BlenderやMaya等のモデリングソフトでリップシンクのシェイプキー(15種類)を作成
- Unityにモデルをインポートする
- VRChatに必要なセットアップ(AvatarDescriptorとAnimationController等の設定)をUnityで行う
- 表情とリップシンクの干渉等がある場合はAnimator Tracking Controlを割り当てる
【仕様】VRChatのリップシンク
ソースコードを見たわけではないのですが、おそらく内部的にはOVRLipSyncというライブラリが使用されていると思われます。
なので、より詳細な仕様が知りたければOVRLipSyncのドキュメントを見るのがいいです。
下記にリンクを掲載しておきます。
- oculus FOR DEVELOPERS:ネイティブ開発のためのOculusリップシンクの設定
【3Dモデル】シェイプキーの作成
VRChatのリップシンクに対応するには、BlenderやMaya等のモデリングソフトでOVRLipSyncが指定しているリップシンク用のシェイプキーを15個作成する必要があります。
(Blenderでシェイプキーを複製する方法があるので後述します)
作成しなければならない15個のリップシンク用のシェイプキーを示したリファレンスを下記に掲載します。
- oculus FOR DEVELOPERS:口形素のリファレンス
上記の画像はOVRLipSyncに含まれてるサンプルモデルとシェイプキー名の対応表です。
上記の画像に加えて、既存のVRChat向けアバターの口の形状も参考にできるとよいです。
1~15の番号はVRCAvatarDescriptorの表示を上から順に並べた時の並び順です。
バットノウハウ「あ・い・う・え・お の5個のキーを無理やり割り当てる」とか「頂点の変形の無いダミーキーを作成する」とか「作成してないキーは割り当てない」といった対応は推奨しません。
取り急ぎ問題なかったとしても、何かしらのエラーの原因になり得る可能性があります。その手のエラーは問題があっても動作自体は停止しない場合があり、いざエラーになった時に原因究明が難しい傾向にあります。
【3Dモデル】シェイプキーの推奨名
VRChatアバターの設定をする時の下記の条件を満たすシェイプキー名だと、設定の際に自動的に割り当てられます。(2022年7月時点の仕様)
自動割り当ての条件はVRCAvatarDescriptorEditor3LipSyncのソースコードを読むとわかります。
- 前方に「vrc.v_」か「v_」を含んで、後方に「sil」「PP」「FF」「TH」「DD」「kk」「CH」「SS」「nn」「RR」「aa」「E」「ih」「oh」「ou」を含むキー(完全一致で検索している。大文字と小文字は区別してない。)
- 「sil」「PP」「FF」「TH」「DD」「kk」「CH」「SS」「nn」「RR」「aa」「E」「ih」「oh」「ou」を含むキー(完全一致・後方一致・部分一致で検索してる。大文字と小文字は区別してない。)
「vrc.v_sil」や「v_sil」にすると間違いないですが、「Lip_sil」や「Mouth_sil」や「sil_Lipsync」でも問題なく自動で割り当てられます。
ただし、リップシンク以外のキー名に条件が一致するキーが含まれてると、想定外の割り当てになるのは少し意識したほうがいいと思います。
(リップシンクのシェイプキーの順番を下にするのであればシェイプキーの名称に「vrc.v_」か「v_」を含ませるのを推奨します)
バッドノウハウ「あ」「い」「う」「え」「お」等の全角文字を使った名称。VRChatでの利用を想定しているのにも関わらず上記の命名規則から大きく異る名称(上記の15音素に加えて追加のキーとして存在してる場合は例外)
【3Dモデル】Blenderでシェイプキーをコピーする方法
15個もキーを作るのは一見めんどくさくて大変そうですが、Blenderの場合だと既存のシェイプキー同士を組み合わせて新規のシェイプキーを作成する事ができます。
なので、ベースとなる口のシェイプキーを作った後は、組み合わせで15個分を埋めればOKです。
シェイプキーのパラメータを変更して作りたい形の口を作ってから、▽のマークからメニューを開いて「新規シェイプをミックスから作成」を押すと、現在のシェイプキーを結合したものが新規のシェイプキーとして作成されます。
【Unityでのセットアップ】モデルインポートする
モデリングソフトで15個のリップシンクのシェイプキーの作成が完了したら、以下の手順でUnityへ取り込んでセットアップの準備をしてください。
Sceneタブにモデルが表示されたら完了です。
- 3DモデルをFBXで書き出し
- FBXをUnityEditorでドラッグ&ドロップしてインポート
- Hierarchyにインポートしたモデルを配置
【Unityでのセットアップ】ブレンドシェイプの設定
- アバターのRoot(階層が一番上)のオブジェクトに「VRC Avatar Descriptor」を add Component する。
- 「VRC Avatar Descriptor」の「LipSync」の「Mode」を「Viseme Blend Shape」に設定
- 「Face Mesh」にリップシンクのシェイプキーを含むメッシュを割り当てる
- 各Visemeについては上記の推奨名に一致していれば自動で割り当てされますが、そうでない場合は手動でドロップダウンから対応するように設定してください。
【Unityでのセットアップ】表情のシェイプキーと干渉する場合の対策
特に設定してないと、笑顔で口を開けてる表情の状態で声を出すと、表情のキーとリップシンクのキーがブレンドされて破綻します。
対策方法は表情を制御しているAnimationControllerのステートに「Animator Tracking Control」を割り当てて「Mouth&Jaw」の設定を「Animation」に変更すればいいだけです。
このAnimator Tracking Controlがアニメーションに対してリップシンクやIKによる体の制御を優先するかどうかの設定を握っています。
この作業はハンドジェスチャーで表情が変更できる状態になったら行ってください。
表情を制御するAnimationControllerが作成された状態でないと設定できません。
1.表情制御をしているFXレイヤーのAnimationControllerを開く(別途、作成したもの)
2.リップシンクと干渉してほしくない表情を制御しているステートを選択します。
3.ステートを選択してInspectorに情報を表示します。「Add Behaviour」を押して「Animator Tracking Control」を追加して「Mouth&Jaw」のチェックボックスを「Animation」に変更します。
ここのステートが再生中の時はLipCyncが停止するようになります。
コメント