Unity WebGLの配信を40.6%削減:敵画像の解像度とCrunch

ホラーRPG「ヴェイルモート」のWebGL配信を19,297,939から11,455,708バイトへ削減。NPOT画像のRGBA32、取込解像度、使わないResources、最高品質Crunchを順に確認した制作記録です。

Libra

公開 2026年10月20日 ・ 更新 2026年10月24日

この記事の要点3項目

原画を削らず、配信を40.6%減らしました。 敵の取込解像度、使わなくなった背景、Crunchを順に見直しました。

残り2つの要点を読む
  • 圧縮の設定と、実際の形式は別に確認しました。 別ポーズ三枚は、最終候補でもRGBA32のままです。
  • 容量が減っただけでは採用しません。 PC・模擬タッチの各15場面で、全19体の表示・動き・保存不変を確認しました。
目次7章
検証した環境最終確認 2026年10月20日
  • Unity 6.6(6000.6.0f1)・WebGL / Brotli
  • Windows Chrome・1280×720と812×375 DPR2の模擬タッチ
  • 比較元312b4079・軽量候補43a6a1a7

書いてあるのは、この環境で実際に試した結果です。ツールの仕様や料金は変わるので、重要な判断の前には公式の情報も確認してください。

「ヴェイルモート」(検証当時の題名は「葬約の国」)の主要四ファイルを、19,297,939から11,455,708バイトへ減らしました。 削減率は40.6%。原画は保管したまま、Unityへの取り込みと配信対象を変えた結果です。

敵や背景を追加した後、初回配信の12,000,000バイトという予算を超えていました。これは、絵を作り直す話に進む前に確認すべき点でした。

PNGの大きさではなく、取り込まれた画像を調べた

調査では、AssetDatabaseから読み込んだTexture2Dの幅・高さ・formatと、TextureImporterの設定を記録しました。次は実際に使った検査の抜粋です。対象フォルダーを巡回してJSONへ保存する部分は省略しています。

var texture = UnityEditor.AssetDatabase.LoadAssetAtPath<UnityEngine.Texture2D>(path);
var importer = (UnityEditor.TextureImporter)UnityEditor.AssetImporter.GetAtPath(path);

var width = texture.width;
var height = texture.height;
var format = texture.format.ToString();
var bytes = UnityEngine.Profiling.Profiler.GetRuntimeMemorySizeLong(texture);
var limit = importer.maxTextureSize;

これはEditorで取り込んだ画像の値です。ブラウザー全体のメモリや、WASMヒープの実使用量ではありません。 本作ではArt内36枚の合計が23,204,480バイトで、別ポーズ三枚だけで大きな部分を占めていました。

比較前の別ポーズ取込寸法実際の形式Editor報告値
葬盾683×1024RGBA322,798,496バイト
呪読683×1024RGBA322,798,496バイト
盲猟犬1024×683RGBA322,798,496バイト

NPOTは、幅や高さが2の累乗になっていない画像です。ここでは「圧縮を選んだはず」で止めず、実際にはRGBA32だったことを出発点にしました。

敵の表示寸法に合わせて、取込解像度を下げた

PC用の通常敵は設計座標上で高さ83〜198、主は最大207で描いています。大きな原画をそのまま常駐させるより、実際の戦闘画面で輪郭と肉の陰影が残る解像度を確かめました。

変更今回の扱い
通常・主・精鋭と別ポーズ最長辺の取込上限を512へ
小地図の人物上限1024から256へ
現在使う背景上限1024を維持
原画PNG書き換えず保管

npotScaleにはToNearestを指定しましたが、後から実形式も確認しています。通常敵はDefault型、別ポーズ三枚はSprite型で、最終候補の別ポーズは341×512または512×341のRGBA32でした。設定しただけで全部がPOT化・GPU圧縮されたとは扱いません。

別ポーズのEditor報告値は一枚699,296バイトになりました。この候補は配信予算と実表示の確認を通ったため、今回の検証では全画像の形式を揃える変更までは重ねていません。

使わない背景をResourcesの外へ移した

戦闘背景を湿地・洞窟・異形の聖域へ変更した後も、以前の背景三枚がResources内に残っていました。表示されていなくても、ビルドへ含まれる状態でした。

