CQ_Intelligent-Technology-T.../Assets/GameAssets/Shader/Mohu.shader

84 lines
1.8 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Shader"MyShader/GaussianBlurMask"
{
Properties
{
[PerRendererData] _MainTex ("Texture", 2D) = "white" {}
_BlurSize ("Blur Size", Float) = 1.0
}
SubShader
{
Tags { "Queue"="Transparent" "RenderType"="Transparent" "IgnoreProjector"="True"}
Cull Off
Lighting Off
ZWrite Off
ZTest[unity_GUIZTestMode]
Blend SrcAlpha
OneMinusSrcAlpha
GrabPass
{
} //不带参数名默认抓取到_GrabTexture否则只会抓取一次
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct a2v
{
float4 vertex : POSITION;
float4 color : COLOR;
float2 uv : TEXCOORD0;
};
struct v2f
{
float4 pos : SV_POSITION;
float4 scrPos : TEXCOORD0;
float2 uv : TEXCOORD1;
fixed4 color : TEXCOORD2;
};
sampler2D _MainTex;
float4 _MainTex_ST;
float _BlurSize;
sampler2D _GrabTexture; //GrabPass抓取的纹理
float4 _GrabTexture_TexelSize; //纹理大小
v2f vert(a2v v)
{
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
o.scrPos = ComputeGrabScreenPos(o.pos); //抓取屏幕的坐标
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
o.color = v.color;
return o;
}
fixed4 frag(v2f i) : SV_Target
{
fixed4 diffuse = tex2D(_MainTex, i.uv);
fixed4 col = diffuse * i.color;
float weight[3] = { 0.4026, 0.2442, 0.0545 }; //一维5*5高斯滤波参数乘起来就是二维的正态分布
fixed3 sum = fixed3(0, 0, 0);
for (int x = -2; x <= 2; x++)
{
for (int y = -2; y <= 2; y++)
{
fixed2 offset = fixed2(x, y) * _GrabTexture_TexelSize.xy * _BlurSize;
fixed2 cur_UVxy = offset * i.scrPos.z + i.scrPos.xy;
sum += tex2D(_GrabTexture, cur_UVxy / i.scrPos.w).rgb * weight[abs(x)] * weight[abs(y)];
}
}
return col * fixed4(sum, 1);
}
ENDCG
}
}
}