关注

如何在ETC1压缩方式中添加Alpha通道?

问题

  • 我想使用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。

 

这篇文章有帮助吗?
1 人中有 1 人觉得有帮助
还有其它问题?提交请求

0 评论

登录写评论。