旧背景は保管用フォルダーへ移し、対応する未使用ロードを外しました。現在使う背景や町の絵は残しています。原画の保管と、プレイヤーへ送る画像を分けた変更です。

最高品質Crunchでも、実際の形式を確認した

POTとして取り込まれた画像へCrunchを適用し、compressionQualityを100にしました。NPOTの背景や別ポーズへ、一律に強制する処理にはしていません。

importer.crunchedCompression = true;
importer.compressionQuality = 100;
importer.SaveAndReimport();

適用後に、対象27枚がDXT1CrunchedまたはDXT5Crunchedになったことを記録しました。Crunchを有効にした回と、それ以前の解像度・配信対象の変更を分けると、容量は次の順で変わりました。

候補Unityのビルド報告判定
変更前2419,318,451バイト配信予算を超過
敵の取込を調整した2513,328,009バイトまだ超過
旧背景と小地図人物も調整した2612,572,292バイト12,000,000バイトは超過
最高品質Crunchを加えた2711,476,220バイトこの容量条件を通過

削減率の計算には、別に実ファイルを数えました。Unityのビルド報告と、配信する四ファイルの合計は集計範囲が違います。

配信ファイル変更前24軽量候補27
四ファイル合計19,297,939バイト11,455,708バイト
差—7,842,231バイト減少(40.6%)

容量と、見た目・動き・保存を別に確かめた

軽量候補27は通常ビルドで46.33秒、ビルドエラー0でした。PC・模擬タッチの各15場面で、通常・精鋭・主の全19体を表示し、三コマの動きと保存状態が変わらないことを確認しています。ブラウザーの例外も0でした。

軽量候補のヴェイルモート。湿地の戦場に黄緑の吸い虫、骨白の弔唱、腐肉色の執行役が異なる大きさで並ぶ
軽量候補27の実画面。圧縮前の画面と実サイズで見比べ、陰影と輪郭を確認した。敵は動いているため、同時刻の画素一致を比較したものではない。

容量の40.6%減少を、そのまま読み込み時間やフレームレートの改善率にはしていません。起動と実戦の性能は、回線条件・画面幅・GPUを記録して別に測ります。実スマホと、人の怖さ・楽しさ・聴感は未確認です。

UnityのWeb向け資料は、端末に合わない圧縮形式ではソフトウェア展開になることも説明しています。今回のPCでの取込結果や模擬タッチから、スマホのGPU常駐量を断定できません。

今回の再発防止は、取込設定とProjectSettingsもビルドのsourceHashへ含めることです。原画が同じでも、解像度・圧縮・メモリ上限を変えた候補を区別して残します。

回復対象の切替で停止した原因はWebGLの配列範囲外を調べた記録、日本語の文字を絞った方法はフォントサブセットの制作記録へまとめています。

よくある質問

よくある質問

NPOT画像なら必ず無圧縮になるのですか?

この記事で確認したのは、本作の別ポーズ三枚がRGBA32だったことです。画像寸法に加えてTexture Typeや実際の取込形式を確認します。すべてのNPOT画像へ一般化していません。

Crunchだけで40.6%減ったのですか?

いいえ。敵の取込解像度を下げ、不要な旧背景をResourcesの外へ移し、小さな人物画像も調整しました。その後、適用できる画像へ最高品質Crunchを使った合計の結果です。

スマホでも同じメモリ量になりますか?

実スマホは未確認です。UnityのWeb向け資料でも、圧縮形式を端末が扱えない場合のソフトウェア展開を説明しています。PCの模擬タッチは、スマホGPUでの検証にはなりません。

出典

出典

  1. 01TextureImporter.npotScale(Unity 6.0)Unity TechnologiesNPOT画像のスケーリングを指定するAPIを確認。実測環境はUnity 6.6で、指定した値だけで取込結果を判断していません。
  2. 02TextureImporter.crunchedCompression(Unity 6.0)Unity Technologies利用可能な場合にCrunchを使うこと、既定のプラットフォーム設定への適用であることを確認。
  3. 03Texture compression in Web(Unity 6.0)Unity Technologies圧縮形式の端末差、ソフトウェア展開、Build設定の優先と個別画像の上書きを確認。

この記事は役に立ちましたか?

関連記事