ばーちゃるなれっじ Unityのエラー、アバター改変、イベントを検索 アプリで開く
‹ 戻る#技術・制作

VRAM削減のテクスチャ圧縮テクニック

アバターの重さの正体で意外と大きいのが、テクスチャによる VRAM(テクスチャメモリ)の消費です。パフォーマンスランクの判定項目の中でも、ポリゴン数より先に上限を超えやすく、しかも元画像を編集せず Unity のインポート設定だけで減らせます。この記事では、解像度と圧縮形式でどれくらい変わるかの数値、効く順に並べた手順、Quest(Android)向けの違い、劣化を目立たせないコツをまとめます。圧縮形式の仕様は Unity 2022.3 マニュアル、ランクの上限は VRChat Creators Docs に基づきます(2026年9月14日確認)。

VRAM削減の手順

どれくらい効くのか

解像度と圧縮形式ごとのテクスチャメモリの目安とランクの上限

テクスチャメモリは「幅 × 高さ × 1ピクセルあたりのビット数 ÷ 8」に、ミップマップ分の約 1.33 倍を掛けた値でほぼ決まります。PC 向けの主な形式は、DXT1(BC1)が 4bpp、DXT5(BC3)と BC7 が 8bpp、非圧縮の RGBA32 が 32bpp です。

2048×2048 の 1 枚あたり(ミップマップ込みの概算)
 DXT1(透過なし) 約 2.8MB
 DXT5 / BC7 約 5.3MB
 非圧縮 RGBA32 約 21MB

4096×4096 にすると上の 4 倍、1024×1024 にすると 1/4

ランクの上限は、PC が Excellent 40MB、Good 75MB、Medium 110MB、Poor 150MB、Android が 10MB、18MB、25MB、40MB です。4096 の DXT5 が数枚あるだけで PC の Good を超え、Android では 1 枚で Poor に届きます。つまり設定を 2 箇所(Max Size と形式)直すだけで、1 枚あたり数 MB から数十 MB 単位の削減がありえます。

手順1: 計測して大きい順に並べる

感覚で削るより、まず現状把握です。VRChat SDK のコントロールパネルでビルドすると、パフォーマンス統計にテクスチャメモリの合計とランクが出ます。Unity の Project ウィンドウでテクスチャを選ぶと、Inspector の下部にそのテクスチャの読み込み後のサイズが表示されるので、大きい順に見直します。上位の数枚を直すだけで大半が削れることが多いです。

Avatar Optimizer の Trace and Optimize を付けている場合、最適化後の値は SDK の統計には反映されません。実際の値は AAO の Actual Performance Window で確認します(「Avatar Optimizer(AAO)入門 非破壊でアバターを軽くする」Avatar Optimizer(AAO)入門 非破壊でアバターを軽くする)。

引用記事Avatar Optimizer(AAO)入門 非破壊でアバターを軽くするアバター

手順2: 解像度(Max Size)を見直す

テクスチャメモリを減らす手順(効く順)

Project ウィンドウでテクスチャを選択すると、Inspector にインポート設定が表示されます。ここの Max Size を下げるだけで、元画像はそのままに読み込み解像度だけが変わります。一段下げると約 1/4 になります。

解像度の目安(PC 版)
 4096 大きく映る顔・体のメインテクスチャで、どうしても必要なときだけ
 2048 メインテクスチャの標準。まずこれで十分
 1024 服・髪・小物
 512 アクセサリー、マスク画像、ほとんど映らないパーツ

Android 版は Android タブで別に設定し、上の一段下を目安にする

迷ったら一段下げて、鏡の前で見た目を確認する、を繰り返すのが安全です。VR 内で相手から見えるサイズを考えると、2048 と 4096 の差を体感できる場面は限られます。

手順3: 圧縮形式を確認する

同じ Inspector の Compression と Format も確認します。Compression が None(非圧縮)になっているテクスチャがあれば、それを Normal Quality にするだけで 1/4 から 1/8 になります。配布素材には非圧縮のまま届くものがあるので、導入したら一度全テクスチャを見て回る価値があります。

形式の選び方は次の通りです。

