見出し画像

VRoidモデルのVRChatパフォーマンスランクを上げる検証


水井軒間です。

3Dモデルについて全く知識がないまま、VRoidでモデルを制作しVRChatにアップロードして、何も疑問に思うことなくVRChatライフを楽しんでいた私ですが、調べ物をしているうちひとつ気になったのが、
VRChatの「Avatar」>左下の「AvatarStatus」という画面に表示される
「Overall Perfomance」、一般的に「パフォーマンスランク」と呼ばれるものについてです。

VRChatに入ったのは最近でも、VRChatを拠点に活動する個人系VTuberの界隈はほぼ黎明期から追っていたので、
「そういえばVRChatのアバターってポリゴン数とか仕込むギミックの数とかで重さとかあるんじゃないの…?」
「アバター作る人みんなそのあたりシノギを削っているんじゃないの…?」
という疑問が、VRoidを触っている中でちょっと冷静になって、ぼんやりと湧いてきました。
(私が個人製を追っていた頃はVRChatのポリゴン数制限が2万だったというのが”シノギを削ってる感”の最たる理由だったようにも思います)

今まではお恥ずかしながら、ポリゴン数すら確認せずVRoidHub経由でVRMを書き出してそのままポンとアップロードしていました。
これってもしかしてやばいというか、少なからず自作アバターについて記事を書いたりしてるならちょっとは勉強しといた方がいいんじゃないの…?

とにもかくにも気になったので、とはいえ全く知識経験がないので、まずは手持ちのVRoidモデルでいろいろ試してみることにしました。


!お願い!

マジでマジでマジで何も知識のない人間が1から調べ物をして実践してみようという内容の記事になります。間違いを見つけたり知識を得ましたらその都度追記・更新していく予定です。
また私と同じように全く知識のない人と一緒に考えたい、覚えていきたいという趣旨の記事でもあります。グダってる場面も多々ありますがどうかお手柔らかにお願いします。



・パフォーマンスランクとはなんぞや

まずは基礎の基礎の調べ物をしよう。
パフォーマンスランクとはなんなのか、上げるとどんな良いことがあるのか(低いとどんな悪いことがあるのか)。

これによるとパフォーマンスランクとは「描画負荷の目安」である。
えっと、つまり…?
記事の最後に

「交流が目的の大規模イベントでは、ダイナミックボーンやパーティクルシステムを外したモデルを別途用意しておくと良いかもしれません。上手く使い分けていきましょう。」

とあるので、
つまりパフォーマンスランクが低い(アバターが重い)とやっぱり、周りの人の描画速度が落ちたりするということみたい。
自分の描画速度も落ちるのかな…?そのへんはあとで実践してみよう。

ツイッターとかも見てみてなんとなく察せるのは、
「軽さ」と「表現力」はトレードオフであり、軽さが全てではないが、
人の多い場所や重いワールドなどへの対策として軽いアバター”も”用意しておくのがベター、といったところでしょうか。

なんにせよ、特別表現に凝るのでもなく、なんの知識もないまま削れるところを削らないで無駄に重いアバターでいるのは良くない、ということはまぁ理解できますね。



・検証開始、目的の確認

というわけで検証・実践スタートです。
比較のため、検証前の、なんの対応もなしにVRoidモデルをそのままアップロードしたアバターの状況を見てみましょう。
一番普段使いしているアバター「水井くん(コーチジャケット)」で今回検証します。(男アバターですが素体は女性です)

操作前1

パフォーマンスランクは「Poor」
ポリゴン数、マテリアル数ともにVRoidのデフォルトからいじっておらず、髪にダイナミックボーンがボコボコ入っています。
改善の余地おおいにアリですね。


さて検証を進めるにあたって、今回の私の中での目標・目的を確認します。

今回目指すのは「Excellentの超絶軽いアバターを作る!」ことではなく、
「アバターの”無駄な”重さを削る」こと。
「現状のアバターの表現、見た目を極力変えずに、影響のない範囲でどこまでアバターを軽くできるのか」、
そして「どれくらい頑張るとパフォーマンスランクをどれくらい上げることができるのか」、の検証になります。

