batteryDiagnosis/Assets/3rdParty/Sci-Fi VFX/Shaders/SF_VFX_Shield.shader

118 lines
2.8 KiB
Plaintext

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
}
}
}