ro-webgl/Assets/Shaders/FX_Effect/Mole_Particles_Alpha_UVAnim_Dissolution.shader
2021-12-21 09:40:39 +08:00

103 lines
4.3 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Shader "MoleGame/Particles/Alpha_UVAnim_Dissolution"
{
Properties {
_MainTex ("MainTex", 2D) = "white" {}
_TintColor ("Color", Color) = (0,0,0,1)
_U_Speed ("U_Speed", Float ) = 0
_V_Speed ("V_Speed", Float ) = -1
_Add ("Add", Float ) = 1
_Dissolution_T ("Dissolution_T", 2D) = "white" {}
_Dissolution_01 ("Dissolution_01", Float ) = 0
_U_Speed_02 ("U_Speed_02", Float ) = 0
_V_Speed_02 ("V_Speed_02", Float ) = -1
_Fresnel ("Fresnel", Float ) = 1
_DissolutionAdd ("DissolutionAdd", Float ) = 0 // 溶解系数0表示关闭
//[HideInInspector]_Cutoff ("Alpha cutoff", Range(0,1)) = 0.5
}
SubShader {
Tags {
"IgnoreProjector"="True"
"Queue"="Transparent"
"RenderType"="Transparent"
}
Pass {
Name "FORWARD"
Tags {
"LightMode"="ForwardBase"
}
Blend SrcAlpha OneMinusSrcAlpha
Cull Off
//AlphaToMask On
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
//#define UNITY_PASS_FORWARDBASE
#include "UnityCG.cginc"
//#pragma multi_compile_fwdbase
#pragma target 3.0
uniform sampler2D _MainTex;
uniform half4 _MainTex_ST;
uniform half4 _TintColor;
uniform half _U_Speed;
uniform half _V_Speed;
uniform half _Add;
uniform sampler2D _Dissolution_T;
uniform half4 _Dissolution_T_ST;
uniform half _Dissolution_01;
uniform half _U_Speed_02;
uniform half _V_Speed_02;
uniform half _Fresnel;
uniform float _DissolutionAdd;
struct VertexInput {
half4 vertex : POSITION;
half3 normal : NORMAL;
half4 texcoord0 : TEXCOORD0;
fixed4 vertexColor : COLOR;
};
struct VertexOutput {
half4 pos : SV_POSITION;
half4 uv : TEXCOORD0;
half4 posWorld : TEXCOORD1;
half3 normalDir : TEXCOORD2;
fixed4 vertexColor : COLOR;
};
VertexOutput vert (VertexInput v) {
VertexOutput o = (VertexOutput)0;
o.uv = v.texcoord0;
o.vertexColor = v.vertexColor;
o.normalDir = UnityObjectToWorldNormal(v.normal);
// 计算顶点动画_DissolutionAdd = 0 时表示关闭
half2 uv_t = (o.uv + (fmod(_Time.y, 10) * half2(_U_Speed_02, _V_Speed_02)));
float4 _Dissolution_T_var = tex2Dlod(_Dissolution_T,float4(TRANSFORM_TEX(uv_t, _Dissolution_T),0.0,0));
v.vertex.xyz += (_Dissolution_T_var.r * v.normal * _DissolutionAdd);
o.posWorld = mul(unity_ObjectToWorld, v.vertex);
o.pos = UnityObjectToClipPos( v.vertex );
return o;
}
float4 frag(VertexOutput i, float facing : VFACE) : COLOR {
//float isFrontFace = ( facing >= 0 ? 1 : 0 );
fixed faceSign = sign(facing);//( facing >= 0 ? 1 : -1 );
i.normalDir = normalize(i.normalDir);
i.normalDir *= faceSign;
fixed3 viewDirection = normalize(_WorldSpaceCameraPos.xyz - i.posWorld.xyz);
fixed3 normalDirection = i.normalDir;
half2 uv_t = (i.uv+(fmod(_Time.y,10)*half2(_U_Speed,_V_Speed)));
fixed4 _Dissolution_T_var = tex2D(_Dissolution_T,TRANSFORM_TEX(uv_t, _Dissolution_T));
_Dissolution_01 = max(_Dissolution_01, 0.0001);
fixed z = max(i.uv.z, 0.0001);
clip(((_Dissolution_T_var.r/_Dissolution_01)*z + _DissolutionAdd) - 0.5);
////// Emissive:
fixed4 _MainTex_var = tex2D(_MainTex,TRANSFORM_TEX(uv_t, _MainTex));
fixed fresnel = pow(1.0-max(0,dot(normalDirection, viewDirection)),_Fresnel);
fixed3 col = fresnel * (_MainTex_var.rgb*i.vertexColor.rgb*_TintColor.rgb*_Add);
fixed alpha = _MainTex_var.a*i.vertexColor.a*_TintColor.a;
return fixed4(col,alpha);
}
ENDCG
}
}
}