当开启TextmeshPro 字体后,Glist中子元素的字体无法使用边缘虚化裁剪
FairyGUI Editor 2021.2.1
Unity 版本 2021.1.11f(Builtin 管线)
当开启 列表的“边缘虚化” 功能后 经测试 编辑器 和 Unity都无法正常对Glist中的TextmeshPro 字体进行裁剪。文字会溢出显示。
确认是FairyGUI-TMP.shader 中没有添加SOFT CLIPPED 代码,自行在shader中了加了soft clipped后正常了,希望更新一下TMP的shader
#pragma multi_compile NOT_CLIPPED CLIPPED SOFT_CLIPPED
pixel_t VertShader(vertex_t input) ...
#ifdef SOFT_CLIPPED
output.mask = mul(unity_ObjectToWorld, input.position).xy * _ClipBox.zw + _ClipBox.xy;
#endif
fixed4 PixShader(pixel_t input) : SV_Target ...
#ifdef SOFT_CLIPPED
float2 factor = float2(0,0);
if(input.mask.x<0)
factor.x = (1.0-abs(input.mask.x)) * _ClipSoftness.x;
else
factor.x = (1.0-input.mask.x) * _ClipSoftness.z;
if(input.mask.y<0)
factor.y = (1.0-abs(input.mask.y)) * _ClipSoftness.w;
else
factor.y = (1.0-input.mask.y) * _ClipSoftness.y;
faceColor.a *= clamp(min(factor.x, factor.y), 0.0, 1.0);
clip(faceColor.a - 0.001);
#endif
谢谢分享
由于着色器的渲染模式是 Blend One OneMinusSrcAlpha, 执行Alpha混合时将一直使用1而不是这里计算出的Alpha值。可能还需要把渲染模式改成 Blend SrcAlpha OneMinusSrcAlpha,这样才能实现软裁剪的渐变效果。 并且需要将颜色除以Alpha值以保证结果跟之前(Blend One OneMinusSrcAlpha)一致。
还要加 #ifdef SOFT_CLIPPED float4 _ClipBox = float4(-2, -2, 0, 0); float4 _ClipSoftness = float4(0, 0, 0, 0); #endif 否则报_ClipBox 和_ClipSoftness 找不到的错误
已添加