アニメーション再生方式のリップシンク
NEOKETでのリップシンクは音声を検出したら口のモーフと体のアニメーションが再生されるという方式でした(VRではどうだったんだろう?)
あとアバターの上にしゃべっているマークも出てて分かりやすくて良かったですね。
こういう方式は初めて見ました。正確なリップシンクにしないという方法もあるのか~
でもそれって、モーフ名が同じじゃないと用意したアニメーションはできないのかな?
VRM共通のやつでできるのかな?
なんかVroidStudioと同じシェイプキーじゃないと動かない情報も
NEOKETの公式情報では、シェイプキーは一切使用されないとのことでしたが、VRoid Studioと同一のメッシュとシェイプキー名(もしくは順序?)のリップシンク用シェイプキーがあると動作するらしいです。 #NEOKET
— 100の人 (@esperecyan) 2021年1月30日
やってみる!
こちらの記事を参考に、VRMで共通で設定されているBlendShapeのパラメーターの数字を変えて簡易的なアニメーションを作れました。
スクリプトからBlendeShape変更
また変わってた。SetValueの中にCreateFromPresetというのが推奨だって。
proxy.SetValues(new Dictionary<BlendShapeKey, float>
{
{BlendShapeKey.CreateFromPreset(BlendShapePreset.A), 1f}, // [0, 1] の範囲で Weight を指定
{BlendShapeKey.CreateFromPreset(BlendShapePreset.Joy), 1f}, // システム定義の表情は enum で指定
{BlendShapeKey.CreateUnknown("USER_DEFINED_FACIAL"), 1f}, // ユーザ定義の表情は string で指定
});
昔はImmediatelySetValueが推奨。さらに昔はSetValueだった。
blendShapeProxy.(BlendShapePreset.A, 0~1の数値);
Updateでやるなとか突っ込みどころはあるけど一旦動く。
_A_Valueの値を0~1の範囲でアニメーションなどで変えたら口パクする
これをVRMに貼る
アニメーション作る
Animationウィンドウを開く
VRMを選択した状態でCreate。名前を付けて保存
AddPropertyからさっき作ったスクリプトのValueを+
0,1,0,1って値変えていく。キーを選択して値を変えるだけじゃなく、線もその時間のところに移動させないと値が変わらない気がする
遷移Animator作る
VRM選んだ状態でAnimationClip作ったら勝手にモデル名と同じAnimatorが作成されてた。でも使いにくいから新しく作った
これをVRMに付けて再生すると、例の沈んだ体になった状態でパクパクする
これになるのってアニメーションがHumanoidじゃないからだと思うけど、パラメーターだけのアニメーションをHumanoidにするのってどうするんだ??
レイヤー設定
AvatarMaskというのを使えばできた!と思ったら別にAvatarMaskはいらなかった。
レイヤーを分ければいいだけだった。
でもメモしておく
Create>AvatarMask作成。顔だけ緑にする
Animatorで新しいレイヤー作って、さっきのマスクを設定、Weightを1にする
新しいレイヤーのほうにリップシンクのアニメーション。
BaseのほうはWalkとかIdelとかデフォルト用のアニメーションを設定しておく。
これで歩きながら口パクできた!!
トリガー設定
今のままだとずっとパクパクするので、トリガーをOnにした時だけ口パクするようにする
まずParameterを作って置く
LipSyncレイヤーのほうに空のStateを作り、そこからリップシンクへ遷移させる
遷移の入るほうはHasExitTimeのチェックを外し、即遷移するようにする。あとConditionsでトリガー設定
出ていくほうはHasExitTimeにチェックを入れる。口パクアニメーションが終わったら自動で出ていく。
これでTriggerをスクリプトやボタンなどからオンにしたら、口パクアニメーションが再生される~~~やったー!!
Trigger
Triggerのオンはスクリプトだと
AnimatoeController.SetTrigger("トリガー名");
Animator-SetTrigger - Unity スクリプトリファレンス
ーーー
とりあえずボタンから簡易的にやる方法だとこの設定でノンスクリプトでできる
口パク回数
作ったアニメーション自体は2回口パクするやつだけど、Animatorの出ていくときのTransition設定で、ExitTimeを増やして再生回数を増やせば増える。
最後に
アニメーション分からない・・・でも新しいこと知れた。アバターマスクは今回は必要なかった。