Skip to content

Commit 46d49ff

Browse files
committed
add some post effect shader
1 parent 9223465 commit 46d49ff

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+4056
-2
lines changed

BloomFull.shader

+170
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,170 @@
1+
Shader "LX/BloomFull"
2+
{
3+
Properties
4+
{
5+
_MainTex ("Texture", 2D) = "white" {}
6+
}
7+
SubShader
8+
{
9+
Cull Off ZWrite Off ZTest Always
10+
11+
CGINCLUDE
12+
#include "UnityCG.cginc"
13+
14+
struct appdata
15+
{
16+
float4 vertex : POSITION;
17+
float2 uv : TEXCOORD0;
18+
};
19+
20+
struct v2f
21+
{
22+
float2 uv : TEXCOORD0;
23+
float4 vertex : SV_POSITION;
24+
};
25+
26+
struct v2f2
27+
{
28+
float4 vertex : SV_POSITION;
29+
half2 uv[5]:TEXCOORD0;
30+
};
31+
32+
sampler2D _MainTex;
33+
half4 _MainTex_TexelSize;
34+
sampler2D _BrightTex;
35+
float _BlurDistance;
36+
float _Threshold;
37+
float _Intensity;
38+
float _Lerp;
39+
float4 _BloomTint;
40+
41+
42+
v2f vert(appdata v)
43+
{
44+
v2f o;
45+
o.vertex = UnityObjectToClipPos(v.vertex);
46+
o.uv = v.uv;
47+
return o;
48+
}
49+
50+
fixed4 frag(v2f i) : SV_Target
51+
{
52+
fixed4 col = tex2D(_MainTex, i.uv);
53+
return col * step(_Threshold, Luminance(col))*_BloomTint;
54+
}
55+
56+
fixed4 kawaseBlur(v2f i) : SV_Target
57+
{
58+
fixed4 col = tex2D(_MainTex, i.uv + fixed2(0.5, 0.5) * _BlurDistance * _MainTex_TexelSize.xy) * 0.25;
59+
col += tex2D(_MainTex, i.uv + fixed2(-0.5, -0.5) * _BlurDistance * _MainTex_TexelSize.xy) * 0.25;
60+
col += tex2D(_MainTex, i.uv + fixed2(0.5, -0.5) * _BlurDistance * _MainTex_TexelSize.xy) * 0.25;
61+
col += tex2D(_MainTex, i.uv + fixed2(-0.5, 0.5) * _BlurDistance * _MainTex_TexelSize.xy) * 0.25;
62+
63+
return col;
64+
}
65+
66+
fixed4 boxBlur(v2f i) : SV_Target
67+
{
68+
fixed4 col = tex2D(_MainTex, i.uv + fixed2(1, 0) * _MainTex_TexelSize.xy * _BlurDistance) * 0.25;
69+
col += tex2D(_MainTex, i.uv + fixed2(-1, 0) * _MainTex_TexelSize.xy * _BlurDistance) * 0.25;
70+
col += tex2D(_MainTex, i.uv + fixed2(0, 1) * _MainTex_TexelSize.xy * _BlurDistance) * 0.25;
71+
col += tex2D(_MainTex, i.uv + fixed2(0, -1) * _MainTex_TexelSize.xy * _BlurDistance) * 0.25;
72+
73+
return col;
74+
}
75+
76+
v2f2 vertV(appdata v)
77+
{
78+
v2f2 o;
79+
o.vertex = UnityObjectToClipPos(v.vertex);
80+
81+
o.uv[0] = v.uv + float2(0, _MainTex_TexelSize.y * -3.2307692308 * _BlurDistance);
82+
o.uv[1] = v.uv + float2(0, _MainTex_TexelSize.y * -1.3846153846 * _BlurDistance);
83+
o.uv[2] = v.uv;
84+
o.uv[3] = v.uv + float2(0, _MainTex_TexelSize.y * 1.3846153846 * _BlurDistance);
85+
o.uv[4] = v.uv + float2(0, _MainTex_TexelSize.y * 3.2307692308 * _BlurDistance);
86+
87+
return o;
88+
}
89+
90+
v2f2 vertH(appdata v)
91+
{
92+
v2f2 o;
93+
o.vertex = UnityObjectToClipPos(v.vertex);
94+
o.uv[0] = v.uv + float2(_MainTex_TexelSize.x * -3.2307692308 * _BlurDistance, 0);
95+
o.uv[1] = v.uv + float2(_MainTex_TexelSize.x * -1.3846153846 * _BlurDistance, 0);
96+
o.uv[2] = v.uv;
97+
o.uv[3] = v.uv + float2(_MainTex_TexelSize.x * 1.3846153846 * _BlurDistance, 0);
98+
o.uv[4] = v.uv + float2(_MainTex_TexelSize.x * 3.2307692308 * _BlurDistance, 0);
99+
100+
return o;
101+
}
102+
103+
fixed4 gaussianBlur(v2f2 i) : SV_Target
104+
{
105+
fixed3 sum = tex2D(_MainTex, i.uv[0]).rgb * 0.0702702703;
106+
sum += tex2D(_MainTex, i.uv[1]).rgb * 0.3162162162;
107+
sum += tex2D(_MainTex, i.uv[2]).rgb * 0.2270270270;
108+
sum += tex2D(_MainTex, i.uv[3]).rgb * 0.3162162162;
109+
sum += tex2D(_MainTex, i.uv[4]).rgb * 0.0702702703;
110+
111+
return fixed4(sum, 1);
112+
}
113+
114+
fixed4 combine(v2f i) : SV_Target
115+
{
116+
fixed4 rawColor = tex2D(_MainTex, i.uv);
117+
fixed4 brightColor = tex2D(_MainTex, i.uv) + tex2D(_BrightTex, i.uv) * _Intensity;
118+
return lerp(rawColor, brightColor, _Lerp);
119+
}
120+
ENDCG
121+
122+
Pass
123+
{
124+
CGPROGRAM
125+
#pragma vertex vert
126+
#pragma fragment frag
127+
ENDCG
128+
}
129+
130+
Pass
131+
{
132+
CGPROGRAM
133+
#pragma vertex vert
134+
#pragma fragment kawaseBlur
135+
ENDCG
136+
}
137+
138+
Pass
139+
{
140+
CGPROGRAM
141+
#pragma vertex vert
142+
#pragma fragment boxBlur
143+
ENDCG
144+
}
145+
146+
Pass
147+
{
148+
CGPROGRAM
149+
#pragma vertex vertV
150+
#pragma fragment gaussianBlur
151+
ENDCG
152+
}
153+
154+
Pass
155+
{
156+
CGPROGRAM
157+
#pragma vertex vertH
158+
#pragma fragment gaussianBlur
159+
ENDCG
160+
}
161+
162+
Pass
163+
{
164+
CGPROGRAM
165+
#pragma vertex vert
166+
#pragma fragment combine
167+
ENDCG
168+
}
169+
}
170+
}

