基于ETC+Alpha压缩的UGUI贴图Shader兼容方案
针对UGUI贴图采用ETC+Alpha压缩方式后,UI自定义Shader需要进行相应的兼容处理。
首先,通过 _AlphaTex
属性引入一张存储Alpha通道信息的纹理。
在Shader代码中,首先获取 _MainTex
中的RGB颜色信息,并与 _TextureSampleAdd
属性相加,得到最终的颜色值 colorTex
。
接着,从 _AlphaTex
中获取Alpha通道信息。需要注意的是,Alpha通道信息存储在纹理的R通道中。
最后,将 colorTex
的RGB通道与 colorTex.a
和 AlphaTexAlpha
的乘积作为最终的Alpha通道,构建出新的颜色值 color
。
代码示例:
// PerRendererData
_AlphaTex("Sprite Alpha Texture", 2D) = "white" {}
// Shader代码片段
fixed4 colorTex = (tex2D(_MainTex, i.texcoord) + _TextureSampleAdd) * i.color;
fixed AlphaTexAlpha = tex2D(_AlphaTex, i.texcoord).r + _TextureSampleAdd.a;
fixed4 color = fixed4(colorTex.rgb, colorTex.a * AlphaTexAlpha);
color.a *= UnityGet2DClipping(i.worldPosition.xy, _ClipRect);
3.43KB
文件大小:
评论区