1 Shader "Hidden/BlendModesOverlay" {
2     Properties {
3         _MainTex (
"Screen Blended", 2D) = "" {}
4         _Overlay (
"Color", 2D) = "grey" {}
5     }
6     
7     CGINCLUDE
8
9     #include
"UnityCG.cginc"
10     
11     
struct v2f {
12         float4 pos : SV_POSITION;
13         float2 uv[
2] : TEXCOORD0;
14     };
15             
16     sampler2D _Overlay;
17     sampler2D _MainTex;
18     
19     half _Intensity;
20     half4 _MainTex_TexelSize;
21     half4 _UV_Transform = half4(
1, 0, 0, 1);
22         
23     v2f vert( appdata_img v ) {
24         v2f o;
25         o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
26         
27         o.uv[
0] = float2(
28             dot(v.texcoord.xy, _UV_Transform.xy),
29             dot(v.texcoord.xy, _UV_Transform.zw)
30         );
31         
32         #
if UNITY_UV_STARTS_AT_TOP
33         
if(_MainTex_TexelSize.y<0.0)
34             o.uv[
0].y = 1.0-o.uv[0].y;
35         #endif
36         
37         o.uv[
1] = v.texcoord.xy;
38         
return o;
39     }
40     
41     half4 fragAddSub (v2f i) : SV_Target {
42         half4 toAdd = tex2D(_Overlay, i.uv[
0]) * _Intensity;
43         
return tex2D(_MainTex, i.uv[1]) + toAdd;
44     }
45
46     half4 fragMultiply (v2f i) : SV_Target {
47         half4 toBlend = tex2D(_Overlay, i.uv[
0]) * _Intensity;
48         
return tex2D(_MainTex, i.uv[1]) * toBlend;
49     }
50             
51     half4 fragScreen (v2f i) : SV_Target {
52         half4 toBlend = (tex2D(_Overlay, i.uv[
0]) * _Intensity);
53         
return 1-(1-toBlend)*(1-(tex2D(_MainTex, i.uv[1])));
54     }
55
56     half4 fragOverlay (v2f i) : SV_Target {
57         half4 m = (tex2D(_Overlay, i.uv[
0]));// * 255.0;
58         half4 color = (tex2D(_MainTex, i.uv[
1]));//* 255.0;
59
60         // overlay blend mode
61         //color.rgb = (color.rgb/
255.0) * (color.rgb + ((2*m.rgb)/( 255.0 )) * (255.0-color.rgb));
62         //color.rgb /=
255.0;
63          
64         /*

65 if
(Target > ½) R = 1 - (1-2x(Target-½)) x (1-Blend)
66 if
(Target <= ½) R = (2xTarget) x Blend
67         */

68         
69         float3 check = step(
0.5, color.rgb);
70         float3 result =
0;
71         
72             result = check * (half3(
1,1,1) - ( (half3(1,1,1) - 2*(color.rgb-0.5)) * (1-m.rgb)));
73             result += (
1-check) * (2*color.rgb) * m.rgb;
74         
75         
return half4(lerp(color.rgb, result.rgb, (_Intensity)), color.a);
76     }
77     
78     half4 fragAlphaBlend (v2f i) : SV_Target {
79         half4 toAdd = tex2D(_Overlay, i.uv[
0]) ;
80         
return lerp(tex2D(_MainTex, i.uv[1]), toAdd, toAdd.a);
81     }
82
83
84     ENDCG
85     
86 Subshader {
87       ZTest Always Cull Off ZWrite Off
88       ColorMask RGB
89             
90  Pass {
91
92       CGPROGRAM
93       #pragma vertex vert
94       #pragma fragment fragAddSub
95       ENDCG
96   }
97
98  Pass {
99
100       CGPROGRAM
101       #pragma vertex vert
102       #pragma fragment fragScreen
103       ENDCG
104   }
105
106  Pass {
107
108       CGPROGRAM
109       #pragma vertex vert
110       #pragma fragment fragMultiply
111       ENDCG
112   }
113
114  Pass {
115
116       CGPROGRAM
117       #pragma vertex vert
118       #pragma fragment fragOverlay
119       ENDCG
120   }
121   
122  Pass {
123
124       CGPROGRAM
125       #pragma vertex vert
126       #pragma fragment fragAlphaBlend
127       ENDCG
128   }
129 }
130
131 Fallback off
132     
133 }
// shader


Gõ tìm kiếm nhanh...