Unity3D_NGUI_安卓APK安装包瘦身实践

减包瘦身是个精细活。本文整理了0907版本操作过程,以备日后参考。

 

经过一番折腾,各位攻城狮的努力,美术设计师的支持,策划爷的理解,UI资源(图集、字体、单局外模型贴图)从45.4MB减少到24.5MB。如下表所示。

 

下文看图说话。实操中针对同一个资源,可组合应用多个压缩选项。文中所指【图集Atlas】是多个小图片的合集,【Texture】是单张图片,大小指的都是打包前的资源大小。

 

1   删除无效的、废弃的资源

理由是显然的,无效的、废弃的资源就应该移除项目工程之外。确认是否废弃资源可以通过以下几个方面考量:

Texture:(1)在prefab中搜索texture.png.meta文件的guid,确认是否被引用;(2)在C#代码中搜索文件名,确认是否被动态指定。

图集Atlas:(1)在prefab中搜索atlas.prefab.meta文件的guid,确认是否被引用。

图集Atlas的单个图片:(1)在prefab中搜索图片文件名,确认是否被直接引用;(2)在C#代码中搜索图片完整或局部文件名,确认是否被动态指定。

 

2   取消图集Atlas的正方形限制

工程项目中提供了图集制作工具(HDAtlasMaker),默认是生成正方形图集Atlas。然而此举很浪费,因为若限制图集为正方形,很多时候图集大部分区域是空白。事实上应取消正方形限制。

例子(无损):宽*高:2048*2048(16M) => 1024*2048(8M)

适用场合:去掉正方形限制后可缩减一个尺寸的Atlas。

 

3   使用TexturePackerGUI打包,勾选Trim属性去除透明边界

例子(无损):宽*高:512*1024(2M) => 512*512(1M)

适用场合:去掉透明边界后可缩减一个尺寸的Atlas。

使用TexturePackerGUI工具制作图集时,可以预览图集效果。勾选Trim属性的实质是,图集打包时设置Padding属性代替透明边界。

 

4   调整Texture初始默认导入设置

Texture的默认导入设置包含Mip Maps。然而Mip Maps是为了物体在视野远近不同而生成不同分辨率的纹理。而UI贴图不需要考虑远近,无需生成小纹理。所以应将Texture导入设置改用Advanced,并取消Generate Mip Maps。

无损:1.3M => 1.0M

适用场合:默认导入设置为Texture的全部UI图片资源。

 

5   调整Texture导入设置AdvancedAlpha透明通道)

(1)            无损:RGBA 32 Bits(2.3MB) => RGB 24 Bits(1.7MB)

适用场合:无Alpha透明通道的单个图片,如登陆背景、通用背景。

(2)            有损:RGB 24 Bits(1.7MB) => RGB ETC 4Bits(256KB)

此项压缩有损画质,然而压缩效果却很明显。注意ETC需设置资源宽高为2幂次方。实际尺寸非2幂次方时,将以伸缩处理。

适用场合:无Alpha透明通道,且画质要求较低的单个图片,如:结算背景、领奖背景、通用背景、Loading图、3D模型贴图等。

(3)            有损:RGB ETC 4Bits & Max 1024(256KB) => RGB ETC 4Bits & Max 512(64KB)

在(2)的基础上,此处设置宽高最大512,当实际尺寸超过512时将拉伸到实际尺寸,会进一步模糊画质。此处512也可根据实际情况选用256、128、64、32等。

适用场合:同(2),无Alpha透明通道,且画质要求更低的单个图片。

 

6   调整Texture导入设置AdvancedAlpha透明通道

(1)            有损:RGBA 32 Bits(1.1MB) => RGBA 16 Bits(0.5MB)

适用场合:有Alpha透明通道,且画质要求较低的单个图片。

(2)            有损:RGBA 16 Bits & Max 1024(0.5MB) => RGBA 16 Bits & Max 512(360KB)

适用场合:同(2),有Alpha透明通道,且画质要求更低的单个图片。画质在(2)的基础上进一步模糊。

 

7   TextureAtlas分离出来

例子(几乎无损):宽高:512*512(1M) => 256*512(0.5M)+ RGBA 16Bits(50KB)

适用场合:分离出尺寸最大的单个图片后,剩下小图片生成的图集Atlas能缩小一个尺寸。

 

8   去掉边缘发光

例子(几乎无损):宽高:640*326(0.8M) => 234*126(115KB)

适用场合:边缘发光去掉后对画质不影响或影响甚微的单个图片。

 

9   去掉边缘装饰

例子(几乎无损):宽高:585*141(322KB) => 510*79(157KB)

适用场合:边缘装饰去掉后对画质不影响或影响甚微的单个图片。

 

10              整合图集Atlas

例子(几乎无损):两个256*512(0.5M*2) => 256*512(0.5M)+若干独立小图

适用场合:图集小图片有交集,所属模块类似,且都有剩余空间,放一起刚刚好。

 

11              重新裁切透明边框尺寸Atlas

例子(几乎无损):512*512(0.5M) => 512*256(256KB)

