🌺

【VRChat】PC向けアバター(50,000ポリ超)をポリゴン削減してFallback対応したメモ【CatsBlenderPlugin】

2022/01/11に公開

はじめに

VRChatを昨年12月11日辺り始めたNewUserのツムジウィンドです。
NewUserになったのが15日でその次の日にアリシアちゃんがリリースされて、運命を感じたので買っちゃいました。


はい、かわいい
で、私はQuest2勢なので、Quest向けイベントでShow Avator無しでもアリシアちゃんをお披露目したかったので、Blenderでポリゴン削減しました。
https://twitter.com/infitech2/status/1480510434843459595

結構面倒だったので、その作業の備忘録です。
試していませんが、メッシュ削減の作業はアリシアちゃん以外のアバターでも使い回せると思います。

BlenderやVRChat周りのUnityの知識は皆無なので、もっと楽できるよってことがあったら遠慮なく教えて下さい。

使ったもの

3Dモデル アリシア(Alicia 0.0.0 / Sisters!)※記事内ではテクスチャの色改変しています
https://sisters.booth.pm/items/3504943
Unity 2019.4.31f1
VRCSDK3-AVATAR-2021.11.24.16.20
Blender 2.93.5
Cats Blender Plugin 0.19.0
https://github.com/absolute-quantum/cats-blender-plugin
Material Combiner Addon 2.1.2.2
https://github.com/Grim-es/material-combiner-addon

前提知識

Blender及びUnityの操作が一通りVRChat関係なら分かる前提で記述していきます。
具体的にはzenさんのカボチャモデリング動画を一通り見た方向けです。
https://youtu.be/Xg4AXYuzEqA

やり方

アドオンインストール

「Cats Blender Plugin」(以後Cats)と「Material Combiner Addon」をBlenderに導入します。
※特筆することはないので、ここでは導入方法は特に解説しません。
Cats Blender Plugin
VRChatのアバター編集向けにいろいろな機能を追加してくれるアドオンです。
シェイプキー(表情など)を壊さずデシメート(ポリゴン数削減)出来るスマートデシメート機能など便利な機能が追加されます。
https://github.com/absolute-quantum/cats-blender-plugin
Material Combiner Addon
複数のマテリアルを1つにまとめる機能を追加するアドオンです。
テクスチャも1つにまとめてくれます(アトラス機能)
Catsと連携していて、Catsのメニューからマテリアルの結合が出来ます。
https://github.com/Grim-es/material-combiner-addon

Blenderでポリゴンを削減する(本題)

モデルをインポートする

上記のアドオンを導入すると、Nキーを押すと出てくるメニューに「CATS」というタブが追加されています。

Blender自体のインポート以外にも、このメニューからアバターのモデルを読み込めるので使っていきます。
対応ファイル形式はfbx、pmx/pmd、vrmと一通り対応しているようです(自分はfbxを使いました)

読み込めたら、マテリアルにテクスチャを設定していきます。

一通り設定出来たら、適当な作業用フォルダを作ってBlenderファイルを保存して、次に進みます。

マテリアルを結合する

Catsのメニューの「最適化」をクリックして、アトラスを選択します。

そして「Generate Material List」をクリックし、マテリアル一覧が表示されたら、「Save Atlas to...」をクリックします。
すると、結合したテクスチャの保存先を聞かれるので、先程の作業用フォルダを選択してCreateをすれば、マテリアルの結合の完了です。
アリシアちゃんの場合は結合されたテクスチャは4096x4096になりますが、問題なくGood評価になりました。

見えない部分のポリゴンを消す

デシメート機能で減らすポリゴン数が多いと、それだけ見た目が崩れてしまうので、手作業で削れるポリゴンは削っておきます。
例えば、アリシアちゃんの場合、体のメッシュが服の中に存在しているので、こういった見えない部分は消しちゃいます。


靴で隠れる足の裏とかもメッシュが多いので削ってます。

顔とそれ以外のメッシュを分ける

このままCatsプラグインのデシメートを実行することも出来ますが、そうすると顔が崩れやすくなってしまうので対策します。
顔が重要でないアバターの場合でも、崩れるのを避けたい部分に関してはメッシュを分けると良いと思います。


デシメート前(顔だけで7000ポリゴン超)

分けずにデシメートした場合(9000ポリゴン)

顔を分離してデシメートした場合(顔3000ポリゴン+それ以外6000ポリゴン)

分けた場合のほうが顔のメッシュが保持されています。

まず、顔以外のメッシュを結合します。
顔以外のメッシュを選択して、Catsの「モデルオプション→メッシュに参加する(Join)」ボタンをクリックすると結合できます。

そして、Catsのデシメート機能は、メッシュごとに適用出来ないので、ここでアーマチュアを一旦分けます。
アーマチュアを右クリックして「階層の選択」をクリックして、3Dビュー上でShift+Dを押して「複製」します。
そして、それぞれメッシュを消して、顔メッシュだけのアーマチュア、顔以外のメッシュのアーマチュアにします。

こんな感じになります。

デシメートでポリゴン数を減らす

デシメートはアーマチュアごとに処理されます。

モデルのメニューからCatsが処理する対象のアーマチュアを選べるので、ここではまず頭のアーマチュアから処理していきます。
(適宜アーマチュアの名前を変えたほうがいいかも)

