FairyGUI-unity icon indicating copy to clipboard operation
FairyGUI-unity copied to clipboard

当开启TextmeshPro 字体后,Glist中子元素的字体无法使用边缘虚化裁剪

Open wmltogether opened this issue 4 years ago • 3 comments

err 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

wmltogether avatar Jul 09 '21 08:07 wmltogether

谢谢分享

xiaoguzhu avatar Jul 13 '21 16:07 xiaoguzhu

由于着色器的渲染模式是 Blend One OneMinusSrcAlpha, 执行Alpha混合时将一直使用1而不是这里计算出的Alpha值。可能还需要把渲染模式改成 Blend SrcAlpha OneMinusSrcAlpha,这样才能实现软裁剪的渐变效果。 并且需要将颜色除以Alpha值以保证结果跟之前(Blend One OneMinusSrcAlpha)一致。

tanghuipang avatar Apr 14 '23 09:04 tanghuipang

还要加 #ifdef SOFT_CLIPPED float4 _ClipBox = float4(-2, -2, 0, 0); float4 _ClipSoftness = float4(0, 0, 0, 0); #endif 否则报_ClipBox 和_ClipSoftness 找不到的错误

wangjinyan11 avatar Apr 23 '23 02:04 wangjinyan11

已添加

xiaoguzhu avatar Apr 08 '24 08:04 xiaoguzhu