unity UGUI 模糊效果

在需要模糊的image上面加一个mask,拖上material就行了(unity2022)

在这里插入图片描述

Shader "Custom/Blur"
{
	Properties
	{
		_Blur("Blur", float) = 10
	}
		SubShader
		{
			Tags{ "Queue" = "Transparent"
				}
 
			GrabPass
			{}
 
			Pass
			{
				CGPROGRAM
 
				#pragma vertex vert
				#pragma fragment frag
				#include "UnityCG.cginc"
 
				struct appdata
				{
					float4 vertex : POSITION;
					float2 uv : TEXCOORD0;
					fixed4 color : COLOR;
				};
 
				struct v2f
				{
					float4 grabPos : TEXCOORD0;
					float4 pos : SV_POSITION;
					float4 vertColor : COLOR;
				};
 
				v2f vert(appdata v)
				{
					v2f o;
					o.pos = UnityObjectToClipPos(v.vertex);
					o.grabPos = ComputeGrabScreenPos(o.pos);
					o.vertColor = v.color;
					return o;
				}
 
				sampler2D _GrabTexture;
				fixed4 _GrabTexture_TexelSize;
 
				float _Blur;
 
				half4 frag(v2f i) : SV_Target
				{
					float blur = _Blur;
					blur = max(1, blur);
 
					fixed4 col = (0, 0, 0, 0);
					float weight_total = 0;
 
					[loop]
					for (float x = -blur; x <= blur; x += 1)
					{
						float distance_normalized = abs(x / blur);
						float weight = exp(-0.5 * pow(distance_normalized, 2) * 5.0);
						weight_total += weight;
						col += tex2Dproj(_GrabTexture, i.grabPos + float4(x * _GrabTexture_TexelSize.x, 0, 0, 0)) * weight;
					}
 
					col /= weight_total;
					return col;
				}
				ENDCG
			}
			GrabPass
			{}
 
			Pass
			{
				CGPROGRAM
 
				#pragma vertex vert
				#pragma fragment frag
				#include "UnityCG.cginc"
 
				struct appdata
				{
					float4 vertex : POSITION;
					float2 uv : TEXCOORD0;
					fixed4 color : COLOR;
				};
 
				struct v2f
				{
					float4 grabPos : TEXCOORD0;
					float4 pos : SV_POSITION;
					float4 vertColor : COLOR;
				};
 
				v2f vert(appdata v)
				{
					v2f o;
					o.pos = UnityObjectToClipPos(v.vertex);
					o.grabPos = ComputeGrabScreenPos(o.pos);
					o.vertColor = v.color;
					return o;
				}
 
				sampler2D _GrabTexture;
				fixed4 _GrabTexture_TexelSize;
 
				float _Blur;
 
				half4 frag(v2f i) : SV_Target
				{
					float blur = _Blur;
					blur = max(1, blur);
 
					fixed4 col = (0, 0, 0, 0);
					float weight_total = 0;
 
					[loop]
					for (float y = -blur; y <= blur; y += 1)
					{
						float distance_normalized = abs(y / blur);
						float weight = exp(-0.5 * pow(distance_normalized, 2) * 5.0);
						weight_total += weight;
						col += tex2Dproj(_GrabTexture, i.grabPos + float4(0, y * _GrabTexture_TexelSize.y, 0, 0)) * weight;
					}
 
					col /= weight_total;
					return col;
				}
				ENDCG
			}
 
		}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值