anima2d的优化和压缩
使用anima2d做avatar发现,占用的大量的pass call 和 batches
a 使用小图做身体的每个部件,导致pass无法合并,参考官方例子后,使用atlas来实现,可以合并pass数量为1
b 使用相同的mat来处理
c spritemesh似乎无法合并,目前没找到combine的方法,具体的纹理也没有发现如何合并,有发现的请告知,因为使用换色来实现,理论上是可以通过无视mat来合并的,但是,spritemesh有个问题,就是他不是单纯的通过mesh来表现的,mesh只是用来对图片做处理的,并不是图片本身,图片并不是纹理,mesh的边缘并不是图片的边缘
d 换装 的方式可以通过换spritemesh或图来实现
e:具体如何压缩一个纯白图的图片在内存中的大小而又不影响使用呢?知道的可以告诉我一下,目前没发现具体方法。
附录一个压缩链接文章,理论上来讲,我们目前的项目是可以全部压缩的,没有精细的纹理:
干货:Unity游戏开发图片纹理压缩方案
- 标签:
- unity /
- 图片 /
- 压缩 /
- 5586
- 编辑
- 删除
Unity3D引擎对纹理的处理是智能的:不论你放入的是PNG,PSD还是TGA,它们都会被自动转换成Unity自己的Texture2D格式。
在Texture2D的设置选项中,你可以针对不同的平台,设置不同的压缩格式,如IOS设置成PVRTC4,Android平台设置成RGBA16等。嗯,非常的智能。
但是,在一些进阶的使用中,一些情况是难以满足的。比如,我们NGUI的图集中,在Android平台,使用ETC1纹理+Alpha通道图的方式;IOS平台,使用PVRTC4的纹理;部分要求清晰度较高的,使用RGBA16,但是使用RGBA16的渐变显示图片却惨不忍睹;一些要求高保真的,则需要直接使用RGBA32格式。有些时候,单纯的Unity纹理管理已经无法满足我们的需求了,需要做一下额外工作。
总结一下我自己的纹理压缩方案:
纹理压缩的策略
手游开发(Android/IOS)中,我会使用3个级别的压缩程度:高清晰无压缩、中清晰中压缩、低清晰高压缩;4种压缩方法:RGBA32, RGBA16+Dithering,ETC1+Alpha,PVRTC4。一般足够应付大部分的需求了。
高清晰无压缩 - RGBA32
![](http://upload-images.jianshu.io/upload_images/1835687-93cd7864ce9b9f2d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
RGBA32等同于原图了,优点是清晰、与原图一致,缺点是内存占用十分大;对于一些美术要求最好清晰度的图片,是首选。
要注意一些png图片,在硬盘中占用几KB,怎么在Unity中显示却变大?因为Unity显示的是Texture大小,是实际运行时占用内存的大小,而png却是一种压缩显示格式;可以这样理解,png类似于zip格式,是一个压缩文件,只不过在运行时会自动解压解析罢了。
中清晰中压缩 - RGBA16 + Dithering
RGBA16+Dithering
![](http://upload-images.jianshu.io/upload_images/1835687-aa2ad9c3f0e07ded.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
既然叫RGBA16,自然就是RGBA32的阉割版。
对于一些采用渐变的图片,从RGBA32转换成RGBA16,能明显的看出颜色的层叠变化,如上图。
![](http://upload-images.jianshu.io/upload_images/1835687-de31189408370f5e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
RGBA16的优点,内存占用是RGBA32的1/2;搭配上Dithering抖动,在原尺寸下看清晰度一模一样;
缺点,Unity原生不支持Dithering抖动,需要自己做工具对图片做处理;对于需要放大、拉伸的图片,Dithering抖动的支持不好,会有非常明显的颗粒感。
如何进行Dithering抖动?
![](http://upload-images.jianshu.io/upload_images/1835687-81e518c83fda9b90.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
在我的项目中,TexturePacker具有非常重要的作用,像UI的图集生成,预先生成好正方形的IOS PVRTC4图集和非正方形的Android ETC1图集、 缩放原图50%等工作都由TexturePacker完成。
同样,对图像进行抖动处理,也是预先在TexturePacker使用FloydSteinberg算法进行图像抖动,再在Unity中导入使用。
TexturePacker提供命令行工具,可以做成自动化的工具。具体方法这里不详述。
RGB16
![](http://upload-images.jianshu.io/upload_images/1835687-2aff61ed971cb8eb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
而RGB16,是主要针对一些,不带透明通道,同时长宽又不是2的次方的图片;对于这些图片,使用RGB16可以降低一半的内存,但是效果会略逊于RGB32。
当然了,RGB16其实也是可以搭配抖动,也能提升显示效果;但同样的Dithering抖动对拉伸放大是不友好的。
低清晰高压缩 - ETC1+Alpha/PVRTC4
很多初学者都会疑惑,为什么游戏开发中经常看到一些图片,需要设置成2的次方?因为像ETC1、PVRTC4等这类在内存中无需解压、直接被GPU支持的格式,占用内存极低,而且性能效率也是最好的。
但是,相对RGBA32,还是能肉眼看出质量有所下降的。
ETC1
ETC1+Alpha一般应用在Android版的UI图集中,ETC1不带透明通道,所以需要外挂一张同样是ETC1格式的Alpha通道图。方法是,在原RGBA32的原图中,提取RGB生成第一张ETC1,再提取A通道,填充另一张ETC1的R通道;游戏运行时,Shader将两张ETC1图片进行混合。
生成Alpha通道图的方法可参考:
http://blog.csdn.net/u010153703/article/details/45502895
要配合ETC1+Alpha,还需要Shader支持,这里提供参考直接修改NGUI的Unlit/Transparent With Colored的Shader。
![](http://upload-images.jianshu.io/upload_images/1835687-8185f356b0bd62ea.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
PVRTC4
PVRTC4在Unity中是直接支持的,不过要注意的细节是,它必须是二次方正方形;也就是说,长宽在二次方的同时,还必须要相等。
几种纹理格式的对比
格式 | 内存占用 | 质量 | 透明 | 二次方大小 | 建议使用场合 |
---|---|---|---|---|---|
RGBA32 | 1 | ★★★★★ | 有 | 无需 | 清晰度要求极高 |
RGBA16+Dithering | 1/2 | ★★★★ | 有 | 无需 | UI、头像、卡牌、不会进行拉伸放大 |
RGBA16 | 1/2 | ★★★ | 有 | 无需 | UI、头像、卡牌,不带渐变,颜色不丰富,需要拉伸放大 |
RGB16+Dithering | 1/2 | ★★★★ | 无 | 无需 | UI、头像、卡牌、不透明、不会进行拉伸放大 |
RGB16 | 1/2 | ★★★ | 无 | 无需 | UI、头像、卡牌、不透明、不渐变,不会进行拉伸放大 |
RGB(ETC1) + Alpha(ETC1) | 1/4 | ★★★ | 有 | 需要二次方,长宽可不一样 | 尽可能默认使用,在质量不满足时再考虑使用上边的格式 |
RGB(ETC1) | 1/8 | ★★★ | 无 | 需要二次方,长宽可不一样 | 尽可能默认使用,在质量不满足时再考虑使用上边的格式 |
PVRTC4 | 1/8 | ★★ | 无 | 需要二次方正方形,长宽一样 | 尽可能默认使用,在质量不满足时再考虑使用上边的格式 |
- 内存占用,相对于RGBA32做比较
- 质量星级,更多是本人感受,仅供参考
在项目中,尽可能是使用ETC1和PVRTV4等GPU直接支持的图片格式,不仅内存占用低、性能也更好;当出现质量不及格时,再逐步的提升压缩格式,来满足需要。
因此,实际项目中要混搭各种纹理格式。
转载于:https://www.cnblogs.com/gonghongmiao/p/8289060.html
anima2d的优化和压缩相关推荐
- RLE压缩及优化--图片压缩
RLE压缩及优化--图片压缩 分类: 开发经验以及优化 2005-03-23 17:55 535人阅读 评论(0) 收藏 举报 简单的说RLE压缩就是将一串连续的相同数据转化为特定的格式达到压缩的目的 ...
- Linux---Apache网页优化---网页压缩
Linux-Apache网页优化-网页压缩 一.Apache网页优化概述 1.在企业中,部署Apache后只采用默认的配置参数,会引发网站很多问题,换言之默认配置是针对以前较低的服务器配置的,以前的配 ...
- 性能优化——图片压缩、加载和格式选择
本文首发于政采云前端团队博客:性能优化--图片压缩.加载和格式选择 https://www.zoo.team/article/images-compress 前言 相信大家都听说过 "258 ...
- linux命令操作改变图片大小,如何在Linux命令行中优化和压缩JPEG或PNG图像
原标题:如何在Linux命令行中优化和压缩JPEG或PNG图像 来自:Linux迷https://www.linuxmi.com/linux-yasuo-jpeg-png.html 您有很多图像,并且 ...
- java 指针 地址压缩_JVM优化之压缩普通对象指针(CompressedOops)
通常64位JVM消耗的内存会比32位的大1.5倍,这是因为对象指针在64位架构下,长度会翻倍(更宽的寻址). 对于那些将要从32位平台移植到64位的应用来说,平白无辜多了1/2的内存占用,这是开发者不 ...
- hadoop hive集群_Hive的优化和压缩
使用之前的数据库 执行语句 explain select count(*) from emp; explain可以帮助我们看到有多少个任务 会出现下面的信息根标签,操作语法树等信息 根标签 操作语法树 ...
- UE4中动画优化与压缩
动画优化 在虚幻引擎中使用动画压缩是为了减少在游戏中使用动画时骨架动画数据占用的内存量.可以使用多种方法完成动画压缩: 删除关键帧 - 很多动画都具有平滑变化的动作,其中包含可以在没有明显影响动作整体 ...
- Nginx 性能优化 Gzip 压缩配置
一.分析 Nginx开启Gzip压缩功能, 可以使网站的css.js .xml.html 文件在传输时进行压缩,提高访问速度, 进而优化Nginx性能! Gzip压缩作用:将响应报⽂发送⾄客户端之前可 ...
- Android性能优化——图片压缩的终极选择libjpeg-turbo
文章目录 概述 需求分析 各种压缩方式 libjepg-turbo+jnigraphics 介绍 编译 使用 引用文章 概述 之前在网络上搜索Android图片压缩,能看到各种各样的关于图片压缩的文章 ...
最新文章
- python数组排序(递归实现)
- Python常用正则表达式总结
- 对接口编程:接口和抽象类
- 强制删除tfs未迁入项的两个方法。
- 小汤学编程之MySQL(二)——数据库操作、表结构操作、表数据操作、查询数据和数据类型
- java中继承applet类_java.applet.Applet类
- Emacs正则表达式+零宽断言/环视
- android(安卓)开源框架——六款【转】
- 运维必看:2017 年 Python 大事件年度盘点!
- 【LeetCode】【数组】题号:*665,非递减数列
- 知识星球限时优惠活动,速进!
- 百度近期开始大规模清理不良P2P网贷平台
- spring boot官方配置
- Android开发之使用Web Service进行网络编程
- SISD、MIMD、SIMD、MISD系统介绍
- 字母序列号生成 A...Z..AA..ZZ....
- java iText 的jar导出pdf格式,禁止浏览器预览,直接下载功能
- android hook方法替换,Android Hook入门教程
- excel根据条件列转行_excel怎么批量把行变成列
- 最新整理Spring面试题2023
热门文章
- HTML+CSS系列学习
- c语言指针p=*q,C语言中指针*p=*q与p=q有什么区别
- 计算机图形学上机实验一-画出一个钻石
- 9款高质量学习软件,原来学霸都是这么炼成的!
- 终端准入安全之五种准入规则简介
- Qt +百度地图+获取返回位置点
- python多点找色找图_[按键精灵教程]带你了解多点找色、多点比色
- html5单位转换器,Converter单位转换器
- 写给毕业未5年的你和我
- springboot框架开发医院云HIS 住院医生站、住院护士站功能实现