【VRChat改変】Modular Avatarを使ってキメラを簡単に作成する方法!
2024/1/12 タイトルがわかりにくいというご意見がありましたので、キメラという言葉を含めて検索しやすいようにしました。
旧題
【Modular Avatar】顔のメッシュだけをモジュール化していろんなアバターに簡単に組み込む方法
新題
【VRChat改変】Modular Avatarを使ってキメラを簡単に作成する方法!
目次
はじめに
あけましておめでとうございます。₺ƾ₺ƾkesera2です。
新年最初のnoteとなります。
今年もいろいろ遊びながら見つけた技術的な知見をご共有できたらと思います。よろしくお願いします。
今回は顔のメッシュだけをモジュール化していろんなアバターに簡単に組み込む方法についてご紹介したいと思います。
背景としては、Blenderでこまどアバターに舌のボーンを入れて動かせるようにしていた際に、元の顔のメッシュを消して、舌のボーンが入った顔のメッシュだけアバター本体に入れて、Prehab Variantに反映できないかなぁと考えていたのがきっかけです。Twitterの投稿の画像のHead内にTongueというボーンがあるのはそのためだったりします。
自分の好きなアバターの対応衣装が少ないと嘆かれる昨今のVRChatにおいて、有名アバターのお体をお借りして着せ替えを楽しんでいる方も少なくないと思います。好きな衣装を着せるために複数のお体を持っている方も中にはいるかと思いますが、位置合わせとVRC Avatar Descriptorの修正だけで様々なアバターに付け替え可能なキメラアバターが簡単に作れるようになるので、そういう方には今回の記事がぴったりだと思います。
キメラ改変用のツールは色々あるかと思いますが、Modular Avatarを使った記事や改変はあまり見かけないので、それなりに需要があるかなと思いました。
今回はこまどアバターを例にご説明したいと思いますが、他のアバターでも応用できるかなと思います。まだ、研究が足りていない部分もあるので、各々で色々と発展させてみてください。
それでは、Modular Avatarを使った顔モジュールの作り方について見ていきましょう。
必要なもの
キメラ顔にしたいアバター
本体となるアバター
ゆにてぃと和解したい気持ち(プライスレス)
今回は、キメラ顔にしたいアバターをカリンちゃんとしました。
本体となるアバターはラスクちゃんにしたいと思います。
ステップごとの手順の説明
Modular Avatar対応のキメラ顔の顔モジュールの作成を以下の順番で説明したいと思います。
STEP:1 アバターのプレハブを顔だけにして不要なボーンやメッシュを削除STEP:2 Modular Avatarのコンポーネントを追加
STEP:3 アバター本体の顔のメッシュオブジェクトをEditorOnly、さらに、非表示とする
STEP:4 アバター本体のVRC Avatar Descriptorの修正
STEP:5 動作確認
STEP:6 作成した顔モジュールをプレハブ化する
STEP:1 アバターのプレハブを顔だけにして不要なボーンやメッシュを削除
顔のメッシュをモジュール化するために、必要なものだけ残して残りは削除していきます。
必要なもの
顔のメッシュ
HeadまでのArmature
Head内の顔のメッシュに関連するボーン(Cheek等)
(アバターに存在する場合)Right Eye、Left Eye
(アバターに存在する場合)HeadのPB Collider(要不要は各自で判断)
不要なもの
ケモミミ用のボーン
髪の毛のボーン
顔のメッシュ以外のメッシュ
不要なオブジェクトを削除する
(オプション)顔だけでなく髪型を残したい場合
作者の需要の都合上、顔のメッシュだけを移植できるようにしていますが、髪型も顔モジュールに含めたい場合は、顔のメッシュと髪型のメッシュ+髪型のボーンを残す形でご対応していただければ大丈夫です!
(オプション)Prefab Unpackせずに顔モジュールを作成したい
今回はわかりやすいようにPrehab Unpack & オブジェクトを削除して解説しますが、削除対象となるメッシュやボーンといったGame ObjectのTagを「Editor Only」にすることでも同等の効果が得られます。unitypackageでアバターのプレハブの更新を反映させたい方は、Tagを「Editor Only」にするやり方でも大丈夫です。
STEP:2 Modular Avatarのコンポーネントを追加
キメラ顔に付属している不要なコンポーネントを削除
本体となるアバターをヒエラルキーに追加
キメラ顔の表情メッシュをアバター本体に移動させる設定をする
STEP:3 アバター本体の顔のメッシュオブジェクトをEditorOnlyする
アバター本体の表情のメッシュオブジェクトの名前が、キメラ顔のアバターの表情のメッシュオブジェクトの名前と同じ場合、再生時に連番が付与され、表情が上手く動かないことがあります。その場合、アバター本体側の表情メッシュのTagをEditorOnlyにして再生・アップロード時に含まれないようにしておきます。
STEP:4 アバター本体のVRC Avatar Descriptorの修正
キメラ顔がVRChatで動作するように、VRC Avatar Descriptorを修正していきましょう。
LipSyncの表情メッシュの修正
この際、下記画像のように一部アバターでLipsSyncのブレンドシェイプの自動適用が失敗し、空欄になることがあります。
その場合、空欄になってるプルダウンを選択して、同じLipSyncのシェイプキーを手動で選択して修正してください。
Left/Right Eye Boneの修正について
Twitterの投稿時は、キメラ顔の方のEye Boneを指定すると記載しましたが、どうやらその場合、再生時(ビルド時)にボーンが統合されMissingになっているようでした。
結論から言うと、Eye Boneの名前が両者で同じ場合は、アバター本体側のEye Bonesの修正は不要です。
アバター本体側のEye Boneの名前とキメラ顔のEye Boneの名前が一致している状態だと再生時にもMissingにならなかったので、もし、Eye Boneの名前が両者で異なる場合、キメラ顔の方をアバター本体側の名前に統一するのがいいかと思います。
例えば、アバター本体側のEyeBoneの名前が LeftEyeBone/RightEyeBoneで、キメラ顔のEyeBoneの名前がLeftEye/RightEyeの場合、キメラ顔のEyeBoneの名前をアバター本体側のEyeBoneの名前と同じLeftEyeBone/RightEyeBoneに統一します。
Eyelidsの修正
View Positionの修正
忘れがちなのでキメラ顔の目線の高さになるように適宜修正していきましょう。
FXレイヤーの変更
FXレイヤーのコントローラーをデフォルトからカリンちゃんの表情を変更できるコントローラーにします。先述の表情メッシュをアバター本体に移動させる設定をしているので、表情アニメーションもMissingにならず、正しく動作するようになっています。
STEP:5 動作確認
GestureManagerをヒエラルキーに追加して再生してみます。この状態で動作します。キメラ顔の表情が動かせるようになっているかと思います。
(オプション)Anchor Overrideの設定
(オプション)表情の設定について
VRC Avatar DescriptorのFXレイヤーにキメラ顔で使用しているFXレイヤーを設定する場合は、この段階でキメラ顔の顔モジュールをプレハブ化しても大丈夫です。
アバター本体にキメラ顔を置いたときに、設定不要で表情もついでに動かせるようにしたい場合は、次の方法で表情を設定したあとにプレハブ化してください。
デフォルトの表情のFXレイヤーを仕込みたい場合
追加したMA Merge Animatorの設定を変更します。
統合されるアニメーターはキメラ顔となるアバターのFXレイヤーにします。
パスモードは相対的から絶対的に変更します。相対的のままだと表情がうごかない原因になります。
STEP:6 作成した顔モジュールをプレハブ化する
表情設定を含める場合と、表情設定を含めない場合がありますが、どちらもお好きなタイミングで、プレハブ化しておくと使い回しが効きやすいキメラ顔のモジュールになりますので、ここでプレハブ化しておきましょう。
前述のEditor Onlyで改変されている方は、プレハブの種類をPrehab Variantとしてプレハブ化しておくのが良いかと思います。
お疲れ様でした。これで顔をモジュール化できましたので、他のアバターに持っていくときも簡単にキメラ化することができるようになります。
発展と応用について
他のアバターに持っていく場合
表情をプレハブに含めている場合、基本的には、アバターに設置して位置合わせとすればそのまま使えるはずです。
表情をプレハブに含めていない場合は、上記とVRC Avatar DescriptorのFXレイヤーの設定さえできていれば簡単に移植できます。
表情が動かないときは、アバターと顔の表情メッシュのGameObjectの名前が被ってないかに注意してください。
FaceEmoを使って表情を作成する
キメラ顔のメッシュ(カリンちゃんで言うところのBody)をVRC Avatar DescriptorのFace Meshに正しく指定できている場合、FaceEmoも問題なく利用できます。
なお、FaceEmoの配置場所はアバタールートになるので、キメラ顔のプレハブに組み込むことができません。表情を共通化したい場合は、キメラ作成後のプレハブからPrehab Variantを作ると共通化できます。(FaceEmoを使った表情の共通化の説明については割愛します。需要があればまたnoteにします。拡散してね。)
表情メッシュの名前が同じ場合、複数の顔のメッシュをアバターに入れて切り替えることはできない
アバターの表情メッシュの名前が違う場合は、切り替えが可能です。
例)カリンちゃん表情メッシュ: Body ほかアバター表情メッシュ: Face
アバターの表情メッシュの名前が同じ場合は、基本的に切り替えができません。
(理由1)表情メッシュの名前が同じ場合、MA Bone Proxyで表情メッシュをアバターに移動した場合、連番が付与された名前が変わってしまいます。
表情のアニメーションを流用したい場合、アバターのルートのパスから顔の表情のメッシュを参照しているのでパスが通らなくなってしまいます。
(理由2)LipSyncで指定している顔のメッシュを切り替えられない
VRC Avatar DescriptorでLipSyncの値をアニメーションで変更できないか試してみたところ、Mode以外の変更を記録できないようでした。LipSyncを犠牲にすればできますが、無言勢の方以外は非推奨かもしれません。
やろうと思えばできるかと思いますが、各ファイルの修正だったり、動作確認だったりと、色々大変なので、顔モジュールごとにアバターを分けてしまうのが吉です。
トラブルシューティング
MA Merge Animator付きのプレハブの表情が動かない
パスモードが絶対的になっている必要があります。
アバターの表情が動く原理を考えてみると、表情アニメーションは、アバタールート配下の表情メッシュのブレンドシェイプに対してアニメーションパスが通るような形でアニメーションが作成されています。BoneProxyでキメラの表情メッシュをアバタールートに移動させているのはその為です。
パスモードを絶対的にしているとアバタールートからModular Avatarが自動的に計算して再生/ビルド時にキメラ顔の表情アニメーションのアニメーションパスがアバター本体のルートから通るようにしてくれます。
Unity再生時にVRC Avatar DescriptorのLip Sync > Face MeshがNoneになってしまう場合
VRC Avatar Descriptorが編集を覚えていてくれていない可能性があるので、シーンを保存したり、本体となるアバターを一度プレハブ化してみたりすると治ります。
LipSyncが自動検出されない
もしFace Meshを指定してもBlend Shapeが自動で検出されず、再生時にも自動検出されない場合、手動でLipSyncを設定する必要があります。
最後に
ここまで読んでいただきありがとうございました。無事にModular Avatarでを使った顔モジュールをご作成できましたでしょうか。
Unity初心者でもわかりやすいようにUnityからキャプチャした画像を多めに使用してみました。もし、質問などがあれば、X(Twitter)のリプライからご質問ください。
ここでいくつか宣伝させてください。
BOOTHでアイテムを無料で公開しています
Animator Controllerの設定に役立つツールや抱っこシステム、おもちちゃんこうめちゃんのSDK3プレハブなどを公開しています。
Modular Avatarを使った改変について解説しています
Modular Avatarを使った改変についてステップごとに解説しています。今でも時々反応いただけるので、感謝しています。
アバター改変ツールVRC Furyを日本語で解説しています
Modular Avatarで毎回アニメーションを録画したりメニューグループの作り方に悩んでいる方に朗報です。このツールはModular Avatarと同じコンポーネントを追加するだけで非破壊でON/OFFのメニューを作ったり、メニューからマテリアルを変更したりする機能を作成できます。ぜひご一読ください。
著者: ₺ƾ₺ƾkesera2( Twitter: https://twitter.com/kesera2_vrc )
文字数: 約5200文字
執筆時間: 5時間