PavilionDV7の雑多なやつ

Qiitaから移行しました。UE4に関する記事から興味のあることまで色々書きます。

【UE5】パッケージングサイズを小さくしたかった

はじめに

ぷちコンの制作をしようと思ったら、なぜかパッケージサイズ削減の旅に出てしまった。

大した成果は得られなかったがパッケージングの設定や無効にしたプラグイン一覧を載せるので参考になれば幸い。

使用エンジン

UE5.1.1

まずはこちらのページを見よう

「プロジェクト - パッケージ化(Packaging)」を参照。

qiita.com

削減策の成果

「New Level...」で選択できる「Basic」をGames Default Mapにしてパッケージングしてみた。


パッケージング設定 + 不要なプラグインを無効

169MB



デフォルト設定

216MB


パッケージング設定

UE5やUE4.27(?)あたりからはお世話になるパッケージサイズ削減オプションに軒並みチェックが入っていたりするので、変更した箇所のみを載せる。

Project/Build Configulation

Development --> Shipping

プラグイン設定

画像で載せるのは大変なのでテキスト形式で載せる。

これまでのプロジェクトであまり使わなかったものや、ネットワーク関係、モバイル関係は軒並み無効にしている。とりあえずこの内容を真似してプラグインを無効化し、なにかパッケージに失敗したり起動に失敗したり、使いたい項目・機能が無かったら該当するプラグインを有効化する感じいいと思う。

{
            "Name": "Paper2D",
            "Enabled": false
        },
        {
            "Name": "OnlineSubsystemGooglePlay",
            "Enabled": false,
            "SupportedTargetPlatforms": [
                "Android"
            ]
        },
        {
            "Name": "AndroidPermission",
            "Enabled": false
        },
        {
            "Name": "AndroidFileServer",
            "Enabled": false
        },
        {
            "Name": "GooglePAD",
            "Enabled": false
        },
        {
            "Name": "AppleImageUtils",
            "Enabled": false
        },
        {
            "Name": "AppleMoviePlayer",
            "Enabled": false
        },
        {
            "Name": "AvfMedia",
            "Enabled": false
        },
        {
            "Name": "WebMMoviePlayer",
            "Enabled": false
        },
        {
            "Name": "AndroidMoviePlayer",
            "Enabled": false
        },
        {
            "Name": "AndroidMedia",
            "Enabled": false
        },
        {
            "Name": "LocationServicesBPLibrary",
            "Enabled": false
        },
        {
            "Name": "MobilePatchingUtils",
            "Enabled": false
        },
        {
            "Name": "GoogleCloudMessaging",
            "Enabled": false
        },
        {
            "Name": "OnlineSubsystemIOS",
            "Enabled": false,
            "SupportedTargetPlatforms": [
                "IOS",
                "TVOS"
            ]
        },
        {
            "Name": "CLionSourceCodeAccess",
            "Enabled": false
        },
        {
            "Name": "KDevelopSourceCodeAccess",
            "Enabled": false
        },
        {
            "Name": "CodeLiteSourceCodeAccess",
            "Enabled": false
        },
        {
            "Name": "NullSourceCodeAccess",
            "Enabled": false
        },
        {
            "Name": "RiderSourceCodeAccess",
            "Enabled": false
        },
        {
            "Name": "VisualStudioCodeSourceCodeAccess",
            "Enabled": false
        },
        {
            "Name": "XCodeSourceCodeAccess",
            "Enabled": false,
            "SupportedTargetPlatforms": [
                "Mac"
            ]
        },
        {
            "Name": "GitSourceControl",
            "Enabled": false
        },
        {
            "Name": "PerforceSourceControl",
            "Enabled": false
        },
        {
            "Name": "PlasticSourceControl",
            "Enabled": false
        },
        {
            "Name": "SubversionSourceControl",
            "Enabled": false
        },
        {
            "Name": "MacGraphicsSwitching",
            "Enabled": false
        },
        {
            "Name": "MediaCompositing",
            "Enabled": false
        },
        {
            "Name": "MediaPlate",
            "Enabled": false
        },
        {
            "Name": "ImgMedia",
            "Enabled": false
        },
        {
            "Name": "WindowsMoviePlayer",
            "Enabled": false
        },
        {
            "Name": "WmfMedia",
            "Enabled": false
        },
        {
            "Name": "AndroidDeviceProfileSelector",
            "Enabled": false
        },
        {
            "Name": "ExampleDeviceProfileSelector",
            "Enabled": false
        },
        {
            "Name": "IOSDeviceProfileSelector",
            "Enabled": false
        },
        {
            "Name": "LinuxDeviceProfileSelector",
            "Enabled": false
        },
        {
            "Name": "TcpMessaging",
            "Enabled": false
        },
        {
            "Name": "UdpMessaging",
            "Enabled": false
        },
        {
            "Name": "MobileLauncherProfileWizard",
            "Enabled": false
        },
        {
            "Name": "OpenImageDenoise",
            "Enabled": false
        },
        {
            "Name": "AlembicImporter",
            "Enabled": false
        },
        {
            "Name": "DatasmithContent",
            "Enabled": false
        },
        {
            "Name": "SpeedTreeImporter",
            "Enabled": false
        },
        {
            "Name": "ChaosClothEditor",
            "Enabled": false
        },
        {
            "Name": "ChaosCloth",
            "Enabled": false
        },
        {
            "Name": "ChunkDownloader",
            "Enabled": false
        },
        {
            "Name": "FacialAnimation",
            "Enabled": false
        },
        {
            "Name": "FastBuildController",
            "Enabled": false
        },
        {
            "Name": "Iris",
            "Enabled": false
        },
        {
            "Name": "LauncherChunkInstaller",
            "Enabled": false
        },
        {
            "Name": "OnlineSubsystemNull",
            "Enabled": false
        }

