あめ子の学習帳

Modular Avatarを使って改変したVRCアバターをVRMにする 下準備編

やっほー、わたあめの妖精わたあめ子です。

VRChatで好きなお洋服や髪型に変えたりするアバター改変。
できればそのオシャレなアバターで他のプラットフォームにも出かけたいですよね?

バーチャルキャストやclusterに出かけるにはVRMに変換する必要がありますが、やり方がよくわからないという方も多いのでは?
ここではVRC用にセットアップしたアバターを、VRMに変換する方法を紹介します。

めちゃくちゃ長くなりそうなので、

  • 下準備編
  • マテリアル変換編
  • VRMセットアップ編

くらいに分けて説明できればと思います。

前提

この記事では「VRMに変換する」系ツールをなるべく使用せずに進めていきます。
個人的な体感の話になりますが、VRMへの変換はツール同士の相性、ツールとUniVRMのバージョンによる相性などでエラーが起こりやすいです。

解消不能のエラーで頓挫してまた初めから…ということが本当に多いので、ここではなるべくつまづく可能性を減らすために使用するツールを最低限にしています。
手作業が多くなるので大変だと思いますが、原因不明のエラーで進行不可になることはかなり少ないはず…!
今のところあめ子の環境ではこれが原因でエラーは起こってなさそう…というものは紹介しようと思いますが、「このツールならエラーが出ない」と保証するものではありません。
予めご了承ください。

また、VRMに変換する際はUnityのprojectを別で用意することを強くおススメします。
前述の通りエラーが起こりやすいので、普段VRCのアバターをアップロードしているのとは別で新規にprojectを作成すると安心です。

この記事を書いた人はVTuberをやるためにUnityを始めていて、まだまだ勉強中の身です。
エンジニアさんとかではないので、誤っている部分やもっとうまい対処がある場合は優しく教えてください。

Unityのバージョンについて

VCCだのUniVRMだのを使うのでUnityのバージョンを悩むところですが、この記事ではUniVRMのバージョンはv0.115.0を推奨しています。
UniVRMのv0.115.0は2021.3 LTS以降をサポートしているとのことなので、今回はVCCで現在移行が推奨されている2022.3.6f1で作業をしていきます。
※記事内のスクリーンショットはUnity2019のものだったりしますが、環境としては2022.3.6f1を推奨します

用意するもの

Modular Avatar

非破壊でお洋服を簡単に着せたりすることができるツールです。
今回はこちらを使った方法をご紹介します。
基本的にVCCで導入することになります。
公式サイトの「ダウンロード(VCC経由)」をクリックすることでVCCが起動し、導入できます。

UniVRM

VRMをセットアップするために必要なもの。
VRCSDKみたいな感じの立ち位置のものだと思います。
こちらからunitypackageをDLすることができます。
本記事では安定版の使用を推奨します。(2024/4/11現在の安定版はv0.115.0)

Avatar Optimizer

アバターの軽量化を簡単に行える。こちらも非破壊。
VRC用アバターの軽量化も簡単にすることができるので、使えるようになっておいて損はないです。
こちらも公式サイトからVCCで追加することができます。

Modular AvatarとAvatar Optimizerは、VCCに追加できたらプロジェクトを開く前に忘れずに追加してください。
VCCを起動→Manage Project→それぞれModular AvatarとAvatar Optimizerの右側にある+マークをクリックでプロジェクトに追加できます。


UniVRMはunitypackageをDLするので、プロジェクトを開いてからインポートします。

アバターの改変をする

まずは任意のアバターに任意のお洋服を着せます。

詳細はModular Avatarのチュートリアル>簡単な衣装セットアップにて確認することができます。

まずはアバターのprefabをhierarchyにドラッグ&ドロップします。

次に、衣装のprefabを同じようにドラッグ&ドロップ。

元々の衣装や髪型など、不要なパーツがある場合は非表示にし、「Untagged」になっているところを「EditorOnly」にします。

EditorOnlyにすることで、VRCへのアップロード時やこのあと説明するManualbake時にオブジェクトが含まれないようになります。

衣装のprefabをアバターのprefabのルートにドラッグ&ドロップし、アバターの直下に入れます。

アバター直下に入った衣装のルートを右クリックし、Modular Avatar >Setup Outfitをクリックします。

これでプレイモード時にアバターのボーンに衣装のボーンが統合され、衣装がアバターに追従するようになります。

もし再生ボタンを押してプレイモードにしてもうまく追従しない場合、ボーンの命名規則が一致していないためにボーンの統合がうまくいっていないケースがあります。
この場合は衣装のアーマチュアに追加されたMA Merge Armatureの、「ボーン名を統合先に合わせる」をクリックしてみてください。

ちなみに、アバターのボーンスケールを変更していて対応衣装を使用している場合は、衣装のスケールを簡単に合わせる方法があります。
衣装のアーマチュアに追加されたMA Merge Armatureにある「位置を元アバターに合わせてリセット」の左にあるプルダウンを開き、「スケールも合わせる」にチェックを入れて実行をクリックするとアバターのボーンスケールに衣装のボーンスケールを揃えてくれます。

