【VRChat】存在がExcellent①【軽量化】
はじめに
どうもぱるちゃんです。
今回は度々話題になる軽量化について二本立てで記事を書いてみようと思います。
こちらはpart①の記事となります。
〇注意事項
※個人的な見解が多く含まれますが、それに対する意見はお控えください。
※本情報によって生じたいかなる損害についても私は責任を負いません。
記事のゴール
part①では
「非破壊・簡単な範囲で軽量化する」
「(関係ないけど)ついでにQuest対応する」
をゴールとします。
そして次の記事part②では
「PC版パフォーマンスランクでExcellent」
を目指す予定です。
今は非破壊で簡単に色々できるツールがあるので、「ちょっとの操作で改善できる」程度にやっていればいいというのが個人意見です。
またこの後何度も言いますが、見た目とのバランスが大事だとも考えています。とにかく軽い方が良い/なるべくきれいに見せたい…など落としどころは人によって異なってよいと思います。
何が軽量化につながる?
一言に軽量化と言っても、容量・描画負荷の二種類があります。
〇容量(≒ダウンロードサイズ)
⇒これは殆どテクスチャの容量だと思っていただいてOKです。
が、当然解像度を落としすぎると見た目が損なわれるので、容量と見た目のバランスをとることが重要です。
〇描画負荷
⇒こちらは私の知識で説明しきれるものでないので簡単に。
描画負荷はFPSに影響するものという認識でOKだと思います。
Physbone、マテリアル、ライト、ポリ数あたりが影響の大きい箇所です。
とはいえポリ数を削ればローポリに近づくわけですから見た目に影響しますし、Physboneを切れば髪などが揺れなくなり表現が狭まります。
よってこちらもバランスが重要です。
使用するツールたち
今回使用するツールをまとめておきます。
全て読み込んでから読み進めてください。わかる人はリポジトリ経由でもOKです。
各種ツール作者様、神ツールをありがとうございます…!
・VCC/Unity
⇒この記事を見ている人はほぼ間違いなく入っていると思うので割愛。
・Avatar Optimizer(Unity)
⇒非破壊でめちゃ簡単に軽量化できるツール。あまりにも神。
・TexTransTool
⇒非破壊でテクスチャをアトラス化(まとめる)できるツール。
要は読み込むテクスチャ減るのでいいよね…ってツールになります。
・一括圧縮ツール・AssetsCompressor
⇒面倒なテクスチャの圧縮を自動でやってくれるツール。
ワールド制作にも大変役立つツールです。大変感謝。
・VRCQuestTools
⇒数ポチでQuest対応してくれるツール。
殆どの場合、これだけで十分Quest対応できると思います。
・MeshDeleterWithTexture beta
⇒Unity上でメッシュを削除できるツール。
殆どの場合はAvatar Optimizerで消せますが、細かい削除はこちらで。
今回は使いませんが、Blender使いたくないけどちょっとメッシュ消したい!みたいな時に便利です。
今回の説明に使用するアバター
・【オリジナル3Dモデル】-ハオラン-HAOLAN
えっ、このクオリティで無料でいいんですか?!?!?!なアバター。
説明に使わせていただきます。
軽量化スタート
まずはPC版のパッケージを読み込み、「Phs_Haolan」をそのままアップロードしてみます。
(練習したい方は一緒にハオラン君を、自分のアバターでやりたい方は脳内変換して頑張ってください)
ゲーム内で諸々確認してみたのがこちら。
正直このままでも軽い方だと思いますが、色々やってみます。
Assets Compressorによるテクスチャ圧縮
まずはテクスチャの圧縮を行います。
Tools→Kamishiro→AssetsCompressorをクリックします。
テクスチャの入っている階層にチェックを入れ、それ以外はデフォルト値でよいと思います。
もしこの方法で見た目気になる箇所があれば、圧縮品質を調整したり、気になる箇所のテクスチャを個別で圧縮条件変えるのがよいと思います。
この後アップロードしたのがこちら。
ダウンロードサイズが減少したのがわかるでしょうか。
元々が比較的軽量なので変化が分かりづらいですが、リッチなテクスチャが多く含まれているとこれだけでもかなりの変化があると思います。
TexTransToolでのアトラス化
さて、先ほどの項ではテクスチャ圧縮の効果を体感できたものと思います。
ではテクスチャを一つにまとめて圧縮したらもっと軽いのでは…?というのがTexTransToolでできることです。
大概の場合、まとめると元テクスチャ1枚あたりの解像度は下がるので、どこまでやるかは見た目との相談になるでしょう。
個人的には上記のAssets Compressorでの圧縮で十分です。
Phys_Haolanの下にcreate emptyで空のオブジェクトを作ります。名前は何でもいいですが、わかりやすくtexとしました。
続いてこの空のオブジェクトにAdd Component→TTT AtlasTextureをアタッチします。
そうしましたらとりあえず全てのTargetにチェックを入れ、「Enable Optimizing~」を押します。
押した状態がアトラス化された状態です。
そのままアップロードしてみたのがこちら。
またぐっとダウンロードサイズが減ったのが確認できました。
Texture Sizeをデフォルト値の2048から下げると更に軽くなりますが、見栄えにも影響するのでほどほどに。
また今回は全部のテクスチャにチェックを入れましたが、解像度が小さくなると困るマテリアルだけチェックを外すことも可能なので、バランスをとってみてください。
Avatar optimizerによる軽量化
ここからはテクスチャサイズ以外のところの軽量化をやっていきます。
まずハオラン君のavatar descriptorがある箇所の下にAdd Component→AAO Trace And Optimizeをアタッチします。
これをつけるだけで自動的にいいかんじにしてくれる…という「なんかわからないけどすげぇ!」みたいなすごいやつです(語彙力)。
このままアップロードしたものがこちら。
容量的には殆ど変化ありませんが、スキンドメッシュとマテリアルスロットが減少しています。
ここから見栄えにあまり影響のないポリゴンを削っていきます。
多くの場合、服の下に隠れていて見えないポリゴンを消すことが多いです。
まずはpantsは完全に服の下なので思い切って消します。
チェックを外しEditorOnlyにすればアップロードされません。
続いて服・靴の下の体のメッシュも見えないので消しても問題ないだろうということで消します。
Body2のBlendShapesを絞ります。
Body2にAAO Remove Mesh By BlendShapesをアタッチし、先ほど絞ったBlendshapesの項目にチェックを入れます。
こうすると、絞った箇所のメッシュを自動でアップロード時に削除してくれるというものです。
(後から発覚しましたが、肩は絞らない方がよさそうです。見えるので)
そのままアップロードしてみます。
ポリゴン数が1万くらい減っているのがわかるでしょうか。
次はスキンドメッシュ・マテリアルスロットの削減を行いたいと思います。
たとえ全体でマテリアルが一つだとしても、パフォーマンスランクに影響するのはスキンドメッシュとマテリアルスロットの数になるため、まとめることができればベターです。
先ほどTrace And Optimizeをアタッチしたその下にAAO Merge Skinned Meshをいれます。
スキンメッシュレンダラーのスロットに各パーツを入れていきます。
この状態でアップロードすると、同じマテリアルを使用しているスキンドメッシュをまとめてくれる、そうするとそれに伴いマテリアルスロットも減るという寸法です。
顔のスキンドメッシュは含めること非推奨です。
なお注意点ですが、スキンドメッシュをまとめる関係上、衣装のオンオフアニメーションがある場合は使えなくなります。
そのままアップロードしたものがこちら。
スキンドメッシュとマテリアルスロットがぐっと削減できました。
ちなみにTexTransToolはテクスチャのアトラス化だけでなく、マテリアルの結合も行えます。
ということは、マテリアルを結合してからスキンドメッシュをまとめたらもっと減る…のですが、これをやると質感がおかしくなるケースが多いので、やっても問題なさそうなマテリアル同士を結合する必要があります。
MaterialMergeにチェックを入れれば完了です。
一応減るには減るのですが、思ったほどの効果は得られないのでPC版アバターでは積極的にやる理由は薄いでしょう。
ここまででダウンロードサイズやマテリアルスロットの数を減らすことができました。
正直これでも十分やっている方だと思います。
しかし軽量化した割にはvery poorのままでもやもや。
(この基準が現状に沿っているかは諸説ありますが…)
何がパフォーマンスランクを下げているかは色分け表示されています。
これによるとポリ数とPhysboneコンポーネントの値が引っかかってそう。
Physboneはオフにすればよいとしても、ポリ数は削るのが大変です。
上で紹介したMeshDeleterWithTexture betaを使うか、Blender等で頑張るか、Unityの有料アセットで頑張るか…になると思います。
が、この記事では割愛します。
今回のハオラン君に関してはQuest版パッケージにローポリ/Physbone削減Quest版が入っているのでこれをPC版マテリアルに差し替え、上記同様の操作を行ってみます。
容量もさらに削減され、パフォーマンスランクも一気にGoodまで来ました。
他にも非破壊でやれることは色々あると思いますが、今回は一旦この辺にしておきます。
Quest対応
このハオラン君は元々Quest対応版が入っているのでそれをアップロードすればよいのですが、そうではないアバターもあると思います。
この項ではPC版アバターからQuest対応prefabを作っていきます。
とはいえVRCQuestToolsがあまりにも優秀でほぼ説明することはないのですが…。
Tools→VRCQuestTools→Convert Avatar for Androidを押し、先ほどのアバターを選択し変換を押します。
Physbone等が多い場合は減らせと言われるのでその通りに操作してください。
完了したらQuest版prefabが誕生しているので、これをAndroid版としてアップロードするだけです。
なおQuest版ではTexTransToolのマテリアル結合は積極的にやっていいと思います。
というのもQuest版はシェーダーで変更できるパラメータがそれほど多くないので、まとめたとしてもそれほど影響出ることが少ないためです。
これにてQuest対応も完了です。
この方法で気になる箇所がある方は別途マテリアル調整してみてください。
おわりに
今回は非破壊の軽量化とQuest対応やってみました。いかがだったでしょうか。
繰り返しになりますが、簡単にできると思う範囲でやっていればOKだと思います。
苦にならない程度にやってみてください。
あなたとあなたの周りの負荷軽減に少しでも役に立てれば幸いです。
それではまた。