そしてあくまでVRoidモデルに限った話、VRoidStudioの画面でできることに絞ります。
つまり言ってしまえば「ポリゴン数」と「マテリアル数」と「ボーン数」のみです。あとテクスチャの解像度か。テクスチャはデフォルトでも結構ボケてるように感じるのでできればいじりたくないですね…
Unityに持っていって設定をいじってさらに軽くする、ということは今回はしません。



・ポリゴン数を削減してみる

VRChatに持っていけるアバターのポリゴン数制限は7万ポリ

スクリーンショット 2020-05-30 14.53.55

今アップロードしているモデルはだいたい4万ちょっと
これを削減してみたらどれくらいアバターが軽くできるのか試してみます。

VRoid内でポリゴン数を減らすことができます。

スクリーンショット 2020-05-30 14.53.05

まずは「体型編集」で、服に隠れているところ=メッシュが必要ないところのテクスチャを消しゴムで削ります。

次に「撮影・エクスポート」>「エクスポート」画面へ。

スクリーンショット 2020-05-30 14.54.55

「透明なメッシュを削除する」にチェックを入れると、
さっき削った体のメッシュと、服の改変でテクスチャが貼られていない部分のメッシュが削られます。42048→34740になりました。

スクリーンショット 2020-05-30 14.55.10

次に「髪の断面形状を変更する」にチェック。
これは断面形状を「ひし形」から「底なし三角形」に変更、つまり髪のひと房ひと房の裏側にあたる部分のメッシュを削除してポリゴンを削減します。
若干髪の見た目が変わりますが問題ない範囲。
これが結構減って、34740→22892になりました。
シンプルに考えて髪のポリゴン半減だもんね。

スクリーンショット 2020-05-30 14.56.34

最後に「髪の滑らかさ」「顔」「体」「髪」をそれぞれ50に。
プレビュー画面でモデルの見た目がどう変化するか確認しながら調整します。
42048ポリゴンからスタートして20084
見た目にほとんど影響を与えないまま半分以上減らすことができました。


さてここで実践するまえに調べ物をしていたところ問題が。

ポリゴン数をいじるのは実はほとんど意味ない…!?

えっみんないつもポリゴン数ポリゴン数言ってるのに、なぜ…

納得がいかないというか実感が持てなかったので、実感を持つために一度これでVRChatにアップロードして検証してみることに。
半分以上削ってなんもないってことないでしょ!と思った、んですが、

ポリゴン削減1

パフォーマンスランクは「Poor」のまま。ねこますさんの言う通りだった。
マジか〜〜〜〜〜〜………………


じゃあポリゴン数をできるだけ節約、削減した方がいいと言われているのはなぜなんだろうか、と思いいろいろ見ていたんですが、

VRChatに限らず各プラットフォームで、使用できるポリゴン数の他に、
快適に動かせる推奨ポリゴン数というのがある、つまり、
ポリゴン数が多いとやはり動作に影響がないわけではない、ということのようです。またPCスペックが高いほどハイポリのモデルが扱えるとも。
VRChatでの話というより3Dモデル全般の話として捉えたほうがいいのかもしれない。

うーんなんとなく納得…
とはいえ(私の環境での)VRChatではほとんど変わらないんじゃしょうがないので、次を試してみます。



・マテリアルを削減してみる

次は「マテリアルの削減」を試してみます。
ねこますさん曰くこれが一番効果があるとのこと。

スクリーンショット 2020-05-30 21.11.16

はじめのマテリアル数は16
髪の毛でピアスを作った際に髪のマテリアルを1つ増やしているので、そのぶんデフォルトよりおそらく+1されています。

スクリーンショット 2020-05-30 21.29.11

髪のマテリアル数で殴っているこのアバター「実験ちゃん」を確認してみたところ20あったので、やはり髪のマテリアルを増やすほどプラスされていくようです。

マテリアルの削減には3パターンあるので、全て試して見た目の変化を見てみます。

スクリーンショット 2020-05-30 21.11.22

「弱」。マテリアル数11。ほぼ見た目に変化なし。

スクリーンショット 2020-05-30 21.12.17

「中」。マテリアル数。髪のアウトラインが真っ黒になりました。
個人的には許容範囲ですが、髪のアウトラインの色味で何か特別な表現をしている場合(上にあげた「実験ちゃん」は無理)だと厳しい。