Avatar Optimizerでできる軽量化をする

VRMに変換する前に、簡単に軽量化できる部分を軽量化しておきます。
これはVRMに変換するときに限らず、VRCへアップロードする際もやっておくと負荷を減らすことができるのでオススメです。

VRMにおいては、例えば容量制限のあるプラットフォームへ持っていくときに必要になることが多い作業です。
いずれにしろ軽量化されているに越したことはないので、簡単にできる部分だけでもやっておくことをオススメします。

やってほしいことは3つ。

  • メッシュの統合
  • 不要な部分のポリゴン削減
  • 使用されていない部分のボーン削除

順に見ていきましょう。
(テクスチャについてはこの後のマテリアル変換の項目で触れていきます)

メッシュの統合

VRC用に販売されている衣装はパーツごとにメッシュが分かれていることが多いですが、メッシュの数は少ない方が負荷が少ないです。
例えばメッシュAとメッシュBで同じマテリアルを使っている場合でも、メッシュが2つに分かれたままだとマテリアルの数も2とカウントされますが、メッシュを1つにまとめるとマテリアルの数も1とカウントされます。


今から紹介する方法でAvatar Optimizerを使って統合する場合、同じマテリアルを使っているメッシュを自動的に判別してまとめてくれるので便利です。

まず、アバターのルートで右クリックし、「Create Empty」をクリックします。

「GameObject」ができるので、「mesh」などわかりやすい名前に変更します。

名前を変更した「mesh」を選択し、「Add Component」をクリック、「AAO Merge Skinned Mesh」を追加します。
検索窓に「aa」と入力すると見つけやすいです。

AAO Merge Skinned Meshが追加できたら、体や髪、洋服などのメッシュをまとめていきます。
このとき、顔のメッシュは含めないでください。

Skinned Mesh Rendererがついているメッシュは「スキンメッシュレンダラー」に、Mesh Rendererがついているメッシュは「静的レンダラー」に追加していきます。
ざっくり、ウェイトが塗られているメッシュはスキンメッシュレンダラー、ウェイトの情報がないものは静的レンダラーに入れることになります。

この時、Inspectorの右上にある鍵マークをクリックしておくと、Inspectorの画面が切り替わらなくなるので作業がしやすくなります。
(ShiftやCtrlを押しながら複数選択→ドラッグ&ドロップができます)
メッシュを入れ終わったらロックを外しましょう。

これだけで、プレイモード時に追加したメッシュを統合してくれます。

 

不要な部分のポリゴン削減

服に隠れている体の部分など、不要な部分のメッシュを削除します。

ここで活躍するコンポーネントを2つ紹介します。
どちらも編集中はプレビューできるようになっていますが、Modular Avatarと同じく再生ボタンを押したプレイモード時に適用されます。
他のオブジェクトを編集している時などには消えていない状態になりますが、最終的にはちゃんと消えるので「そんな、消したはず…!」と慌てなくても大丈夫です。

Remove Mesh By BlendShape

貫通対策用のblendshapeを利用してメッシュを削除することができます。

Bodyのメッシュを選択し、Add Componentから「AAO Remove Mesh By BlendShape」を追加します。
次に、消したい部分のシュリンク用シェイプキーにチェックを入れます。

チェックを入れると実際にアバターのメッシュがどう消えるか確認することができるので、どのあたりまで消して大丈夫か確認しながらチェックを入れましょう。

 

Remove Mesh in Box

箱で指定した範囲のメッシュを消すことができます。
シュリンク用シェイプキーでは対処しきれない範囲を消したり、手袋の貫通が気になるけれども手のシュリンク用シェイプキーが存在しない時などに便利です。

消したいものがあるメッシュを選択し、Add componentから「AAO Remove Mesh in Box」を追加します。
ひとつのコンポーネントで複数の箱を管理できるので、消したい範囲が離れた位置にいくつかあっても大丈夫です。

Edit This Boxをクリックし、メッシュを消す範囲を指定する箱の大きさ、角度、位置などを調整します。

ここでひとつ留意してほしいことがあります。
VRMの揺れ物であるVRM SpringBoneはVRCのPhys boneほどパラメータが多くありません。
そのため、SpringBoneでは揺れを再現しきれないケースが出てきます。

あめ子がよくぶつかるものとしては、胸のボーンにSpringBoneを入れると服から素体が貫通するというものです。
現状、揺れ物の設定で貫通を防ぐ方法をあめ子は知りません…。

なので、胸の揺れ物については

  • 胸にSpringBoneを入れない
  • 胸の服に隠れる部分のメッシュを消しておく

のどちらかの対策をすることになります。

「胸の服に隠れる部分のメッシュを消しておく」の対策を選択する場合は、この段階で体の胸の部分のメッシュを削除しておいてください。
ちなみに今回この記事で使用しているような胸元の大きく開いたお洋服はメッシュを消すにも細かな調整が必要だと思うので、Unityで完結する場合はMeshDeleterWithTextureなどを使用することになるかなと思います。