載せたテキストは.uprojectをメモ帳で開いて「Plugins」以下にコピペすると、そのプロジェクトでは無効化される。

追加で設定したほうがいい項目

サイズ削減に貢献しているか微妙だが、設定しておいた方がいい項目を挙げておく。

List of maps to include in a packaged build

ゲーム内で使用する.umapを指定する。

Forumでの報告によるとUE5.1から「Project Settings -> Maps & Modes -> Game Default Map」に指定された.umapのみがパッケージングの対象となるらしい。ステージごとに.umapを用意しているプロジェクトでは各レベルへの遷移に失敗してしまうはずなので、「List of maps to include in a packaged build」にゲームで使用される.umapすべて指定し、パッケージ対象のする必要がある。

Full Rebuild

チェックを入れる。

おわりに

本当は100MBあたりまで削れたら最高だけど、これ以上は厳しい気がする。

おまけ

Directories to never cookにエンジンコンテンツを指定する

試しに「Directories to never cook(クック対象に含めないディレクトリ)」にEngineフォルダを指定したけど120MBまで削るに留まった。デフォルトでついているBasic Shape(球体や立方体等)、マテリアル、マテリアル関数等々が使えなくなるのでゲームが起動できなくなる可能性が非常に高い。払う代償に対して得られるものはあまりにも小さいのでおすすめしない。

パッケージング後の各コンテンツの容量を調査

パッケージの設定で「Use Pak File」「Use Io Store」のチェックを外せば、各アセットは.pakにまとめられず.uasset形式でパッケージングされる。そこでどのファイルがどれくらい容量を取っているかWizTreeを使って見てみた。

赤枠がプロジェクト独自のコンテンツが納められるフォルダ。このあたりは削れる箇所はないので甘んじて受け入れるしかない。 最も容量を取っているものはBinariesフォルダにある実行ファイル。これだけで100MBの容量を取っている。

青枠がエンジンコンテンツが納められているフォルダ。Contentフォルダ内で最も容量を取っているものはEngineMaterial。自分が作るゲームは必ずどこかでデフォルトのマテリアルやテクスチャを使っているので、これを削るのは難しい。 それ以外のフォルダはほとんど容量を取っておらず、消したとしても得られる効果は低そう。

EngineフォルダはContentフォルダ以外にもPluginフォルダがあり、有効化されているプラグインで利用される各リソースが納められている。 「Interchange」というプラグインが多く容量を取っているが、これは恐らくアセットのインポートやエクスポートといった類の処理で利用されているものなので、無効化すると作業に非常に大きな影響を及ぼしかねないので無効化は難しい。 エンジンコンテンツと同じようにInterchange以外は小さな容量なので、無効化して得られる効果は低い。