适用场合: NGUI Font。由于UI Font不能直接Trim,需处理原始资源,切掉透明边框。

 

12              重新裁切透明边框尺寸Texture

例子(无损):640*499(0.6M) => 640*450(0.5M)

适用场景:有透明边框的Texture。由于Texture不能直接Trim,需处理原始资源,切掉透明边框。

 

13              缩小资源原始尺寸Atlas

例子(有损):宽*高:1024*2048(8M) => 1024*1024(4M)

适用场景:图集Atlas空白太多,且图集元素能接受小范围的画质模糊。

将小图片缩小80%,重新制作图集,实际应用UISprite时再通过代码恢复125%回到原始尺寸。

 

14              缩小资源原始尺寸Texture

例子(有损):宽*高:577*1024(1.7M)vs 480*852(1.2M)vs 288*512(432KB)

适用场景:登陆界面背景原始尺寸640*1136。

若直接导入原尺寸,则资源较大(2.1M)。

若按Max 1024导入也不小(1.7M)。

若按Max 512导入则只需432KB,然而此图为重要门面背景,画质不能忍。又因为导入设置不支持512~1024的中间尺寸,唯有手动缩小原始尺寸到合适尺寸和画质,比如此处中间版本【原图66.6% = 480*852(1.2M)】。

 

15              调整策划需求