BokehBlur.shader

+71
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
Shader "LX/BokehBlur"
2+
{
3+
Properties
4+
{
5+
_MainTex ("Texture", 2D) = "white" {}
6+
}
7+
SubShader
8+
{
9+
Cull Off ZWrite Off ZTest Always
10+
11+
Pass
12+
{
13+
CGPROGRAM
14+
#pragma vertex vert
15+
#pragma fragment frag
16+
17+
#include "UnityCG.cginc"
18+
19+
struct appdata
20+
{
21+
float4 vertex : POSITION;
22+
float2 uv : TEXCOORD0;
23+
};
24+
25+
struct v2f
26+
{
27+
float2 uv : TEXCOORD0;
28+
float4 vertex : SV_POSITION;
29+
};
30+
31+
v2f vert(appdata v)
32+
{
33+
v2f o;
34+
o.vertex = UnityObjectToClipPos(v.vertex);
35+
o.uv = v.uv;
36+
return o;
37+
}
38+
39+
float _RotateDistance; //每次采样的旋转距离
40+
int _SampleCount; //采样数量
41+
float _Radius; //采样半径
42+
43+
sampler2D _MainTex;
44+
float4 _MainTex_TexelSize;
45+
46+
fixed4 frag(v2f i) : SV_Target
47+
{
48+
fixed4 finalColor;
49+
float singleWeight = 1;
50+
float totalWeight = 0;
51+
float2 offset = float2(0, _Radius);
52+
float rotateCos = cos(_RotateDistance);
53+
float rotateSin = sin(_RotateDistance);
54+
float2x2 rotateMatrix = float2x2(float2(rotateCos, rotateSin),
55+
float2(-rotateSin, rotateCos));
56+
57+
for (int index = 0; index < _SampleCount; index++)
58+
{
59+
singleWeight+=1/singleWeight;
60+
offset = mul(rotateMatrix, offset);
61+
fixed4 color= tex2D(_MainTex, i.uv + offset * _MainTex_TexelSize.xy*(1-singleWeight));
62+
finalColor +=color*color;
63+
totalWeight += color;
64+
}
65+
66+
return finalColor / totalWeight;
67+
}
68+
ENDCG
69+
}
70+
}
71+
}

