问题
-
我想使用ETC1来压缩纹理但是我想保留Alpha通道,不知道如何操作。
-
Unity的Alpha + ETC1压缩方式不适用于UI 元素。
原因
-
ETC1压缩方式只支持RGB 通道, 因此没法支持保有纹理像素的Alpha信息。
- 一个Bug导致了 UI 着色器无法支持Alpha及ETC1。
解决方案
Unity可以使用ETC1来压缩有Alpha通道的纹理,但是你必须事先为它们注明相同的打包标签,从而将他们放置在图集上。同时,你需要检查是否勾选了“为Android重新设置”和“使用ETC1压缩”选项。Unity会将产生的图集分成两块没有Alpha通道的纹理,然后在渲染过程的最后进行合并。
早于Unity 5.3.0版本的UI 着色器不支持ETC1 + Alpha。但该问题在Unity 5.5发布后已得到解决。
另外,Unity 5.3.7p2也提供了备选的修复方案。
然而,也可以修改着色器来使用Alpha纹理Sprite.associatedAlphaSplitTexture。你可以参考以下示例来暂时绕过这个问题。将UI-Default.shader复制到一个自定义着色器脚本内,修改着色器对alphaTexture进行采样并将其与材质进行融合 (详见下图):
修改脚本如下:
- 代码需要将从Sprite获得的AlphaTexture发送到着色器中 (查看下图代码) :
更多信息
请查阅以下链接了解更多信息:
http://forum.unity3d.com/threads/etc1-alpha-feature.350184/#post-2288772
http://docs.unity3d.com/Manual/class-TextureImporterAndroid.html
本文适用于Unity 5.x。