・透過を使わない色テクスチャ: DXT1(4bpp)。Alpha Source を None にすると自動で選ばれます
・透過やマスクを使うもの: DXT5(8bpp)。Unity は BC7 も同じ 8bpp で画質が高く、グラデーションが目立つ色やノーマルマップに向きます
・ノーマルマップ: Texture Type を Normal map にしておくと、用途に合った圧縮がかかります
・Android(Quest): ASTC を使います。ブロックサイズ 4x4 が 8bpp で最も高画質、6x6 が約 3.6bpp、8x8 が 2bpp と、数字が大きいほど軽く粗くなります

注意点として、Crunch 圧縮(Use Crunch Compression)は VRAM を減らしません。Unity マニュアルにも、可変ビットレートはディスク上のサイズにだけ効き、メモリ上のサイズは元の形式と同じと明記されています。ダウンロードを軽くしたいときの設定で、ランク対策には効きません。

手順4: 使っていないテクスチャを外す

消したパーツのマテリアルがメッシュに残っていると、そのテクスチャもテクスチャメモリに数えられます。マテリアルスロットに残った未使用のマテリアルを外すか、Avatar Optimizer の Trace and Optimize に自動で整理させます。

手順5: 再計測して見た目をチェック

設定後にもう一度ビルドして削減量を確認します。圧縮の劣化が目立ちやすいのは、ノーマルマップ、細い文字や模様、なめらかなグラデーションです。気になった箇所(特に顔周り)だけ BC7 にするか解像度を一段戻せば、見た目と軽さのよいバランスに落ち着きます。変更後は Apply を押さないと反映されません。

落とし穴になりやすい点

Android タブを触っていない: プラットフォームごとに設定が分かれています。PC で下げても、Android 版は Default の設定のままになります。Android タブで Override をオンにして設定してください。

Max Size を下げたのに変わらない: 元画像がその解像度より小さい場合は変わりません。また Apply を押し忘れていることもよくあります。

マスクや数値用の画像がぼやける: 圧縮で色替えマスクの境界が崩れることがあります。マスクは解像度を下げるより、形式を DXT5 か BC7 にして解像度を保つ方が結果がよいことがあります。

ランクが変わらない: テクスチャメモリ以外の項目(ポリゴン数、マテリアル数、PhysBone)が同じランクの上限を超えている可能性があります。全項目の上限は「アバターが灰色に? 表示設定とパフォーマンスランク(Performance Rank)の基本」を参照してください。

引用記事アバターが灰色に? 表示設定とパフォーマンスランク(Performance Rank)の基本初心者ガイド

よくある質問

Q. 画質が落ちるのが怖い
A. 顔だけ高解像度を維持し、他を下げるのが定番の落とし所です。相手の画面で自分のアバターが占める大きさを考えると、服や小物の 4096 はほぼ無駄になります。

Q. Quest 対応版でも同じ?
A. 考え方は同じですが、上限が PC の約 1/4 で、形式は ASTC です。PC 版で削減の感覚を掴んでから取り組むのがおすすめです(「Quest対応アバターの基本 制限と対応方法」Quest対応アバターの基本 制限と対応方法)。

引用記事Quest対応アバターの基本 制限と対応方法アバター

Q. どこまで削ればいい?
A. ランクが一段上がるところを目標にすると分かりやすいです。PC なら Good の 75MB、Android なら Medium の 25MB がよくある目標です。

Q. テクスチャの種類(ベースカラー・ノーマル・マスク)ごとの設定は?
A. 「ベースカラー・ノーマル・PBRの基礎と、迷子にならないファイル管理」に、種類ごとの sRGB や Texture Type の設定をまとめています。

引用記事ベースカラー・ノーマル・PBRの基礎と、迷子にならないファイル管理アバター

VRAM 削減は自分の見た目を守りながら他人の環境への負荷を下げる、いちばん割の良い軽量化です。重いと言われがちなアバターの人は、まずテクスチャから疑ってみてください。

参考

Unity 2022.3 マニュアル「Texture compression formats by platform」:https://docs.unity3d.com/2022.3/Documentation/Manual/class-TextureImporterOverride.html

VRChat Creators Docs「Avatar Performance Ranking System」:https://creators.vrchat.com/avatars/avatar-performance-ranking-system/