» VR開発メモトップへ

Unityのビルドサイズを小さくするには

最終更新日:2021年09月07日

Unityのビルドサイズを最適化するTipsをまとめています(特にWebGLビルド)。

更新履歴

(2021年9月7日)テクスチャの最適化について追加
(2021年9月6日)とりあえずページ作成


Build Report Inspector

Build Report Inspectorパッケージはインストール必須です。一度ビルドした後にWindow > Open Last Build Reportを実行するとAssets/BuildReportsフォルダにビルドレポートが出力され、インスペクタでアセットやコードサイズの詳細を見ることができます。

Package Managerの左上の+からAdd package by nameでcom.unity.build-report-inspectorを入力するとインストールできます。

インスペクタのSourceAssetsタブで、必要のない巨大なアセットが含まれていないか上から順番にチェックしていきます。また、StrippingタブでAnalyze sizeボタンを押すと、コードモジュールごとのサイズが表示されます。

テクスチャの最適化

大体のケースで、テクスチャがビルドサイズのうち大きな割合を占めています。テクスチャのインポート設定を細かく調整していくことで、ビルドサイズを大きく減らせる場合が多いです。

テクスチャを選択してMax Size、Format等を調整してApplyボタンで再インポートすると、プレビュー画面の下に表示されているサイズの数字が変化します。プレビュー画面で画質にあまり影響が出ないことを確認しつつサイズを小さくしていきます。

特に解像度は影響が大きいのでMax Sizeでできるだけ小さくします(スカイボックス等で大胆に下げられる場合があります)。ミップマップが必要ない場合はGenerate Mip Mapsをオフにすると小さくなります。

インポート設定は.metaファイルに保存されるのでバージョン管理している場合はコミットします。

ASTCの場合はブロックサイズを大きくすると圧縮サイズが小さくなります。

TODO:テクスチャフォーマットの選択について

AssetGraph

多数のアセットのインポート設定を調整する場合、AssetGraphというパッケージが使用できます。

WebGLビルドの最適化

WebGLビルドでは、ビルドサイズがページの読み込み時間とインフラ費用に大きく影響するため、ベースサイズをできるだけ小さくしたいというのがあると思います。

Unity 2021.2以降に上げる

Unity 2021.2ではWebGLビルドで使用されるEmscriptenが2系に更新され、ビルドが速くなり、出力サイズが大きく減少しています。

ビルドサイズを小さくする設定

Code Optimization

Build Settings > Code OptimizationのSpeedをSizeに変更すると、wasm.unitywebが4.0MBから3.2MBになったりと結構効果が大きいです。

Brotli圧縮にする

Project SettingsのPublishing Settings > Compression FormatをBrotliにするとdata.unityweb、wasm.unitywebともに大幅にサイズが小さくなります。

Managed Stripping Level

Highにするとwasmが1割ほど小さくなります。

ビルドサイズ増に繋がる機能やライブラリ

URP(Universal Render Pipeline)

Unity 2021.1で新規プロジェクトを作成してURPのテンプレートをビルドしたとき、17.5MBほどのビルドができあがります。これを小さくしていきます。

URPテンプレートをそのままビルドする
data 12.2MB/wasm 5.2MB

SampleSceneからExampleAssets(サンプルの建物)を削除する
data 3MB/wasm 5.2MB

この状態でdataがなぜ3MBもあるかというと、下記のようにPost-processingのシェーダーと大きなテクスチャ群が含まれてしまっているためです。必要なければ、Assets/Settings/ForwardRendererのPost-processingをオフにすると取り除くことができます(Unity 2021以降)。

Used Assets and files from the Resources folder, sorted by uncompressed size:
 711.8 kb	 1.9% Packages/com.unity.render-pipelines.universal/Shaders/PostProcessing/UberPost.shader
 262.6 kb	 0.7% Packages/com.unity.render-pipelines.universal/Textures/SMAA/AreaTex.tga
 256.1 kb	 0.7% Packages/com.unity.render-pipelines.universal/Textures/FilmGrain/Thin02.png
 256.1 kb	 0.7% Packages/com.unity.render-pipelines.universal/Textures/FilmGrain/Thin01.png
 256.1 kb	 0.7% Packages/com.unity.render-pipelines.universal/Textures/FilmGrain/Medium06.png
 256.1 kb	 0.7% Packages/com.unity.render-pipelines.universal/Textures/FilmGrain/Medium05.png
 256.1 kb	 0.7% Packages/com.unity.render-pipelines.universal/Textures/FilmGrain/Medium04.png
 256.1 kb	 0.7% Packages/com.unity.render-pipelines.universal/Textures/FilmGrain/Medium03.png
 256.1 kb	 0.7% Packages/com.unity.render-pipelines.universal/Textures/FilmGrain/Medium02.png
 256.1 kb	 0.7% Packages/com.unity.render-pipelines.universal/Textures/FilmGrain/Medium01.png
 256.1 kb	 0.7% Packages/com.unity.render-pipelines.universal/Textures/FilmGrain/Large02.png
 256.1 kb	 0.7% Packages/com.unity.render-pipelines.universal/Textures/FilmGrain/Large01.png

data 1.2MB/wasm 5.2MB

さらにBrotli圧縮にする
data 1.0MB/wasm 3.8MB

とりあえずここまでは簡単に縮まりますが、これでもビルトインより数MB大きいため、数MBが惜しい場合はURPを使用しないことも検討したほうがいいかもしれません。

Zenject

Zenject 9.2.0をunitypackageでインポートした場合、Plugin/Zenject/OptionalExtrasフォルダのサンプルに含まれているアセット(SpaceShipのテクスチャファイル等)のために2.5MBほどビルドサイズが増えます。とりあえずOptionalExtrasフォルダを削除すれば、data 0.2MB/wasm 0.5MBくらいのインパクトで済むようです。

(軽量なVContainerに乗り換えるという手もありそうです)

新Input System

Unity 2021.1で空ビルドでwasmが2MBのところ、Input System 1.02をインストールしてビルドすると4MBに増えました。Build Report Inspectorの結果を見た感じ、Animation Module 0.7MBやPhysics Module 1.4MB等が含まれるようで、これらのモジュールをどのみち使用するようであればサイズ増には繋がらないかもしれません。

以下φ(..)メモメモ中

書いた人:こりん(@korinVR
» VR開発メモトップへ