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

Unity3D for Android 纹理压缩支持

首先附图:Unity3D for Android支持的纹理压缩格式 纹理压缩可以通过减少内存来显著地提高OpenGL的性能,使内存使用的效率更高。 Android设备支持很多格式的纹理压缩,这些...

[Unity3d]关于红米2和小米2等安卓手机为什么不支持 ETC2压缩模式

红米的显卡PowerVR SGX544是支持ETC1,ETC2,PVRTC等图片压缩格式的,硬件没问题但是关键内存太小,安卓系统只装到了4.2就没办法往上升级了,ETC2只有在OPGL ES 3.0上...
  • cjj9870
  • cjj9870
  • 2014年05月19日 11:13
  • 2723

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

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

Unity性能优化之内存篇(上)

项目的性能优化主要围绕CPU、GPU和内存三大方面进行。接上期CPU优化专讲,我们本期和大家分享内存方面的优化心得。 无论是游戏还是VR应用,内存管理都是其研发阶段的重中之重。 然而,在我们测评过...
  • UWA4D
  • UWA4D
  • 2016年12月14日 18:45
  • 4092

拆分贴图的Alpha通道 --对抗ETC1的原罪

虽然手游内容越来越丰富,手游安装包资源包越来越大,却不能否认开发者们一直在努力地缩减资源包容量。以玩家为之痴狂的精美游戏贴图的处理为例,在多方权衡采用合理尺寸的同时,还在采用各种历史悠久的久经考验的高...

UGUI Sprite Packer:图集自动ETC1+Alpha

http://www.jianshu.com/p/a08b861af4e9 今天研究了一下UGUI的图集生成,具体步骤就是设置Texture的Packing Tag名称,并且Sprite Mod...

Unity工程里图片的RGB和Alpha通道的分离,以及显示所有带有Alpha通道贴图的Material

背景:ETC1图片格式的罪孽,不支持Alpha通道。于是程序员们将一些气力浪费在Alpha通道的处理上。 为了能使用ETC1,同时某些透明效果必须有Alpha通道,一般的处理方式是将RGB和Alpha...

iOS6的旋屏控制技巧

iOS6的旋屏控制技巧 在iOS5.1 和 之前的版本中, 我们通常利用 shouldAutorotateToInterfaceOrientation: 来单独控制某个UIVie...

ETC 纹理压缩和 Alpha 通道处理

转自:http://malideveloper.arm.com/cn/develop-for-mali/sample-code/etcv1-texture-compression-and-alpha-...
  • MyArrow
  • MyArrow
  • 2014年03月11日 15:38
  • 15612

Unity项目UI图片压缩格式(UGUI)

UI制作时候使用的是Ps 8位 RGB通道的色彩。 但导出的是16位RGBA色彩的图片。 压缩格式都要求贴图宽高为2的N次幂,一般的精灵或贴图很难切成2的N次幂。 但是打成图集后宽高都是...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Unity的UGUI中使用ETC1+Alpha的格式
举报原因:
原因补充:

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