Unity优化篇 - 图片资源优化
这个主要是关于Unity当中图片资源,纹理贴图压缩格式相关的优化内容。
当我们把图片导入Unity的时候,在属性面板当中我们会根据不同平台进行格式压缩也就是Format选项。但是点开的时候会出现超多选项,如果不熟悉其中各个选项的作用整个人就是处于懵逼状态
如下图:
不知道选择哪个更适合当前的平台,下面让们一步步的进行了解。
- 图片的颜色通道:
RGBA32:32代表RGBA这4个通道总共占32位,也就是每一个通道占8位
RGBA16:16代表RGBA这4个通道总共占16位,也就是每一个通道占4位
位数越多,代表越清晰,颜色越丰富
一个字节(Byte)是8位,一个位是一个比特(bit),也就是1Byte = 8bit
- Unity纹理压缩格式:
常见的图片格式主要以PNG和JPG为主
PNG:无论压缩有透明
JPG:有损压缩无透明
无论我们导入什么格式的图片到Unity,Uniy都会转化为纹理格式的图片Texture2D
之所以要转化为纹理格式是因为图像为了存储信息而使用对信息的特殊编码方式,存储在磁盘或内存当中无法被GPU识别。而纹理格式是针对GPU的压缩格式GPU可以直接读取。
不同系统的GPU对于解压格式是不同的,无法使用一个压缩格式针对所有平台。比如有些格式可以再Android上使用但无法在IOS上使用,那么Unity会将无法读取的纹理格式同意转换为RGBA格式,RGBA是都认的。但是RGBA格式比较大,RGBA是无损的尤其是RGBA32,高清无压缩。
- Unity图集:
通常为了优化DrawCall,我们会把同一个UI界面上的图片放进一个图集里面,Unity的图集长宽只会是2的幂次方,比如:256*256 512*512等。而且图集占用内存的大小只和他的压缩格式和长宽有关,与图集中图片数量无关。Unity会根据图集内的图片大小自动调整图集大小,如果有新的图片放入图集,Unity会自动调整图集中所有图片的位置给新的图片腾出一块地方。当图片无论如何都放不下这张新图片时,Unity就会给图片换个合适的大房子,也就是将图片的长宽变大。此时图集占用的内存就会翻倍 如:256*256 --> 512*512 --> 1024*1024 --> 2048*2048。
所以我们应该尽可能地让一张图集放入最多的图片,不浪费图集上每一个地方。图集大小最好(必须)控制1024*1024。一旦超过1024*1024的图集占用内存会非常的大,而且通常会导致一些不必要的内存占用。比如过大的背景图可以切成多个块打包进图集,然后在Unity UI中拼接起来。
- 纹理压缩格式:
针对不同的平台,不同的贴图资源,结合实际需求可以选择不同的压缩格式,能够大大减少内存的占用。在项目中尽可能使用ETC2和PVRTC4等GPU直接支持的图片格式,不仅内存占用低性能特可以更好。只有当出现质量不及格时,在逐步的提升压缩格式来满足需求。
MipMap在UI贴图上一定要取消勾选它有点类似LOD技术,LOD技术主要针对的是模型资源。而MipMap针对的是纹理贴图,勾选MipMap后Unity会生成八个精度不同的贴图,根据贴图与摄像机距离远近选择不同精度的贴图。距离摄像机越远显示的贴图像素越低,反之像素越高。所以勾选MipMap必然会产生过大的占用内存,大概会将内存提升30%。因为大多数UI图片都是渲染在屏幕最上层所以没有太大必要勾选,对于具有较大纵深感的3D游戏,3D场景和角色一般建议勾选MipMap能有效的降低渲染宽带的压力,提升游戏的渲染效率。
- Android和IOS常用纹理格式:
为了让贴图在手机中运行时占用尽可能少的内存,需要设置贴图的压缩格式。目前Unity针对Android和IOS支持的压缩格式有:Android上的ETC和ETC2,IOS上的PVRTC和ASTC。以下是这四种格式的特点:
ETC:不支持透明通道,被所有Android设备支持
ETC2:支持透明通道,Android设备GPU必须支持OpenGL ES3.0才可以使用,对于不支持的设备上面有说到会以未压缩形式存在于内存中占用更多的内存。(Unity会将无法读取的纹理格式同意转换为RGBA格式,RGBA是都认的。但是RGBA格式比较大,RGBA是无损的尤其是RGBA32,高清无压缩)
PVRTC:所有苹果设备都支持,要求压缩纹理长宽相等且是2的幂次方(Power of 2)
ASTC:高质量低内存占用,未来可能普遍的压缩格式,现在有一部分机型不支持
一般来说目前Unity的手机游戏Android上非透明贴图会使用RGB Compressed ETC 4bits,有透明贴图情况下可以使用RGBA Compressed ETC2 8bits。IOS上非透明体图可以使用RGB Compressed PVRTC 4bits,有透明贴图的情况下RGBA Compressed PVRTC 4bits。
这里的bits概念的意思是每个像素占用的bit数举个例子:RGB Compressed PVRTC 4bits格式的1024*1024的贴图,其在内存中占用的大小 = 1024x1024x4(bits) = 4M(bits) = 512(Byte) = 0.5M
- 总结各平台推荐使用的压缩纹理格式:
Android:
无透明通道选择ETC,被所有Android支持
有通明通道选择ETC2,Android GPU必须支持OpenGL ES3.0,目前Android机型基本覆盖
IOS:
PVRTC 支持通明通道 所有IOS技能都支持,要求压缩纹理长宽相等,并且是2的幂次方
ASTC 支持透明通道 高质量低占用内存,IOS设备必须Iphone6 A8处理器以上支持。如果在不支持的设备上使用会被软解压成RGBA,从而数倍增加其内存占用。
Unity优化篇 - 图片资源优化相关推荐
- Unity优化篇 - 音频优化
参考:[内存优化]Unity音频资源优化 - 知乎 在Unity项目中音频的优化不可缺少,在很多时候甚至会成为内存杀手. 这篇主要记录关于Unity内音频设置与音频优化的一些方法,有什么不对或缺少的地 ...
- mysql优化篇_MySQL优化篇-查询优化
可以参考一下官方文档中的解释. 7. 优化 7.1. 优化概述 7.1.1. MySQL设计局限与折衷 7.1.2. 为可移植性设计应用程序 7.1.3. 我们已将MySQL用在何处? 7.1.4. ...
- 【Unity 优化篇】 | 优化专栏《导航帖》,全面学习Unity优化技巧,让我们的Unity技术上升一个档次
文章目录
- iOS性能优化篇 —— 耗电优化总结
手机App耗电的主要来源有以下四个因素: CPU处理,Processing 网络,Networking 定位,Location 图像,Graphics 耗电优化最终目的:通过尽可能降低CPU.G ...
- struts启动时加载_iOS优化篇之App启动时间优化
原文:橘子不酸丶http://www.zyiner.com/article/5 前言 最近由于体验感觉我们的app启动时间过长,因此做了APP的启动优化.本次优化主要从三个方面来做了启动时间的优化,m ...
- 161026、更快速将你的页面展示给用户[前端优化篇]
现在许多公司往往注重后端优化,而忽略了前端优化 想想如果辛苦优化了服务器,后台,排查了sql,却在最后页面加载展示的时候很慢,也得不偿失 其实,前后台优化都是相辅相成的,后台优化好了,响应请求速度快, ...
- 老司机谈APK瘦身套路-项目优化篇
老司机谈APK瘦身套路-项目优化篇 在上一篇文章中,老司机带领大家一起学习了图片资源的瘦身套路,收到了很多中学生读者的好评. 想了解的童鞋请点击:blog.csdn.net/mynameishua- ...
- Unity3D性能优化 之 内存优化篇
性能优化主要围绕CPU.GPU和内存三大方面 之 内存优化篇 无论是游戏还是VR应用,内存管理都是其研发阶段的重中之重. 然而,在我们测评过的大量项目中,90%以上的项目都存在不同程度的内存使用问题. ...
- 第一章:unity性能优化之内存优化
目录 前言 unity性能优化之内存的优化 一.unity Analysis工具的使用. 二.内存优化方法 1.设置和压缩图片 2.图片格式 3.动画文件 4.模型 5.RenderTexture(R ...
最新文章
- 调用个别f5 负载端口为80的vs时,返回值为空的问题
- 追加10亿!腾讯宣布设立15亿元“战疫基金”
- LCD编程_LCD控制器
- 专栏 | 基于 Jupyter 的特征工程手册:特征选择(四)
- 基于交换芯片的五元组的PCL规则过滤功能
- Java中的数组,列表,集合,映射,元组,记录文字
- 光纤收发器的故障处理
- SpringMvc 注解 @InitBinder 表单多对象精准绑定接收
- linux中sed工具的简单解析与实例参考
- AbstractQueuedSynchronizer 源码分析(共享锁)
- 1190: [HNOI2007]梦幻岛宝珠 - BZOJ
- POJ1067 取石子游戏 跪跪跪,很好的博弈论
- Windows 10 支持AAC编码的方法
- 简单的科普(引导模式、分区格式)
- 为什么游戏行业容易遭受DDoS攻击
- C#--解方程组之Jacobi迭代法
- 如何在library中使用productFlavors
- (2018 -NIPS)SimplE embedding for link prediction in knowledge
- 利用adb指令为IPTV盒子安装应用
- 系统DIY:雨林木风YlmF系统DIY Y1.5(转)