| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- // Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
- Shader "Hidden/BlendModesOverlay" {
- Properties {
- _MainTex ("Screen Blended", 2D) = "" {}
- _Overlay ("Color", 2D) = "grey" {}
- }
-
- CGINCLUDE
- #include "UnityCG.cginc"
-
- struct v2f {
- float4 pos : SV_POSITION;
- float2 uv[2] : TEXCOORD0;
- };
-
- sampler2D _Overlay;
- sampler2D _MainTex;
-
- half _Intensity;
- half4 _MainTex_TexelSize;
- half4 _UV_Transform = half4(1, 0, 0, 1);
-
- v2f vert( appdata_img v ) {
- v2f o;
- o.pos = UnityObjectToClipPos(v.vertex);
-
- o.uv[0] = float2(
- dot(v.texcoord.xy, _UV_Transform.xy),
- dot(v.texcoord.xy, _UV_Transform.zw)
- );
-
- #if UNITY_UV_STARTS_AT_TOP
- if(_MainTex_TexelSize.y<0.0)
- o.uv[0].y = 1.0-o.uv[0].y;
- #endif
-
- o.uv[1] = v.texcoord.xy;
- return o;
- }
-
- half4 fragAddSub (v2f i) : SV_Target {
- half4 toAdd = tex2D(_Overlay, i.uv[0]) * _Intensity;
- return tex2D(_MainTex, i.uv[1]) + toAdd;
- }
- half4 fragMultiply (v2f i) : SV_Target {
- half4 toBlend = tex2D(_Overlay, i.uv[0]) * _Intensity;
- return tex2D(_MainTex, i.uv[1]) * toBlend;
- }
-
- half4 fragScreen (v2f i) : SV_Target {
- half4 toBlend = (tex2D(_Overlay, i.uv[0]) * _Intensity);
- return 1-(1-toBlend)*(1-(tex2D(_MainTex, i.uv[1])));
- }
- half4 fragOverlay (v2f i) : SV_Target {
- half4 m = (tex2D(_Overlay, i.uv[0]));// * 255.0;
- half4 color = (tex2D(_MainTex, i.uv[1]));//* 255.0;
- // overlay blend mode
- //color.rgb = (color.rgb/255.0) * (color.rgb + ((2*m.rgb)/( 255.0 )) * (255.0-color.rgb));
- //color.rgb /= 255.0;
-
- /*
- if (Target > ½) R = 1 - (1-2x(Target-½)) x (1-Blend)
- if (Target <= ½) R = (2xTarget) x Blend
- */
-
- float3 check = step(0.5, color.rgb);
- float3 result = 0;
-
- result = check * (half3(1,1,1) - ( (half3(1,1,1) - 2*(color.rgb-0.5)) * (1-m.rgb)));
- result += (1-check) * (2*color.rgb) * m.rgb;
-
- return half4(lerp(color.rgb, result.rgb, (_Intensity)), color.a);
- }
-
- half4 fragAlphaBlend (v2f i) : SV_Target {
- half4 toAdd = tex2D(_Overlay, i.uv[0]) ;
- return lerp(tex2D(_MainTex, i.uv[1]), toAdd, toAdd.a * _Intensity);
- }
- ENDCG
-
- Subshader {
- ZTest Always Cull Off ZWrite Off
- ColorMask RGB
-
- Pass {
- CGPROGRAM
- #pragma vertex vert
- #pragma fragment fragAddSub
- ENDCG
- }
- Pass {
- CGPROGRAM
- #pragma vertex vert
- #pragma fragment fragScreen
- ENDCG
- }
- Pass {
- CGPROGRAM
- #pragma vertex vert
- #pragma fragment fragMultiply
- ENDCG
- }
- Pass {
- CGPROGRAM
- #pragma vertex vert
- #pragma fragment fragOverlay
- ENDCG
- }
-
- Pass {
- CGPROGRAM
- #pragma vertex vert
- #pragma fragment fragAlphaBlend
- ENDCG
- }
- }
- Fallback off
-
- } // shader
|