スクリーンショット 2020-05-30 21.13.15

「強」。マテリアル数
髪のアウトラインが顔や体と同じ赤茶色になりました。
この髪色だったらこっちのがアリですね。


さて、VRMに書き出してアバターアップロードしてみます。
どれで試すか迷いましたが、ダイナミックボーンをどうしても入れたいというのと、見た目的に妥協できる範囲内だったので「強」でエクスポート。
VRoidでマテリアルを下手にいじるとバグるという話も聞きおびえつつ…

画像17

いや変わってへんやないかい!!!!!!!!!!!!!!!!

ん、ちょっと待てよ…

画像18

ここで初めてAvatar Statsの詳細欄の文字の色で、何がPoorの原因になっているかわかるじゃんということに気づきます。

あと最初に読んでたこの記事にパフォーマンスランクの基準値がきちんと全部書かれてました。バカアホ



・ダイナミックボーンを削減してみる

これであと何をどのくらい調整したらどのランクが目指せるのかはっきりしました。最初からはっきりしてたんだけど…
現状だと「Dynamic Bone Transforms」の値がオーバーしているのでこれを削りたい。
上の記事によるとDynamic Bone Transformsとは「ダイナミックボーンスクリプトによってアニメーション化されたトランスフォームの数」で、
32でMedium、16でgoodが目指せるとのこと。

「ダイナミックボーンスクリプトによってアニメーション化されたトランスフォームの数」の意味はサッパリなんだけど、現状の「43」という数になんとなく心当たりがあったので試してみます。

スクリーンショット 2020-05-30 22.34.28

VRoidで髪の毛にボーンを入れる際、デフォルトの「ボーン数」はになっています。
そんな滑らかじゃなくていいだろと思って適当に3にしていましたが、
もしかしてこれ短髪ならでいいんじゃないの?
たぶんこれでDynamic Bone Transformsが削れるはず、というヤマをかけて全部のボーングループのボーン数を1に。

ちなみにボーングループは11あります。ちょっと多いだろうけどそのへんはこだわりなのでそのまま、
Excellent・Goodは諦めてとりあえずランク・Mediumを目指します。

スクリーンショット 2020-05-30 22.38.39

Mediumならマテリアル数は16までいけるっぽいので、
「マテリアルの削減」は「弱」のマテリアル数11で、挑戦!

画像19

いけた!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

画像20

やったあああああああああああああああああああああああああああああああ

鏡で髪揺れの感じもチェックしましたが、前よりリッチではないものの問題はない範囲。


みなさん!!!!!!!!!!!!
VRoid製モデルで髪にダイナミックボーン入りでパフォーマンスランクMedium、いけます!!!!!!!!!!!!!!!!!!



・せっかくだしGoodを目指してみる

画像21

ていうかこれマテリアル数とダイナミックボーンの項目さえクリアすればGoodも狙えるじゃん、ということに詳細を見ていて気づきます。
(写ってる項目以外全部緑)

オリジナルのGoodアバターひとつ持ってたら、重すぎるワールドで泣く泣くデフォルトアバター、なんてことをしなくて済むわけです。
おめかし用アバターは他にあるし軽量化、やるか!


Goodの基準はマテリアル数、ダイナミックボーンスクリプトの数、ダイナミックボーンによるなんちゃらかんちゃらトランスフォームの数16
つまりVRoid内のボーングループが4、ボーングループ内のボーン数8まで、です。(さっきの結果から推察)(考え方間違ってるかもしれん)

スクリーンショット 2020-05-31 1.06.48

まず後ろ髪のボーンを抜き、ボーングループを前髪4パーツのみにします。
ボーン数は1or2の合計6本。

スクリーンショット 2020-05-31 1.10.14

マテリアル数は「中」の8でもいけるんですが、見た目的に「強」の2に。
VRMにエクスポートしていざアバターアップロード。

画像22

いけた!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

みなさん!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
VRoidアバター、造形を自由に盛っても髪の毛ボーン4本までならダイナミックボーン入りでGood、いけます!!!!!!!!!!!!!!!!!!!!

画像23

やったね!おしまい!

この記事が気に入ったらサポートをしてみませんか?