VRoidでclusterのVRM1.0対応をやりたかった(2024.08/21時点)

まず初めに


2024/08/22
*ここに書いてるの半分くらい無駄になっちゃったけれど念のため残しておきます

テクスチャのピクセル数が上限なしに変更されたのでテクスチャのピクセル数まわりの分は飛ばして読んでください。

序文(2024/08/21 23時45分ごろ記述)

以下の文章はclusterのVRM1.0対応前のものです。
9月からVRM1.0対応されるので、現時点では推定が混ざっていることに留意してください。
また、この記事はVRoidStudioからエクスポートしたアバターを直接clusterにアップロードしている人がメインターゲットです。

やっとclusterがVRM1.0に対応する、という声明を出しましたね。
確か2023年12月に一旦対応したものの、不具合があって2024年1月にロールバックしてVRM1.0非対応のままになっていたのです。確か。

んーでも、対応最初期は1.0アバターに制限がかかるようです。
内部軽量化がまだ最適化されていないのでしょう。

それで、今回はVRoidアバターをこの制限内に適用させる、という内容でやっていきます。

最初に言っておきますと、VRoidStudio単体では完結しません。
PC環境で他のソフトを使います。
Unityやblenderは使いません。(例示としては使いますが工程上は使いません)

作業環境
VRoidStudio v.1.29.1
Unity 2021.3.4f1
UniVRM 0.114.0

制限の確認

上の事前案内より制限内容を引用します。

clusterのVRM1.0アバター制限:2024.8.21時点のもの
8.22にメッシュ→サブメッシュに、テクスチャのピクセル数制限が上限なしに変更

※補足
・ノード数:Unityにおける「GameObject」の数のこと
・スプリングボーンの数:「UniVRMのVRM10SpringBoneJoint」の数のこと
・スプリングボーンコライダーの数:「UniVRMのVRM10SpringBoneCollider」の数のこと
・テクスチャの画像形式:PNG, JPEG

※上記制限について、リリース後に変更になる可能性があります。(引用ここまで)

(テクスチャは枚数ではなくピクセル数の総数で制限される)

制限の対応表

最低限やるものだけ記述します。
ここが要らない情報だと思う方は「出力設定」の目次までスクロールしてください。
一応この項目で大半のモデルは制限内に改造できるかと思います。

スプリングボーン数

揺れさせるボーンの数ですね。VRM10SpringBoneJointの数なので、総ボーン数では無いです。
(VRoid内での出力設定は総ボーン数なので注意)
安全を期待するなら、ボーン数200本以内までなら問題ない…はずです(VRM10SpringBoneJointはボーン1つにつき1つしか付かないはずなので)

このアバターのボーン数は233 髪のボーン数を削って対応
マテリアル数は応用的な意味で後述

全メッシュのポリゴン数の合計

72000まで。
VRoidモデルのポリゴン数の大半は髪なので、そこを削減することになります。
また、透過で衣装などを作っている場合は透明メッシュの削除も選択肢に入ります。

VRoidのVRMエクスポート設定
見た目が崩れないように滑らかさを削る

マテリアル数

VRoidの仕様上、パーツのテクスチャが「全て非表示」の場合VRoid上ではマテリアル数が多く計上されますが出力時に消されます。

同型パーツのテクスチャが同一(複製などをして)の場合はマテリアルが1つに纏められます。

ネコミミ。複製されてテクスチャが同じ
(耳毛のみになっています)
VRoidHubでの表示
スプリングボーン数の項目ではマテリアル26だがコピー分減っている

テクスチャの合計ピクセル数

曲者。これをなんとかする必要があります。
12*1024*1024とは、一辺1024pxのテクスチャが12枚分という意味です。
一辺512pxだと48枚、2048pxで3枚、4096pxで0.75枚。
デフォルト設定ではどうやってもはみ出します。

VRoidのVRMエクスポート設定でテクスチャ品質を「縮小」にしましょう。
これで8割くらいは何とかなります。テクスチャのサイズが25%に縮小します。
2048*2048なら1024*1024に、1024*1024を512*512にといった感じ。
衣装総数:9
髪マテリアル数:3
くらいでギリギリ上限かな?と思われます。要調整。