逆に言うと胸の周辺の露出がないお洋服だと中身を全部消してしまえばよいので、特にSpringBoneの挙動に慣れていない方は露出の少ないお洋服からチャレンジするのがオススメです。

使用されていない部分のボーン削除

アバターに他の衣装を着せる場合、使用されないボーンが発生することがほとんどです。
例えば、デフォルト服のスカートやリボンのボーン、非表示にしたケモ耳や髪のボーンなどです。

メッシュは消えていて使用されないけど、ボーンや揺れ物の設定は残っている…という状態は、無意味に負荷を上げてしまうので何とかしたいところです。
特にVRMではプラットフォームによってボーン数に制限があったりするので、不要なボーンは削除しておきましょう。

やり方としてはアバターのルートを選択し、Add Componentから「AAO Trace And Optimize」を追加します。

以上です。

なんとTrace And Optimizeは、コンポーネントを追加するだけで自動的に使われていないオブジェクトを削除してくれます。
「使われていないオブジェクト」にはもちろんボーンも含まれます。

また、アニメーションなどで使われていないblendshapeも自動的に固定・削除してくれるので、ボディや服などアニメーションでは動かさないようなblendshapeでかかる負荷を軽減してくれます。

服が着せられた状態のアバターを書き出す

ここまでで、アバターに服を着せて最低限の軽量化の設定が終わりました。

しかし、これらの設定はすべて再生ボタンを押してプレイモードにならないと適用されません。
VRCにアップロードするときはアップロード時にプレイモードになるからいいけれど、VRMにする場合はどうすればいいのでしょうか。

Modular AvatarのManual bake avatarという機能を使います。

が、その前に。

VRCでアバターを使っている方には、シェイプキーで顔のデフォルトの表情を変更している方も多いですよね。
VRC用に表情をセットアップする際にscene上のアバターのシェイプキーも編集済みのデフォルト表情になっていることがあるかと思います。

あめ子んちのさくらこさんが使っている桔梗ちゃんも、デフォルトとはずいぶん顔が違います。

こんな風にデフォルトの表情を編集している場合、Manual bake avatarでアバターを書き出したときに顔のシェイプキーがベイクされてしまいます。

編集した形のまま固定されて書き出されてしまうので、

  • 元々のデフォルトの形に戻せなくなる
  • 表情を作るときに使っていたシェイプキーがうまく動かなくなる

といったことが起こります。

これを防ぐため、Manual bake avatarをする前にscene上アバターの顔のシェイプキーはすべて0にし、購入直後のデフォルトの状態にしておきましょう。
必要なら、自分で編集したデフォルト表情のシェイプキーの数値をメモしておきます。

更に、Manual bake avatarをすると使用されていないシェイプキーは削除されてしまいます。
先ほど追加したTrace And Optimizeの効果ですね。

使用されていないものが消えるのは良いのですが、表情を作るときに使おう!と思っていたシェイプキーまで消えてしまうのは困ります。
FXに入っているアニメーションが参照されていそうなので、VRC用に表情を作ってあるアバターをそのまま持ってきた場合は大きく困ることはないと思います。

しかし、新たにアバターを作り直している場合や「せっかくだから新しい表情も作ろうかな?」と思っていた時なんかは困ってしまいます。

なので、使おうと思っているシェイプキーはFX Animation controlerのどこかのアニメーションに含めておいてください。
あめ子が新しくアバターを組んだときは、「使おうと思っているシェイプキーが全部ちょっとずつ動いているアニメーション」を作って、それをFXの表情差分のところに入れておきました。

アニメーションの作成にはVRCAvatarEditorが便利です。
※FaceEmoは普段使っていなくてVRMとの相性が確認できていません

基本的にはこの方法で困らないはずですが、VRMが使えるプラットフォームやアプリは多岐に渡り、VRMの「Natural」が再生できない環境においては急にアバターのデフォルトの表情になってお目目がぱっちりしてびっくりすることもあるかもしれません(新しく出たアプリとかでありがち)
ごく限定的な環境で表情をベイクしちゃった方が簡単なケースもありますが、ここでは割愛します。

ともかく

  • scene上のアバターの顔のシェイプキーをすべて0にする
  • 使おうと思っているシェイプキーは何かしらの手段でFXのアニメーションに含める
  • 体型などのシェイプキー調整も必要ならこのタイミングでしておく

これができたらいよいよアバターの複製を書き出します。

アバターのルートを右クリックし、Modular Avatar >Manual bake avatarをクリックします。

すると、Modular AvatarとAvatar Optimizerの処理が適用されたアバターの複製が書き出されます。

scene上を見渡して「アバターがない!」と思ったりするかもしれませんが、複製はZ軸2の地点に書き出されています。
見つけられない場合は、positionのZを0にすると今まで編集していたのと同じ位置に表示されるはずです。

 

下準備編はここまでです!お疲れ様でした!

次回はマテリアル変換について説明します。

Modular Avatarを使って改変したVRCアバターをVRMにする マテリアル変換編やっほー、わたあめの妖精わたあめ子です。 Modular Avatarを使ってお着替えしたVRC用アバターをVRMにする方法解説記...