BoxBlur.shader

+66
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
Shader "LX/BoxBlur"
2+
{
3+
Properties
4+
{
5+
_MainTex ("Texture", 2D) = "white" {}
6+
_SampleCount("SampleCount",int)=3
7+
_BlurSize("BlurSize",float)=1
8+
}
9+
SubShader
10+
{
11+
12+
Pass
13+
{
14+
CGPROGRAM
15+
#pragma vertex vert
16+
#pragma fragment extractBright
17+
18+
uniform int _SampleCount;
19+
uniform float _BlurSize;
20+
uniform float _StartIndex;
21+
uniform float _EndIndex;
22+
uniform float _SamplePercent;
23+
24+
#include "UnityCG.cginc"
25+
26+
struct appdata
27+
{
28+
float4 vertex : POSITION;
29+
float2 uv : TEXCOORD0;
30+
};
31+
32+
struct v2f
33+
{
34+
float2 uv : TEXCOORD0;
35+
float4 vertex : SV_POSITION;
36+
};
37+
38+
sampler2D _MainTex;
39+
float4 _MainTex_ST;
40+
uniform half4 _MainTex_TexelSize;
41+
42+
v2f vert(appdata v)
43+
{
44+
v2f o;
45+
o.vertex = UnityObjectToClipPos(v.vertex);
46+
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
47+
return o;
48+
}
49+
50+
fixed4 extractBright(v2f i) : SV_Target
51+
{
52+
float4 finalColor = fixed4(0, 0, 0, 1);
53+
for (int y = _StartIndex; y <= _EndIndex; y++)
54+
{
55+
for (int x = _StartIndex; x <= _EndIndex; x++)
56+
{
57+
fixed2 finalUV = i.uv + fixed2(x, y) * _MainTex_TexelSize.xy * _BlurSize;
58+
finalColor += tex2D(_MainTex, finalUV) / _SamplePercent;
59+
}
60+
}
61+
return finalColor;
62+
}
63+
ENDCG
64+
}
65+
}
66+
}

ChangeColorLight.shader

+71
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
Shader "LX/ChangeColorLight"
2+
{
3+
Properties
4+
{
5+
_MainTex ("Texture", 2D) = "white" {}
6+
_LightColorTex ("LightColorTex", 2D) = "white" {}
7+
_MaxLightLength ("MaxLightLength", float) = 10
8+
_LightPos ("LightPos", Vector) = (0,0,0)
9+
}
10+
SubShader
11+
{
12+
Tags
13+
{
14+
"RenderType"="Opaque"
15+
}
16+
LOD 100
17+
18+
Pass
19+
{
20+
CGPROGRAM
21+
#pragma vertex vert
22+
#pragma fragment frag
23+
24+
#include "UnityCG.cginc"
25+
26+
struct appdata
27+
{
28+
float4 vertex : POSITION;
29+
float3 normal : NORMAL;
30+
float2 uv : TEXCOORD0;
31+
};
32+
33+
struct v2f
34+
{
35+
float2 uv : TEXCOORD0;
36+
float4 vertex : SV_POSITION;
37+
float3 worldPos : TEXCOORD1;
38+
float3 worldNormal : TEXCOORD2;
39+
};
40+
41+
sampler2D _LightColorTex;
42+
sampler2D _MainTex;
43+
float4 _MainTex_ST;
44+
45+
float3 _LightPos;
46+
float _MaxLightLength;
47+
48+
49+
v2f vert(appdata v)
50+
{
51+
v2f o;
52+
o.vertex = UnityObjectToClipPos(v.vertex);
53+
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
54+
o.worldPos = mul(unity_ObjectToWorld, v.vertex);
55+
o.worldNormal = UnityObjectToWorldNormal(v.normal);
56+
return o;
57+
}
58+
59+
fixed4 frag(v2f i) : SV_Target
60+
{
61+
fixed4 col = tex2D(_MainTex, i.uv);
62+
float3 worldLightDir = UnityWorldSpaceLightDir(i.worldPos);
63+
fixed diffuse = saturate(dot(normalize(i.worldNormal), worldLightDir));
64+
fixed lightLength = length(_LightPos - i.worldPos);
65+
fixed uv = fixed2(saturate(lightLength / _MaxLightLength),saturate(lightLength / _MaxLightLength));
66+
return col * diffuse * tex2D(_LightColorTex, uv);
67+
}
68+
ENDCG
69+
}
70+
}
71+
}

0 commit comments

Comments
 (0)