Unity的UGUI中使用ETC1+Alpha的格式

转载 2017年01月04日 01:14:03

转自:http://blog.csdn.net/langresser_king/article/details/52759899        

Unity5.3之后,Android平台的默认压缩纹理改为ETC2。ETC2支持半透明,使用也很方便,不过问题是尚未普及,尤其是低端机是不支持ETC2的。Unity对不支持ETC2的机子,在加载图片的时候会解压为RGBA,不过这样就会造成极大的内存浪费,也会严重影响加载速度。

        对于没有透明色且为2的整次幂的正方形图片,Unity会转为ETC1,所以模型的纹理是可以用默认的压缩格式。

        需要注意的是非2的整次幂的图片,以及含有半透明的图片。这里主要是UI图片资源。

        Unity提供了ETC1+Alpha的支持。在图片分页进行如图所示的设置


也可以通过代码进行自动化设置

[csharp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1.     private static void SetTextureSprite(AssetImporter ai, string tag = null)  
  2.     {  
  3.         TextureImporter importer = ai as TextureImporter;  
  4.         if (importer == nullreturn;  
  5.         importer.textureType = TextureImporterType.Sprite;  
  6.         importer.mipmapEnabled = false;  
  7.         importer.isReadable = false;  
  8.         if (tag != null)  
  9.         {  
  10.             tag = tag.Replace(GameConfig.AB_EXT, "");  
  11.             tag = tag.ToLower();  
  12.             importer.spritePackingTag = tag;  
  13.         }  
  14.  
  15. #if UNITY_ANDROID  
  16.         int maxSize = 1024;  
  17.         TextureImporterFormat format = TextureImporterFormat.AutomaticCompressed;  
  18.         int quality = 50;  
  19.         importer.GetPlatformTextureSettings("Android"out maxSize, out format, out quality);  
  20.   
  21.         // 压缩的格式,android下修改为分离alpha通道的etc1  
  22.         if (format == TextureImporterFormat.AutomaticCompressed)  
  23.         {  
  24.             importer.SetPlatformTextureSettings("Android", maxSize, TextureImporterFormat.ETC_RGB4, quality, true);  
  25.             importer.SetAllowsAlphaSplitting(true);  
  26.         }  
  27. #else  
  28.     // iPhone  
  29. #endif  
  30.     }  


这里要注意几点:

1、图片必须设置好Sprite Tag,即进行图集打包,才能支持ETC1+Alpha。

2、BuildSetting里面 Texture Compression要选成 ETC(default)。如果选成其他的,则会使用ETC2,这样在低端机可以显示,但是效率很低。

3、Project Setting--Graphic--Always Included Shaders里面添加 UI/DefaultETC1。如果没有添加则真机上显示异常。

4、Unity5.3.0以及之前的版本,UGUI的Image是不支持ETC1的,只有SpriteRender渲染正常。  最新版本是没问题的。

5、如果自己写了某些自定义Shader,如图片灰化,那么这个也要做相应的支持。否则渲染不正常。具体支持方式参考UI/DefaultETC1

相关文章推荐

Unity的UGUI中使用ETC1+Alpha的格式

Unity5.3之后,Android平台的默认压缩纹理改为ETC2。ETC2支持半透明,使用也很方便,不过问题是尚未普及,尤其是低端机是不支持ETC2的。Unity对不支持ETC2的机子,在加载图片的...

Unity的UGUI中使用ETC1+Alpha的格式

http://gad.qq.com/article/detail/7199107 相信很多开发人员都很奇怪UGUI中使用ETC1+Alpha的格式,因为自Unity5.3之后,安卓平台的默认压缩纹理...

ETC1压缩纹理格式详解

本来以为,ETC1作为Android 设备的OpenGL标准,开源且最常用的的一种压缩纹理格式,总会有人去翻译一下khronos的文档,读一下代码,给大家作个普及的,不料就是搜不到。没办法,尽管英文不...

转发收藏【原创】浅谈UGUI的ETC1+A的纹理压缩方案总结

这个信息很早了,2016年6月研究出来的,当时分享在ulua群1共享里面,然后就被大家的文件淹没了,但是这个话题并不老,这不整理群共享空间的时候,被我翻出来了,拿来炒炒。 ETC1+A还是目前业内绝...

Unity游戏开发图片纹理压缩方案

http://blog.csdn.net/goodai007/article/details/52679333 Unity3D引擎对纹理的处理是智能的:不论你放入的是PNG,PSD还是TGA...

【改进版】Unity工程里图片的RGB和Alpha通道的分离

【改进版】Unity工程里图片的RGB和Alpha通道的分离

[Unity优化]unity中的优化方法

1.从CPU、GPU和内存三方面进行优化:http://www.cnblogs.com/murongxiaopifu/p/4284988.html#top 2.UGUI的优化:http://www.j...

[UnityUI]九宫格在游戏中的使用

参考链接:http://blog.csdn.net/onerain88/article/details/12587301 九宫格的主要目的是处理图片拉伸效果,我们知道图片一旦被拉伸,它就会出现形变...
  • lyh916
  • lyh916
  • 2015-03-30 09:50
  • 3290

[Unity优化]对象池

对象池,简单的来说,就是当你想GameObject消失时,而这个GameObject又需要经常用到时,你就不必去Destroy掉,而是隐藏掉,为了便于管理,就把这些GameObject统一放在一个“池...
  • lyh916
  • lyh916
  • 2015-03-01 16:47
  • 1424
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)