例子(无损):640*630(1.2M) => 32*32(3KB

适用场景:特定需求,特定应用场景。

项目中的具体需求是,特定时间区间内显示运营Loading图,其他时间显示默认Loading图。这里可以让运营策划调整该特定时间区间,使之包含整个测试期间,那么默认Loading图就无需显示,其导入尺寸可缩小到最小。此处不直接删除默认Loading图是为了避免逻辑出错,且方便日后恢复。

 

16              统一背景资源

例子:背景大图。

背景大图等资源应尽量复用。以下曾经出现过的几个背景图差异微小,经商讨后,最终统一用第三个,删除另外两个。

 

17              缩减关键图集Atlas尺寸

例子:Common图集Atlas把ABCS品质独立出来,剩下打包更小尺寸的Atlas。关键图集出现概率很高,此处缩减操作是为内存考虑。

 

18              分析构建日志

例子:分析C:\Users\[你的用户名]\AppData\Local\Unity\Editor\Editor.log当中的构建日志部分,查看打包资源列表,发现:

(1)NGUI样例图集被打包进去了。

搜索发现并无被直接引用,而是间接引用。为防止出错不直接删除,而是将Max Size调整到很小。

(2)发现了重复图集。

(3)宠物图集占用5.3MB,而不是4.0MB,经检查发现导入设置有误,生成了Mip Maps。类似的大图集有好几个,逐一检查处理。

(4)新手引导和头像集合这两个图集很大,进一步将重点优化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/246330.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity3D之Shader自定义编辑器功能拓展

一、前言最近在开发一个关卡类的游戏,在导入一些3D物体的时候,发现很多时候同一个3D物体需要渲染的方式不一样,比如这颗树要双面渲染(Cull Off),但在很多情况下是可以剔除背面(Cull Back&#x…

理解依赖注入(IOC)

IOC:英文全称:Inversion of Control,中文名称:控制反转,它还有个名字叫依赖注入(Dependency Injection)。 作用:将各层的对象以松耦合的方式组织在一起,解耦,各层对象的调…

局域网win7计算机如何互访,局域网win7电脑的互访步骤

局域网win7电脑的互访步骤Windows7如何实现局域网内的互访?下面是局域网win7电脑互访的步骤,为大家提供参考。步骤一:同步工作组 不管使用的是什么版本的Windows操作系统,第一步,要保证联网的各计算机的工作组名称一致步骤二&…

服务器自动挂载硬盘,Linux硬盘分区及开机自动挂载

本文以CentOS 6.4为例,查看当前linux服务器分区:df -h查看当前linux服务器硬盘:fdisk -l/dev/sda 第一块硬盘/dev/sdb 第二块硬盘依此类推以/dev/sdb为新增硬盘为例,需要进行以下操作方可正常使用1、分区fdisk /dev/sdb依次输入n&…

GPU Pro2 - 1.Terrain and Ocean Rendering with Hardware Tessellation

最近时间多了起来,准备捡起扔下了的渲染部分的知识。想拜读下GPU Pro系列并且做个笔记,不知道自己能否坚持下来,但愿可以吧。自己能力也有限,写的东西也只是自己的理解,肯定有很多理解不到位甚至错误的地方&#xff0c…

GPU Pro2 - 3.Procedural Content Generation on the GPU

GPU Pro2 - 3.Procedural Content Generation on the GPU 这篇文章着重介绍了基于Brownian 噪声和高度图在GPU中实时生成和渲染无限大地形系统。 Procedural content generation (PCG)程序化生成在许多游戏中已经有广泛应用,从简单的随机物体摆放,到全…

GPU Gems1 - 1 用物理模型进行高效的水模拟(Effective Water Simulation from Physical Models)

该读书笔记大多内容参照了大神浅墨的该篇文章https://zhuanlan.zhihu.com/p/35974789 本章介绍了一种在GPU中模拟和渲染大的水体的系统。它把基本网格的集合波动于动态发现贴图的生成结合起来。 1.1 目标和范围 这章里,我们将由计算简单正弦函数之和开始&#xf…

GPU Gems1 - 2 水刻蚀的渲染

2.1 引言 光线从弯曲的表面反射或折射,因此只聚焦在受光面上的某些区域,于是就产生了刻蚀现象。本文从美学角度出发,不以纯物理的方式计算,使其很容易在大多数图形硬件上实现,效果又十分逼真。 2.2 刻蚀的计算 如果想…

邮箱服务器ip地址白名单,申请SSL证书时如何设置IP地址白名单和邮箱白名单

8月3日消息 在申请SSL证书时,由于您的邮箱可能默认设置或自定义设置了拦截国外邮件,可能会导致您接收不到CA的邮件,给验证、收取证书带来了不便;如果服务器,防火墙也设置了拦截操作,那么即使您按CA要求完成…

GPU Gems1 - 3 Dawn Demo中的皮肤渲染(Skin in the Dawn Demo)

该篇文章参照浅墨的这篇文章:https://zhuanlan.zhihu.com/p/35974789 Dawn是由NVIDIA创建的,用来介绍GeForce FX产品线的演示程序,它说明如何使用可编程的着色技术创建出逼真的人类角色。 最初的Dawn Demo由NVIDIA于2002年发布,…

GPU Gems1 - 5 改良的Perlin噪声的实现

Perlin 噪声 KenPerlin(1985a,2002)KenPerlin(1985a,2002) 定义的噪声函数是最常用的噪声函数,称为 Perlin 噪声。PerlinPerlin 噪声在全部 (x,y,z)(x,y,z) 整形顶点处的参数值都为 00,变化源自各顶点间的梯度向量,然后再进行平滑插值。 计算…

GPU Gems1 - 7 无数波动草叶的渲染

本文部分参照该文章https://zhuanlan.zhihu.com/p/35974789 1.引言 本章介绍了一种灵活的,广泛应用的草模拟。该方案渲染的草不仅生长得自然,也能够逼真地在风中舞动,而且性能很高。 2.概述 首先,需要意识到,对单个…

2003文件服务器迁移2016,服务器2016设置文件共享

服务器2016设置文件共享 内容精选换一换为了保证使用生成的镜像创建的新云服务器可以实现一键式重置密码功能,建议您安装密码重置插件CloudResetPwdAgent,可以应用一键式重置密码功能,给云服务器设置新密码。下载一键式重置密码插件CloudRese…

GPU Gems1 - 8 衍射的模拟

1.什么是衍射 小尺度的表面细节引起反射波彼此干扰,这个现象就是衍射。首先,计算机绘图的大多数表面反射模型都忽略自然光的波动效果。当表面的细节比光的波长(约1um)大许多时,不存在问题。但对于小尺寸的细节&#x…

GPU Gems1 - 9 有效的阴影体渲染

这章全面讲述了用于实时阴影渲染中常见两种流派之一的阴影体(Shadow Volumes)技术,又称模板阴影(Stencil Shadows)技术,重点是得到正确的角度的情形,减少几何图形和填充率的消耗。 简单谈谈阴影…

GPU Gems1 - 10 电影级的光照

本章中介绍了一个的简化的uberlight(可理解为“全能光照”)实现,此光照shader根据Ronen Barzel(1997,1999)提出的照明模型编写而成。而该模型的超集已由Pixar动画开发,并应用于《玩具总动员》、《怪物公司》、《海底总动员》等一系…

GPU Gems1 - 11 阴影贴图反走样

这章介绍了如何通过邻近百分比过滤方法(Percentage-Closer Filtering , PCF)有效减少阴影贴图的反走样,并描述了如何实现一个简化版本,并对PCF方法进行了一定改进。关于阴影贴图和PCF技术的一些链接 https://pubweb.eng.utah.edu…

GPU Gems1 - 12 全方位的阴影映射

在这章中,把阴影贴图的思路扩展到正确处理全方位的(点)光源中,其中包括了实现细节,也涉及到基本硬件能力不足时的低效运行策略。 首先,这篇文章也谈到了在实时计算机图形学中产生可见阴影的两个流行方法是…

GPU Gems1 - 13 使用遮挡区间映射产生模糊的阴影(Generating Soft Shadows Using Occlusion Interval Maps)

这章介绍了一种渲染软阴影的技术,称为遮挡区间映射(Occlusion Interval Maps),能够正确地在静态场景中渲染出光源沿着预定路径移动时产生的模糊阴影。之所以叫遮挡区间映射,是因为此算法使用纹理贴图来存储这种光源可见…

粗糙表面的微表面模型——Physically Based Material

关于文章 Microfacet Models for Refraction through Rough Sufaces的一点笔记,欢迎指正。 BSDF BSDF(Bidirectional Sacttering Distribution Function) 描述了光如何在物体表面散射。如果仅仅限制反射或者透射,BSDF经常被称作BRDF或者BTDF,然而BSDF将…