見出し画像

【VRChat改変】Modular Avatarを使ってキメラを簡単に作成する方法!

2024/1/12 タイトルがわかりにくいというご意見がありましたので、キメラという言葉を含めて検索しやすいようにしました。

旧題
【Modular Avatar】顔のメッシュだけをモジュール化していろんなアバターに簡単に組み込む方法

新題
【VRChat改変】Modular Avatarを使ってキメラを簡単に作成する方法!

目次


はじめに

あけましておめでとうございます。₺ƾ₺ƾkesera2です。

新年最初のnoteとなります。
今年もいろいろ遊びながら見つけた技術的な知見をご共有できたらと思います。よろしくお願いします。

今回は顔のメッシュだけをモジュール化していろんなアバターに簡単に組み込む方法についてご紹介したいと思います。

背景としては、Blenderでこまどアバターに舌のボーンを入れて動かせるようにしていた際に、元の顔のメッシュを消して、舌のボーンが入った顔のメッシュだけアバター本体に入れて、Prehab Variantに反映できないかなぁと考えていたのがきっかけです。Twitterの投稿の画像のHead内にTongueというボーンがあるのはそのためだったりします。

自分の好きなアバターの対応衣装が少ないと嘆かれる昨今のVRChatにおいて、有名アバターのお体をお借りして着せ替えを楽しんでいる方も少なくないと思います。好きな衣装を着せるために複数のお体を持っている方も中にはいるかと思いますが、位置合わせとVRC Avatar Descriptorの修正だけで様々なアバターに付け替え可能なキメラアバターが簡単に作れるようになるので、そういう方には今回の記事がぴったりだと思います。

ライム x ラスク カリン x ライム ラスク x カリン

キメラ改変用のツールは色々あるかと思いますが、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(要不要は各自で判断)

不要なもの

  • ケモミミ用のボーン

  • 髪の毛のボーン

  • 顔のメッシュ以外のメッシュ

不要なオブジェクトを削除する

まず、不要なオブジェクトを削除できるようにするためにプレハブをUnpack Prehabします。
表情メッシュ以外を削除します
削除しました
不要なボーンやPhysboneを削除します
削除しました

(オプション)顔だけでなく髪型を残したい場合

作者の需要の都合上、顔のメッシュだけを移植できるようにしていますが、髪型も顔モジュールに含めたい場合は、顔のメッシュと髪型のメッシュ+髪型のボーンを残す形でご対応していただければ大丈夫です!

hairとkemomimiのメッシュ、Ear_LRとHair_XXとAhogeを残しています

(オプション)Prefab Unpackせずに顔モジュールを作成したい

今回はわかりやすいようにPrehab Unpack & オブジェクトを削除して解説しますが、削除対象となるメッシュやボーンといったGame ObjectのTagを「Editor Only」にすることでも同等の効果が得られます。unitypackageでアバターのプレハブの更新を反映させたい方は、Tagを「Editor Only」にするやり方でも大丈夫です。

STEP:2 Modular Avatarのコンポーネントを追加

キメラ顔に付属している不要なコンポーネントを削除

Animator, VRC Avatar Descriptor, Pipline Managerは顔モジュールには不要なので削除します

本体となるアバターをヒエラルキーに追加

Ruskをヒエラルキーに追加しました
キメラ顔のオブジェクト(Karin)をアバター本体側(Rusk)に移動させました
キメラ顔のオブジェクト(Karin)を使って位置合わせしました
キメラ顔のアバター(Karin)のルートを右クリック > Modular Avatar > Setup OutfitでArmatureをアバター本体に追従させます。
Armatureに自動的に付与されるMA Merge Armatureですが、真ん中の片方向にしておくと、編集時にアバター本体のボーンが動いたときでもキメラ顔のオブジェクトが追従するようになります。

キメラ顔の表情メッシュをアバター本体に移動させる設定をする

キメラ顔の表情オブジェクトを選択してAdd ComponentからMA Bone Proxyを追加します。
ターゲットとして、アバター本体のルートを指定するようにしておきます。
配置モードは「子としてワールド位置と向きを維持(デフォルト)」にしておきます。

STEP:3 アバター本体の顔のメッシュオブジェクトをEditorOnlyする

アバター本体の表情のメッシュオブジェクトの名前が、キメラ顔のアバターの表情のメッシュオブジェクトの名前と同じ場合、再生時に連番が付与され、表情が上手く動かないことがあります。その場合、アバター本体側の表情メッシュのTagをEditorOnlyにして再生・アップロード時に含まれないようにしておきます。

こまどアバターは表情メッシュの名前が共通なので、
アバター本体側の方のTagをEditorOnlyとしました

STEP:4 アバター本体のVRC Avatar Descriptorの修正

キメラ顔がVRChatで動作するように、VRC Avatar Descriptorを修正していきましょう。

LipSyncの表情メッシュの修正

VRC Avatar Descriptor > LipSync > FaceMeshをキメラ顔の表情メッシュにします

