优化 Android 移动设备的打包大小

科技   科技   2024-10-08 09:01   上海  


为移动平台开发游戏时最常见的需求之一是确保游戏的下载大小和移动设备上的存储大小。虚幻引擎 5 可以进行调整以显著减少包体大小。本文列出了一些可以实施以减少游戏大小的程序。 

出于本文的目的,我们将使用Cropout 示例项目。这是一款跨平台游戏,也适用于移动设备。 https://www.unrealengine.com/marketplace/en-US/product/cropout-sample-project

空包体

下载大小:75.1 MB
存储大小:196 MB

虚幻引擎 5.4 上的一个空白项目打包,部署到 Android(ASTC 压缩),最终下载大小为 75.1MB,在 Android 设备上的存储大小为 196MB。我们可以进一步减少这个大小。 

Cropout 示例项目的开发包

下载大小:218 MB
存储大小:662 MB

在创建 Cropout 示例项目的开发包时,我们最终得到 281MB 的下载大小和 662MB 的存储大小。开发有额外的库,这会增加的大小。顾名思义,开发仅用于调试目的,在发布游戏时绝不能使用。 

搭载多种 (ASTC/DXT/ETC2) 的 

下载大小:169 MB
存储大小:319 MB

ASTC(自适应可扩展纹理压缩)、DXT(DirectX 纹理压缩)和 ETC2(Ericsson 纹理压缩 2)都是纹理压缩格式,它们可以减少纹理占用的内存,从而实现更好的性能和更低的存储要求,同时不会显著影响视觉质量。在制作打包时,开发者倾向于选择所有的纹理压缩格式,以支持最广泛的 Android 设备。

这有点过头了。选择所有可用的压缩格式将对游戏纹理进行三次烘焙和打包(每种格式一次),并使包体大小变得相当大。

使用 ASTC 进行打包

下载大小:135 MB
存储大小:284 MB

最好不要选择所有三种纹理压缩选项,而是每种压缩格式都打包一个版本,并根据游戏的目标硬件分发二进制文件。通过 Google Play 分发游戏时可以使用此选项。 

根据Android 开发者指南,超过 80%(支持 Google Play)的 Android 设备支持 ASTC 格式,超过 95% 的设备支持 ETC2 格式。在仅为 ASTC 格式打包时,我们将包体大小从 169 MB 减少到 135 MB。存储空间也从 319 MB 减少到 284 MB。

前向着色与延迟着色

下载大小:132 MB
存储大小:281 MB

当谈到打包尺寸优化时,有几个注意事项。Cropout 的默认着色设置是延迟的。 

选择前向着色具有多种优势,例如在低端设备上性能更佳、内存和功耗更低,以及支持 MSAA(可提高视觉质量)。然而,它在处理复杂照明场景和多个动态光源方面存在局限性,这可能导致照明效果不够逼真。 

另一方面,延迟着色允许使用更先进的照明技术并高效处理许多动态光源,从而提供更高质量的视觉效果。但代价是更高的 GPU 和内存使用率,这可能会对移动设备的性能和电池寿命产生负面影响。 

根据游戏的光照、目标设备和性能选择,您可以选择前向着色或延迟着色。也就是说,选择前向着色时,尺寸会减小。  

删除不需要的插件

下载大小:131 MB
存储大小:276 MB

插件会影响包体大小(只要它们不是编辑器插件)。如果目标平台仅为移动平台,则可以从默认启用的插件中删除几个插件,以减少包体大小。 

有多个插件是引擎本身运行的核心,因此移除插件需要进行额外操作。只有当你非常确定插件不会破坏游戏本身时才禁用它们。不要禁用 Oodle 插件,因为它们有助于减少包体大小! 

Cropout 示例项目在这方面进行了相当优化。无论如何,您仍然可以删除一些不需要的插件以进一步减少构建大小。 

删除未使用的引擎组件

下载大小:128 MB
存储大小:273 MB

有时,游戏不使用默认引擎资产,这也会增加包体大小。您可以单独选择这些资产,并告诉虚幻引擎不要将它们打包。要了解这些引擎资产是什么,您需要提取包体本身。操作方法如下:  

提取 .obb 文件 

生成的 .apk 和 .obb 文件只是存档文件,可以使用 7zip 提取。提取后,如果项目设置中的 IOStore 选项已打开,您会注意到“.ucas”和“.utoc”文件以及“.pak”文件。

UnrealPak.exe 用于提取 .ucas

.ucas 文件包含游戏加载的资源,可以使用 /Engine/Binaries/Win64 文件夹中的“UnreakPak.exe”实用程序进一步提取。通过从命令行调用此实用程序,您可以查看 .ucas 文件包含的内容。 

在解压的文件夹中,除了包含专门为此游戏添加的游戏资产的 CropoutSample 文件夹外,还有一个 Engine 文件夹,其中包含引擎本身自动添加的资产。引擎需要其中许多资产才能正常运行。同时,如果您认为有些资产没有用处,可以从包体中排除它们。 

要从引擎中排除特定资产,您必须使用“DefaultPakFileRules.ini”

默认PakFileRules.ini

在项目的“Config”文件夹中创建一个新的文本文件。将其重命名为“DefaultPakFileRules.ini”。在此 ini 文件中,您可以添加规则以排除某些资产,包括引擎资产。 

下面是 ini 文件内容的示例。 

默认PakFileRules.ini

属性
内容
描述
目标
“Shipping、开发、调试”
指定哪种类型的打包目标应遵守此 ini 文件中设置的规则
排除自Paks
True
如果为 true,则此 ini 文件中指定的资产将从中排除
bOverrideChunkManifest
True
如果为 true,则 ChunkManifest 文件中设置的规则将被此处设置的值覆盖
平台
“iOS、Android”
指定这些规则应用于哪些目标平台
+文件



近期焦点
时隔五年,Tim再临上海,首波议题公布!
Unreal Fest Shanghai 2024 | 虚幻引擎技术开放日,开票啦!
通过游戏动画示例项目获取500多种免费动画
UOD Awards 2024 作品征集,启动!
虚幻引擎5.4现已发布
GDC 2024:来自State of Unreal的重大新闻
欢迎来到全新的虚幻引擎网站


扫描下方二维码,关注后点击菜单栏按钮“更多内容”并选择“联系我们”获得更多虚幻引擎的授权合作方式和技术支持
长按屏幕选择“识别二维码”关注虚幻引擎
“虚幻引擎”微信公众账号是Epic Games旗下Unreal Engine的中文官方微信频道,在这里我们与大家一起分享关于虚幻引擎的开发经验与最新活动。


虚幻引擎
Epic Games 旗下 Unreal Engine 虚幻引擎官方订阅号
 最新文章