縮小するとテクスチャサイズが小さくなる

なんとかならない場合は他の手段を使います。
出力設定以下の項目を参照してください。

出力設定

纏めます。

ボーンを200本以下にする
ポリゴン数を72000以下にする
マテリアルを25以下にする
テクスチャをVRMエクスポート設定で縮小する
マテリアル圧縮は止める(やると効果的なテクスチャ縮小ができない)

これで出力します。VRM1.0でね。


テクスチャを差し替える

VRM0.xは対応しているが、VRM1.0は対応していない、というパターンが存在します(ソフトが古いとありがち。2022年くらいまでのソフトだと厳しめ *VRM1.0が2022年9月公開のため)

なのでVRM1.0に対応しているソフトを使用しテクスチャを差し替えていきます。
これが使えそうかな?でも暫定対応みたいなので過信は禁物。

あとRingoさんのところのこのツールも大丈夫みたいですね。

これらを使って不必要なテクスチャをピクセル数が少ないテクスチャへと差し替えましょう。
テクスチャ枚数ではなくてピクセル数で制限がかかってますからね。

「MatcapWarp」か「Shader_None Black」「Shader_NoneNormal」がピクセル数が小さいのでそれをダウンロードし、いくつかのテクスチャと差し替えてしまいましょう。

Unityで見ると四角くて小さいテクスチャだと分かる

要らないテクスチャの定義は異なるかもしれませんが…、髪のハイライトとかノーマルマップ(青紫色のテクスチャ)とかは間引いてもいいかもしれません。
念のためノーマルマップが有った場所はノーマルマップに差し替えておきましょう。

確認しよう

さてclusterにアップロードしましょう。
VRM1.0だと現状、アバター制限をクリアできていないと警告文が出るはずなのでその時は該当箇所を修正して再アップロードします。

この段階でアップロードできないとなると想定されるのは…
衣装の重ね着が多すぎる事でしょうか?

だいたい衣装の重ね着は8~9枚程度までであれば問題ないはずですが…

髪のマテリアルが多すぎることが問題かもしれません。
髪はカラーテクスチャ(Lit color)・髪のハイライト(Emission)、ノーマルマップの三枚が入っています。

つまり髪1マテリアルにつき3枚テクスチャが入っているというわけですね。
ハイライトテクスチャとノーマルマップテクスチャを排してあげるといいかもしれません。

マテリアル数の項目で述べましたが、VRoidの仕様として「パーツのテクスチャが全て非表示」の時にはテクスチャごとマテリアルを消去してくれます。
比較的重要度の低いテクスチャ(ベースヘア・瞳のハイライトなど)を消してしまうのも有効でしょう。

アップロードして、その後(応用的ななんか)

アップロードが成功しましたか?OK?それは結構。
この後の項目は現状での不満点を洗いますね。

VRM10SpringBoneJointって計上されないんですか?

されないです。VRoidで計上されるのは「総ボーン数」ですね。
私の検索範囲ではVRM10SpringBoneJoint総数を計上するはありませんでした。開発に期待。

あと、自力でVRM1.0にMigrateできるのならこのツールでボーン数を削減するってことをしてもいいかもしれない。です。

このツールの最終更新が2019年なので使えるかは分からないです。

2022/08/23追記
RingoさんのところのスクリプトでVRM10SpringBoneJointを計測できるようになっています。

一応VRoid上で出力する分には200本超えることは稀


VRoidでマテリアル圧縮しちゃいけないの?

VRoid上でマテリアル圧縮(減らす)機能がVRMエクスポート時に存在します。これで出力すると顔・体のテクスチャに纏められ2枚になるのですが、これは2048*2048までしか圧縮されず、また衣装が多いと圧縮効率が実用ライン的に危うくなります。
また、shade colorにLit colorのテクスチャを若干暗くしたテクスチャを勝手に生成するので総ピクセル数が増えます。

左:テクスチャ2048でマテリアル圧縮したもの
テクスチャの圧縮効率が悪いのが分かる(これはVRM0.xのものです)

もっと軽量化を頑張りたい

clusterは以前にもアバター制限をしていたことがあります。
その時の記事がありますのでそこを参照してもいいかもしれないです(使用アセットは有料)


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