VRChat Quest向けアバターやワールドを作ってる/いじってる人はテクスチャの圧縮形式をRGB(A) Compress ASTCにするのがおすすめ。テクスチャのしましまが減ってキレイになるぞ
設定方法
プロジェクト全体設定
特にテクスチャ毎に設定してない場合はこの設定が優先されるはず?なので、とりあえず設定しとくと良さそう
Build Settings → Android → Texture Compression
ここがDon't Overwriteになってる場合は、デフォルトのETC形式で圧縮が掛かり、テクスチャが汚くなってしまう。ASTCを選ぶ
テクスチャファイル個別での設定
プラットフォーム別オーバーライドでテクスチャ毎のあれこれ設定している人はこちらも確認する。個別にテクスチャを自動縮小させたいときもこちらで
ここをASTCにする。
以上!それだけ
ファイルサイズ小さくしたいなら、MaxSizeも小さくしてやると、元画像を残したままUnityが自動で縮小してくれるぞ
他tips
ASTCってなんなの?どうしてASTCがデフォルト設定になってないの?
Android系デバイスでは長らくETC2が一般的なテクスチャ方式だったが、2012年に「ETC2を置き換える、より良い圧縮形式」としてASTC形式が作られた。で普及してきたのだけども、ASTCは対応しているSoCの端末でしか使えない。
圧縮形式としての性能はETC2より高いビットレートをサポート、ETC2よりちょっと高品質(半デシベル程度)とのこと。
端末の統一が取れてるiOSはともかく、様々な端末のあるAndroidではまだETCの方が確実に動いて安心のようだ。それでUnityのAndroidビルド設定では、デフォルト圧縮形式がETCになっている。
ここまで前提
だけれども、VRChatが動くOculusQuestは1機種しかない。Questが使っているSoC Adreno 540はちゃんとASTC対応している。ので高品質のASTCを使って問題ない、というわけ。
公式OculusがASTCにしろ、とも言っている。公式なら仕方ない…
使おうぜ
いっぱいバリエーションあるけど何使えばいい?
block4x4からblock12x12まで
- blockサイズが小さいほど、解像度が高くキレイ、ファイルサイズは大きく
- blockサイズが大きいほど、解像度が低く汚く、ファイルサイズは小さく
という様子。
6x6~8x8あたりが標準的っぽい?文字のようなノイズが目立つと困るテクスチャでは6x6ぐらいが良さそう。他であれば8x8より大きくても良さそう。
VRAM使用量は圧縮でどうなるの?
CEDEC2013『工程の手戻りを最小限に 圧縮テクスチャ(PVRTC・DXTC・ETC)における傾向と対策』発表資料 | OPTPiX Labs Blog を読むと、現行のGPUは対応しているテクスチャ形式(今回のASTC、従来のETC/ETC2、その他DXTCなど)については、圧縮状態のままVRAMに格納されるようだ。つまりVRAM使用量の削減として有効のようだ。
ということでQuestの場合は、何も考えずにすてきなASTC形式が使える。使って良い。
画質参考【Unity】iOSでASTCフォーマットのテクスチャ圧縮を使う - テラシュールブログ
参考記事 Unity+Oculus Quest 開発メモ - フレームシンセシス