この際、下記画像のように一部アバターでLipsSyncのブレンドシェイプの自動適用が失敗し、空欄になることがあります。

Viseme: PP, FF, THなどが空欄になってしまった

その場合、空欄になってるプルダウンを選択して、同じLipSyncのシェイプキーを手動で選択して修正してください。

Visume:PPにはvrc.v.ppを指定する。他の空欄についても同様で、ppといった発音記号が同じものを選択してください。
修正後

Left/Right Eye Boneの修正について

Twitterの投稿時は、キメラ顔の方のEye Boneを指定すると記載しましたが、どうやらその場合、再生時(ビルド時)にボーンが統合されMissingになっているようでした。

再生時にLeft/RIght Eye BoneがMissing (Transform)になっている

結論から言うと、Eye Boneの名前が両者で同じ場合は、アバター本体側のEye Bonesの修正は不要です。

アバター本体側のEye Boneの名前とキメラ顔のEye Boneの名前が一致している状態だと再生時にもMissingにならなかったので、もし、Eye Boneの名前が両者で異なる場合、キメラ顔の方をアバター本体側の名前に統一するのがいいかと思います。

例えば、アバター本体側のEyeBoneの名前が LeftEyeBone/RightEyeBoneで、キメラ顔のEyeBoneの名前がLeftEye/RightEyeの場合、キメラ顔のEyeBoneの名前をアバター本体側のEyeBoneの名前と同じLeftEyeBone/RightEyeBoneに統一します。

アバター本体側のEyeBoneの名前が LeftEyeBone/RightEyeBone
キメラ顔のEyeBoneの名前がLeftEye/RightEye
リーフボーンを含めて
アバター本体側のEyeBoneの名前と同じLeftEyeBone/RightEyeBoneに統一する
再生時にLeft/Right EyeBoneが統合されていますが、参照としては正しくできているようです。

Eyelidsの修正

アバターによってはEyelids Meshの設定がありますので、そちらもキメラ顔のアバターの表情メッシュにします

View Positionの修正

忘れがちなのでキメラ顔の目線の高さになるように適宜修正していきましょう。

FXレイヤーの変更

FXレイヤーのコントローラーをデフォルトからカリンちゃんの表情を変更できるコントローラーにします。先述の表情メッシュをアバター本体に移動させる設定をしているので、表情アニメーションもMissingにならず、正しく動作するようになっています。

STEP:5 動作確認

GestureManagerをヒエラルキーに追加して再生してみます。この状態で動作します。キメラ顔の表情が動かせるようになっているかと思います。

Karin_FXの表情が再生されています

(オプション)Anchor Overrideの設定

アバターにAnchor Targetが用意されている場合、キメラ顔の表情メッシュのSkinned Mesh RendererのAnchor Overrideにアバター本体のアンカーを設定しましょう。

(オプション)表情の設定について

VRC Avatar DescriptorのFXレイヤーにキメラ顔で使用しているFXレイヤーを設定する場合は、この段階でキメラ顔の顔モジュールをプレハブ化しても大丈夫です。

アバター本体にキメラ顔を置いたときに、設定不要で表情もついでに動かせるようにしたい場合は、次の方法で表情を設定したあとにプレハブ化してください。

デフォルトの表情のFXレイヤーを仕込みたい場合

顔モジュールにMA Merge Animatorを追加します

追加したMA Merge Animatorの設定を変更します。
統合されるアニメーターはキメラ顔となるアバターのFXレイヤーにします。
パスモードは相対的から絶対的に変更します。相対的のままだと表情がうごかない原因になります。

カリンの表情に対応しているコントローラーを追加しました
次にMA Parametersを追加します
アバターによってはパラメーターが色々あるかと思います。
同期が必要なパラメーターがある場合、プレハブ開発者向け設定を表示します。
衣装のON/OFF等のパラメーターは不要ですが、表情に関係するものについては必要に応じて追加して「同期する」にチェックが入る状態にしてください。

STEP:6 作成した顔モジュールをプレハブ化する

表情設定を含める場合と、表情設定を含めない場合がありますが、どちらもお好きなタイミングで、プレハブ化しておくと使い回しが効きやすいキメラ顔のモジュールになりますので、ここでプレハブ化しておきましょう。
前述のEditor Onlyで改変されている方は、プレハブの種類をPrehab Variantとしてプレハブ化しておくのが良いかと思います。

プレハブ化する前に顔モジュールのオブジェクトの名前を
わかりやすくしておくといいかと思います。
「MA_Karin_Face」などなど…

お疲れ様でした。これで顔をモジュール化できましたので、他のアバターに持っていくときも簡単にキメラ化することができるようになります。

発展と応用について

他のアバターに持っていく場合

表情をプレハブに含めている場合、基本的には、アバターに設置して位置合わせとすればそのまま使えるはずです。
表情をプレハブに含めていない場合は、上記と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時間


いいなと思ったら応援しよう!