頭のアーマチュアに切り替えたら、Catsのメニューのデシメーションを開いて、「スマート」が選択されていることを確認します。

そして、「トリス」に目標のポリゴン数を入力して、QuickDecimationをクリックすると、デシメート処理が実行されます。

終わったら、シェイプキーを操作して、表情が崩れていないか確認しておきます。


Blender標準のデシメート機能だと顔が崩壊しますが、Catsのスマートデシメート機能はシェイプがある程度保持されています。
若干陰が気になりますが、UnityでToonLitシェーダーを適用すると目立たなくなるので穴とか空いて無ければ問題ありません。


顔以外のアーマチュアも同じようにデシメートします。
「AnimationWeighting」のチェックを入れておくと、関節部分のポリゴン数を増えて、肘とか曲げる時の変形が自然になります。
ただし、代わりに他の部分のポリゴンが削られるので、小物が多いアバターなんかは外したほうがいいかも(アリシアちゃんの場合リボンとかが犠牲になったのでチェックは外しました)
(「指を救う」のチェックはよく分からなかったです)

デシメートが終わったら、ポーズモードでボーンを動かして上手く体が動くか確認します。

アーマチュアを結合

デシメートが終わったら分離したアーマチュアを結合します。
Catsには衣装替えなどのためのアーマチュア結合機能があるので、これを使います。

「すべてのボーンをマージ」「メッシュを結合する」だけにチェックを入れて、「MergeArmatures」をクリックします。

結合出来たら、シェイプキーを操作して表情が崩れないか、ポーズモードでボーンを操作して、体がちゃんと動くか確認します。
(自分の環境だと、「ゼロウェイトボーンを削除する」にチェックを入れているとボーンのウェイト設定が壊れました)

揺れもの向けのボーンを削除

DynamicBone対応のアバターの場合、揺らすためのボーンが入っているので、全て削除しておきます。
ボーン数を減らさないとアバター評価Goodにならないので、注意です。

透過を使った表情の調整

アリシアちゃんの場合、赤面が透過を使って表現されていますが、Questだと透過が使えないので、赤面用のメッシュが不自然に見えてしまいます。
こういった透過を前提としたメッシュは削除したり、シェイプキーを調整して自然になるように調整します。
自分は赤面用のメッシュを縮小して、頬紅みたいになるようにしました。

エクスポート

最後にCatsのメニューで「ExportModel」をすれば、.fbxが出力されます。

Unityでセットアップ

FBXインポート

インポートしたら、元のモデルと同じようにfbxの設定します。
Humanoidの切り替え忘れに注意。

VRChat/ToonLitマテリアルにする

アニメキャラのアバターはマテリアルはToonLitで大抵OKです。

モデルのヒエラルキーを調整する

blenderでの作業で、メッシュの名前が変わっていると、元アバターの表情の設定が使えないことがあります。
アバタープレハブをヒエラルキーに生成して、Animatorに元のアバターの表情Animatorを設定して、Animationが参照エラー(Missing)を起こしていないか確認します。
エラーが発生している場合は、メッシュオブジェクトの名前を元の名前にします。


Missingが発生している。


修正した。

アバター設定・アップロード

元のアバターの設定を見つつ、Quest用のアバターも設定していきます。

設定し終わってGood評価になっていればOKです。
通常通りQuestアバターのアップロードをします。
アップし終わったらVRChat内で確認して問題なければ終わりです。

おわりに

今回はFallback対象の10000ポリゴンを目標にしましたが、15000ポリゴンでもShowAvator無しで見れるので「Fallbackもこの子使いたい!」とかが無ければ15000ポリゴン目標にデシメートでOKです。
15000ポリゴン以下なら、アバター次第で顔のデシメートせずに体のポリゴン数だけ減らして、表情を全く崩さずにQuest対応も可能かと思います。

実は、最初はBlender標準のデシメート機能とMeshBakerでQuest対応してその記事を書いてました。
こちらの場合、シェイプが崩れるので顔はデシメート出来ず、MeshBakerも購入しないといけないのでハードルが高かったんですが、CatsBlenderPluginのおかげで、かなりお手軽&無料でQuest向けの軽量化出来ました。
これがMeshBakerを買う前に気付ければ言うこと無しでした…MeshBakerはいつかワールドを作る時に活躍してもらいます…。

参考文献

Vroid製アバターをVRChatで利用する[番外編1:Blenderでマテリアルを結合する] - 美少年開発研究所
https://chimerabbit.com/2021/07/22/vroid製アバターをvrchatで利用する番外編1:blenderでマテリア/#Blender
【Blender初心者向け】Cats Blender PluginをつかってVRoidモデルを軽量化する - Qiita
https://qiita.com/nyu___nS/items/abfd8c8edcb866b4c2d9
PC向けアバター 5000ポリまでダイエット - Quest Excellent を目指す本 -
https://github.com/mew-ton/teckbook_convert_lowpoly
【VRChat】アバター3.0 移行手順のご紹介! | ケーキのPC情報集会所
https://keiki002.com/vr/vrc-avatar3/
シェイプキーまとめ-シェイプに反映
https://dskjal.com/blender/shapekey.html#propagate-to-shapes

Discussion