VSFAvatar
#VRM #VSeeFace #パーフェクトシンク
VSeeFace専用のVRMの拡張規格。これを使うと、VRChat向けアバターをシェーダーや揺れもの込でほぼそのまま移植することができる。
ドキュメントが少ないので日本語でまとめたい。(一応最低でもVRChatアバターをアップロードできるだけの知識がある状態を想定しています)
自身もUnityなんもわからんなので、詳しい人教えて下さい。
https://github.com/emilianavt/VSeeFaceSDK
https://www.youtube.com/watch?v=jhQ8DF87I5I
ちなみにこの機能を一番活用していて色々情報出してくれてるのはスヴィ(Suvidriel)さんのYouTubeチャンネル。
VSeeFaceの活用度合いがすごい!!!
できること
ブレンドシェイプにアニメーションを割り当てる
色々応用ができて、単にアニメーションの上書きだけじゃなくて、アバターの一部を消したりつけたり(ex耳のつけ外し)とか、カスタムカメラのオンオフといったちょっと変わったこともできます。
VRM標準以外のシェーダーの利用
シェーダーをMToonに置き換える必要がなくなります。
私はアイルロース2ベースで作ってますが、揺れもの含めて再現できるのでVRChatアバターの可愛いところ全部使えます!
DynamicBone/MagicaCloth/FinalIK などの特定のアセットの利用(詳しくはSDKを)
例えば揺れものをVRMSpringBoneに置き換える必要がなくなります。
あとはなんかスクリーンキャプチャとかも追加できるらしい。なんでもありですね。
カスタムカメラなどを追加できる
作り方
準備
最低限必要な環境(VSeeFace SDK v1.13.38 現在)
Unity 2019.4.31f1(本体バージョンアップで変わる可能性があるのでSDKのREADME要確認)
UniVRM 0.89
https://github.com/vrm-c/UniVRM/releases/tag/v0.89.0
VSeeFaceSDK
https://github.com/emilianavt/VSeeFaceSDK/releases/tag/v1.13.38
VRChatアバター移植にあるとよいもの
VRChat SDK
VRCアバターのインポートに必要
DynamicBoneのライセンス(アバターが必要としていれば)
移植にあると便利なスクリプト
CopyComponentsByRegex
DynamicBoneのコピーに使用
UnityCustomEditor_CopyDynamicBones
スケールが狂ってるときはこっちを使った気がするんですが記憶が曖昧
コンバート
VRMの形でUnityに読み込み直す(この辺はVRMのチュートリアルを参考にしてください)
(VRMではない場合)VRMとしてエクスポートします
VRMをインポートします
必要に応じてVRMとしてのメタデータを編集します
注意
HumanoidからVRMへエクスポートしてインポートをするときに、まれにスケールが変わったりしますので気をつけてください。
エクスポート(成果の出力)
メニューの「VSF SDK」より「Export Avatar Bundle」を選択して保存します
シェーダーの使い方
普通にVRChat向けアバターからマテリアル割り当てなおしてください。一般的なユニティちゃんトゥーンシェーダーなどが使えます。
使い回せるので楽!
それっぽいマテリアルを相当するオブジェクトにドラッグアンドドロップだけです。かんたん。
https://gyazo.com/41d0a7b36c91dd61295a767bbbaa8060
ブレンドシェイプの話
VRMでもできるテクニックなのですが、VSeeFace独自の機能ではあるので。
ブレンドシェイプを自作し、VRMアバターに設定することでアバター独自のシェイプキーアニメーションを有効にすることができます。
VRCアバターだとキラキラ目とかウィンクとかのシェイプキーアニメーションがあったりするかと思います。
設定方法はVRM公式をどうぞ
VSeeFaceでは 設定→表情設定 より、表情設定のメニューを呼び出せます。
https://gyazo.com/6d74e558f1a4f4a4d193ccdaba6fceb7
ホットキーで呼び出すキーを設定可能です。私はトグルで設定していますが、フットペダルなどを使ってる場合、それに割り当ててホールドで設定すればよいでしょう。
表情を上書きするもので例えばウィンクの場合瞬きで崩壊するアバターが多いと思いますが、気になるならばまばたきのトラッキングをオフにするなどの対策をするとよいでしょう。
あと、更に脱線するけど実験的な表情検出は本当にすごいので設定するべきです
参考:【使い方解説】VSeeFaceで笑顔になれ!Webカメでフェイストラッキングのすすめ。(朱鷺村伊鞠)
標準では Fun, Angry, Suprized しかできないのですが、実験的な表情検出ではFun, Angry, Joy, Sorrow, Suprizedの5つの表情を検出できます。
SuprizedはVRM標準にはない表情ですが、紆余曲折あって追加されたそうです。
DynamicBoneの移植
スケールが変わっていない場合はそのまま同じ値を入れればOKです
CopyComponentsByRegexでDynamicBoneといれればコピー可能
スケールが変わってるときはCopyDynamicBonesのような調整可能なスクリプトを使うと良かったと思います
プロジェクトには両方入ってるんですが、このあたりメモを取ってなくて曖昧です。
とりあえずプロジェクト作り直してみたところ、CopyDynamicBonesでうまくコピーできました
適用後、ダイナミックボーンが生成されて大きさとかが狂っていなければ成功です
アニメーションを追加して色々する
全部把握してるわけではないのでスヴィさんのチュートリアルをおいておきます
https://www.youtube.com/watch?v=FCaUKjC1EGY&list=PLD0oHCcDlFyLzQKwJuw5ptxTWn4sgwvXP&index=21
気が向いたら手順書きます
親となるVRMアバターのオブジェクトを選択し、インスペクタからAdd Copmponentsをして VSF_Animationsを追加します
https://gyazo.com/1a4f6367789ce90371432110aef05018
このときアバターの子要素とかに色々追加するためにプレハブを解凍しておくと便利です
https://gyazo.com/c62421f8f1aea614649b096b22494e88
(おまけ)しくみ
VRChatみたいなUnityのパッケージらしい。詳細はよく知らない。