Shader "TAClass/CommonEffects"
{
Properties
{
[Header(Render)]
[Enum(UnityEngine.Rendering.BlendMode)]_SrcBlend("Src Blend",int) = 0
[Enum(UnityEngine.Rendering.BlendMode)]_DstBlend("Dst Blend",int) = 0
[Enum(UnityEngine.Rendering.CullMode)]_Cull ("Cull",int) = 0
[Enum(Off,0,On,1)]_ZWrite("ZWrite",int) = 0
[Enum(UnityEngine.Rendering.CompareFunction)]_ZTest("ZTest", int) = 0
[Header(Stencil)]
[ForceInt]
_StencilRef("StencilRef",float) = 0
[Enum(UnityEngine.Rendering.CompareFunction)]
_StencilComp("StencilComp",int) =0
[Enum(UnityEngine.Rendering.StencilOp)]
_StencilOp("StencilOp",int)=0
[ForceInt]
_StencilReadMask("ReadMask",int)=255
[ForceInt]
_StencilWriteMask("WriteMask",int)=255
[Header(Base)]
_MainTex ("Base Texture", 2D) = "white" {}
_BaseOperate("Speed(XY) Intensity(Z) Rotate(W)", vector) = (0, 0, 1, 0)
[Header(Mask)]
[Toggle]_MaskEnabled("Mask Enabled",int) = 0
_MaskTex("MaskTex",2D) = "white"{}
_MaskUVSpeed("MaskUVSpeed(XY)", vector) = (0, 0, 0, 0)
[Header(Dissolve)]
[Toggle]_DissolveEnabled("Dissolve Enabled",int) = 0
_DissolveTex("DissolveTex", 2D) = "white"{}
_Dissolve("Dissolve(Mask Tex.R)", Range(0.0001, 1)) = 0.3
[Header(Distort)]
[Toggle]_DistortEnabled("Distort Enabled",int) = 0
_DistortTex("DistortTex",2D) = "white"{}
_Distort("Distort",Range(0,1)) = 0
_DistortUVSpeed("DistortUVSpeed(XY)",vector) = (0, 0, 0, 0)
[Header(Rim)]
[Toggle]_RimEnabled("Rim Enabled",int) = 0
_RimColor ("Rim Color", Color) = (1,1,1,1)
_RimPower ("Rim Power", Range(0.000001, 3.0)) = 0.1
_RimIntensity("Rim Intensity", Range(0.00001, 1.0)) = 1
}
SubShader
{
Tags{"RenderType" = "Transparent"}
Blend [_SrcBlend] [_DstBlend]
Cull [_Cull]
ZWrite [_ZWrite]
ZTest [_ZTest]
Stencil
{
Ref [_StencilRef]
Comp[_StencilComp]
Pass[_StencilOp]
ReadMask[_StencilReadMask]
WriteMask[_StencilWriteMask]
}
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma shader_feature _ _MASKENABLED_ON
#pragma shader_feature _ _DISSOLVEENABLED_ON
#pragma shader_feature _ _DISTORTENABLED_ON
#pragma shader_feature _ _RIMENABLED_ON
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
float3 normal : NORMAL;
};
struct v2f
{
float4 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
float4 uv1 : TEXCOORD1;
float3 worldNormal : TEXCOORD2;
float3 worldViewDir : TEXCOORD3;
};
sampler2D _MainTex;
float4 _MainTex_ST, _BaseOperate;
sampler2D _MaskTex;
float4 _MaskTex_ST;
float4 _MaskUVSpeed;
sampler2D _DissolveTex;
float4 _DissolveTex_ST;
float _Dissolve;
sampler2D _DistortTex;
float4 _DistortTex_ST, _DistortUVSpeed, _RimColor;
float _Distort, _RimPower, _RimIntensity, _BreatheIntensity;
v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
float2 uv = TRANSFORM_TEX(v.uv, _MainTex) + float2(_BaseOperate.xy) * _Time.y;
uv = uv - float2(0.5, 0.5);
uv = float2(uv.x * cos(_BaseOperate.w) - uv.y * sin(_BaseOperate.w),
uv.x * sin(_BaseOperate.w) + uv.y * cos(_BaseOperate.w));
o.uv.xy = uv + float2(0.5, 0.5);
#if _MASKENABLED_ON
o.uv.zw = TRANSFORM_TEX(v.uv,_MaskTex) + float2(_MaskUVSpeed.xy) * _Time.y;
#endif
# if _DISSOLVEENABLED_ON
o.uv1.xy = TRANSFORM_TEX(v.uv, _DissolveTex);
#endif
#if _DISTORTENABLED_ON
o.uv1.zw = TRANSFORM_TEX(v.uv,_DistortTex) + float2(_DistortUVSpeed.xy) * _Time.y;
#endif
o.worldNormal = normalize(mul(v.normal, (float3x3)unity_WorldToObject));
float3 worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;
o.worldViewDir = normalize(_WorldSpaceCameraPos.xyz - worldPos);
return o;
}
fixed4 frag (v2f i) : SV_Target
{
float2 distort = i.uv.xy;
#if _DISTORTENABLED_ON
fixed4 distortTex = tex2D(_DistortTex,i.uv1.zw);
distort = lerp(i.uv.xy, distortTex, _Distort);
#endif
fixed4 col = tex2D(_MainTex, distort) * _BaseOperate.z;
#if _MASKENABLED_ON
fixed maskTex = tex2D(_MaskTex,i.uv.zw);
col *= maskTex;
#endif
#if _DISSOLVEENABLED_ON
fixed4 dissolveTex = tex2D(_DissolveTex,i.uv1.xy);
clip(dissolveTex.r - _Dissolve);
#endif
#if _RIMENABLED_ON
float rim = 1 - max(0, dot(i.worldViewDir, i.worldNormal));
fixed3 rimColor = _RimColor * pow(rim, 1 /_RimPower) * _RimIntensity;
col.rgb += rimColor;
#endif
return col;
}
ENDCG
}
}
}
Unity shader常用动效合集(流动/遮罩/溶解/扰动/边缘光)
最新推荐文章于 2024-05-29 09:41:27 发布