解决Unity UGUI 抗锯齿,解决Canvas Camera模式抖动问题

UGUI开启抗锯齿,解决Canvas Camera渲染模式下UI抖动问题

最近用unity搞一个小项目,用到了XCharts插件,这个插件除了一些小问题,总体还是不错的,最大的问题就是锯齿了。。官网文档里这么说的:

开启抗锯齿设置(在Unity里设置)。调整UI渲染模式为Camera模式,开启MSAA,设置4倍或更高抗锯齿。锯齿只能减少难以避免,像素越高锯齿越不明显。

其实不仅仅是XCharts组件,通过重载 void OnPopulateMesh(VertexHelper vh)函数,在UGUI上自绘的图都有这个问题,因为它使用三角形来构建图形的。

但是,将Canvas设置为Camera模式,并开启MSAA抗锯齿之后,虽然画面确实有所改善了,但新的问题就又随之而来了。因为项目需要根据用户操作改变Camera的位置和朝向,整个UI开始随着主相机坐标变化而抖动,渲染相机角度改变的时候,也会抖动,总之,整个UI颤抖的让人很难受。。

百度上搜索UI颤抖,解决方法居然是将Canvas渲染模式改为Screen Space - Overlay,呵呵,问题又回去了。用这个模式就开不了抗锯齿,用Camera模式就颤抖,难道就没有两全其美的办法了么??

经过一番折腾,终于找到了完美的解决方案,如下:

----------------

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
好的,我正在帮您寻找相关资源并准备回答您的问题。 以下是一个抗锯齿Unity UGUI Shader 实现的示例代码: ``` Shader "Custom/UGUI-AntiAliasing" { Properties { _MainTex ("Texture", 2D) = "white" {} _Color ("Color", Color) = (1,1,1,1) _Multiplier ("Multiplier", Range(0, 1)) = 0.5 _Outline ("Outline", Range(0, 1)) = 0.2 } SubShader { Tags {"Queue"="Transparent" "RenderType"="Transparent"} LOD 100 Pass { ZWrite Off Cull Off Fog { Mode Off } Blend SrcAlpha OneMinusSrcAlpha CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; fixed4 color : COLOR; }; struct v2f { float2 uv : TEXCOORD0; float4 vertex : SV_POSITION; float4 color : COLOR; }; sampler2D _MainTex; float _Multiplier; float _Outline; fixed4 _Color; v2f vert (appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.uv = v.uv; o.color = v.color * _Color; return o; } fixed4 frag (v2f i) : SV_Target { fixed4 col = tex2D(_MainTex, i.uv) * i.color; float dist = length(ddx(i.vertex.xy) + ddy(i.vertex.xy)); float alpha = smoothstep(_Outline-_Multiplier, _Outline, dist); col.a *= alpha; return col; } ENDCG } } FallBack "UI/Default" } ``` 您可以将上述代码保存到一个`.shader` 文件中,再将其添加到您的 Unity 项目中,即可使用此Shader。 请注意:Shader中的`_Multiplier`和`_Outline`参数是用来控制描边和抗锯齿程度的。您可以根据自己的需求进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

示申○言舌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值