Shader "QFX/SF_VFX/Shield" { Properties { [HDR]_MainColor("MainColor", Color) = (1,1,1,1) _MainTex ("Texture", 2D) = "white" {} _Fresnel("Fresnel Intensity", Range(0,200)) = 3.0 _FresnelWidth("Fresnel Width", Range(0,2)) = 3.0 _Distort("Distort", Range(0, 100)) = 1.0 _ScrollSpeedU("Scroll U Speed",float) = 2 _ScrollSpeedV("Scroll V Speed",float) = 0 } SubShader { Tags{ "Queue" = "Overlay" "IgnoreProjector" = "True" "RenderType" = "Transparent" } Pass { Blend One One Cull Off Lighting Off ZWrite Off CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct v2f { fixed4 vertex : SV_POSITION; fixed4 screenPos: TEXCOORD1; }; sampler2D _CameraDepthTexture; fixed _Fresnel; fixed4 _MainColor; v2f vert (appdata_base v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.screenPos = ComputeScreenPos(o.vertex); o.screenPos.z = -UnityObjectToViewPos(v.vertex.xyz).z; UNITY_TRANSFER_DEPTH(o.screenPos.z); return o; } fixed4 frag (v2f i) : SV_Target { return _Fresnel * .02; } ENDCG } GrabPass{ "_GrabTexture" } Pass { Lighting Off ZWrite Off CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata { fixed4 vertex : POSITION; fixed4 normal: NORMAL; fixed3 uv : TEXCOORD0; }; struct v2f { fixed2 uv : TEXCOORD0; fixed4 vertex : SV_POSITION; fixed3 rimColor :TEXCOORD1; fixed4 screenPos: TEXCOORD2; }; sampler2D _MainTex, _CameraDepthTexture, _GrabTexture; fixed4 _MainTex_ST,_MainColor,_GrabTexture_ST, _GrabTexture_TexelSize; fixed _Fresnel, _FresnelWidth, _Distort, _IntersectionThreshold, _ScrollSpeedU, _ScrollSpeedV; v2f vert (appdata v) { v2f o; o.uv = TRANSFORM_TEX(v.uv, _MainTex); o.uv.x += _Time * _ScrollSpeedU; o.uv.y += _Time * _ScrollSpeedV; o.vertex = UnityObjectToClipPos(v.vertex); fixed3 viewDir = normalize(ObjSpaceViewDir(v.vertex)); fixed dotProduct = 1 - saturate(dot(v.normal, viewDir)); o.rimColor = smoothstep(1 - _FresnelWidth, 1.0, dotProduct) * .5f; o.screenPos = ComputeScreenPos(o.vertex); COMPUTE_EYEDEPTH(o.screenPos.z); return o; } fixed4 frag (v2f i) : SV_Target { fixed3 main = tex2D(_MainTex, i.uv); if (distance(main, 0) <= 0) discard; fixed2 offset = main * _Distort * _GrabTexture_TexelSize.xy; i.screenPos.xy = offset + i.screenPos.xy; fixed3 distortColor = tex2Dproj(_GrabTexture, i.screenPos); distortColor *= _MainColor * _MainColor.a + 1; fixed3 col = main * _MainColor * pow(_Fresnel, i.rimColor) ; col = lerp(distortColor, col, i.rimColor.r); col += 0.015 * (_MainColor * _Fresnel * 0.2); return fixed4(col,1); } ENDCG } } }