183 lines
7.4 KiB
Plaintext
183 lines
7.4 KiB
Plaintext
Shader "GAPH Custom Shader/Shader_Decal"{
|
|
Properties{
|
|
[Header(Main Settings)]
|
|
[Space]
|
|
[HDR]_TintColor("TintColor",Color) = (1,1,1,1)
|
|
[Toggle(IS_USE_SECOND_TINTCOLOR)]_SecondTintColor("Is Use Second Tintcolor",int) = 0
|
|
[HDR]_TintColor2("TintColor2",Color) = (1,1,1,1)
|
|
_MainTex("MainTexture",2D) = "white" {}
|
|
_ColorFactor("Color Factor", float) = 1
|
|
[Toggle(IS_TEXTURE_ANIMATE)]_TextureAnimate("Is Texture Animate",int) = 0
|
|
_TextureAnimateSpeed("Texture Animate Speed",float) = 1.0
|
|
[Toggle(IS_NORMAL_DISTORTION)]_NormalDistortion("Is Normal Distortion",int) = 0
|
|
_NormalTex("Normal Tex",2D) = "white"{}
|
|
_NormalDistortionFactor("Normal Distortion Factor",float) = 1.0
|
|
[Toggle(IS_NORMAL_ANIMATE)]_NormalAnimate("Is Normal Animate",int) = 0
|
|
_NormalAnimateSpeed("Normal Animate Speed",float) = 1.0
|
|
[Toggle(IS_MASK_FADE)]_MaskFade("Is Mask Fade",int) = 0
|
|
_MaskTex("Mask Tex",2D) = "white"{}
|
|
_MaskCutOut("Mask CutOut",Range(0,1)) = 1
|
|
[Header(Render)]
|
|
[Space]
|
|
[Toggle]_ZWrite("ZWrite On/Off", int) = 0
|
|
[Enum(Culling Off,0, Culling Front, 1, Culling Back, 2)]_Culling("Culling",float) = 2
|
|
[Enum(UnityEngine.Rendering.BlendMode)]_BlendSrc("BlendSrc", float) = 1
|
|
[Enum(UnityEngine.Rendering.BlendMode)]_BlendDst("BlendDst", float) = 1
|
|
_ZTest1("_ZTest1", int) = 5
|
|
}
|
|
|
|
Category{
|
|
Tags{ "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent"}
|
|
Blend[_BlendSrc][_BlendDst]
|
|
Cull Front
|
|
ZTest[_ZTest1]
|
|
ZWrite Off
|
|
|
|
|
|
SubShader{
|
|
Pass{
|
|
CGPROGRAM
|
|
#pragma vertex vert
|
|
#pragma fragment frag
|
|
#pragma multi_compile_instancing
|
|
|
|
#pragma shader_feature IS_USE_SECOND_TINTCOLOR
|
|
#pragma shader_feature IS_MASK_FADE
|
|
#pragma shader_feature IS_TEXTURE_ANIMATE
|
|
#pragma shader_feature IS_NORMAL_ANIMATE
|
|
#pragma shader_feature IS_NORMAL_DISTORTION
|
|
|
|
#include "UnityCG.cginc"
|
|
|
|
sampler2D _MainTex;
|
|
sampler2D _NormalTex;
|
|
sampler2D _MaskTex;
|
|
|
|
sampler2D _CameraDepthTexture;
|
|
|
|
float4 _MainTex_ST;
|
|
float4 _NormalTex_ST;
|
|
float4 _MaskTex_ST;
|
|
float4 _MainTex_NextFrame;
|
|
float _MaskCutOut;
|
|
|
|
UNITY_INSTANCING_BUFFER_START(data)
|
|
UNITY_DEFINE_INSTANCED_PROP(float4x4, _InverseTransformMatrix)
|
|
#define _InverseTransformMatrix_arr data
|
|
UNITY_DEFINE_INSTANCED_PROP(half4, _TintColor)
|
|
#define _TintColor_arr data
|
|
#ifdef IS_USE_SECOND_TINTCOLOR
|
|
UNITY_DEFINE_INSTANCED_PROP(half4, _TintColor2)
|
|
#define _TintColor2_arr data
|
|
#endif
|
|
UNITY_DEFINE_INSTANCED_PROP(half, _NormalAnimateSpeed)
|
|
#define _NormalAnimateSpeed_arr data
|
|
UNITY_DEFINE_INSTANCED_PROP(half, _TextureAnimateSpeed)
|
|
#define _TextureAnimateSpeed_arr data
|
|
UNITY_DEFINE_INSTANCED_PROP(half, _NormalDistortionFactor)
|
|
#define _NormalDistortionFactor_arr data
|
|
UNITY_DEFINE_INSTANCED_PROP(half, _ColorFactor)
|
|
#define _ColorFactor_arr data
|
|
UNITY_INSTANCING_BUFFER_END(data)
|
|
|
|
struct appdata_t {
|
|
float4 vertex : POSITION;
|
|
float4 normal : NORMAL;
|
|
half4 color : COLOR;
|
|
float2 texcoord : TEXCOORD0;
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
|
};
|
|
|
|
struct v2f {
|
|
float4 vertex : SV_POSITION;
|
|
half4 color : COLOR;
|
|
float4 screenUV : TEXCOORD0;
|
|
float3 ray : TEXCOODR1;
|
|
float2 texcoord : TEXCOORD2;
|
|
float2 texcoord2 : TEXCOORD3;
|
|
float2 texcoord3 : TEXCOORD4;
|
|
float3 normal : TEXCOORD5;
|
|
UNITY_FOG_COORDS(7)
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
|
UNITY_VERTEX_OUTPUT_STEREO
|
|
};
|
|
|
|
v2f vert(appdata_t v)
|
|
{
|
|
v2f o;
|
|
UNITY_INITIALIZE_OUTPUT(v2f, o);
|
|
UNITY_SETUP_INSTANCE_ID(v);
|
|
UNITY_TRANSFER_INSTANCE_ID(v, o);
|
|
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
|
|
|
|
o.vertex = UnityObjectToClipPos(v.vertex);
|
|
o.color = v.color;
|
|
|
|
o.ray = UnityObjectToViewPos(v.vertex) * float3(-1, -1, 1);
|
|
o.screenUV = ComputeScreenPos(o.vertex);
|
|
o.normal = UnityObjectToWorldNormal(o.vertex);
|
|
|
|
UNITY_TRANSFER_FOG(o, o.vertex);
|
|
return o;
|
|
}
|
|
|
|
half4 frag(v2f i) : SV_Target
|
|
{
|
|
UNITY_SETUP_INSTANCE_ID(i);
|
|
i.ray = i.ray* (_ProjectionParams.z / i.ray.z);
|
|
|
|
float depth = Linear01Depth(tex2Dproj(_CameraDepthTexture,i.screenUV));
|
|
float4 vpos = float4(i.ray * depth, 1);
|
|
float3 wpos = mul(unity_CameraToWorld, vpos).xyz;
|
|
float3 opos = mul(unity_WorldToObject, float4(wpos,1)).xyz;
|
|
float3 objAbs = abs(opos);
|
|
clip(0.5f - objAbs);
|
|
|
|
|
|
i.texcoord = saturate(opos.xz + 0.5) * _MainTex_ST.xy + _MainTex_ST.zw;
|
|
i.texcoord2 = saturate(opos.xz + 0.5) * _NormalTex_ST.xy + _NormalTex_ST.zw;
|
|
i.texcoord3 = saturate(opos.xz + 0.5) * _MaskTex_ST.xy + _MaskTex_ST.zw;
|
|
|
|
|
|
#ifdef IS_NORMAL_DISTORTION
|
|
half2 distort = UnpackNormal(tex2D(_NormalTex, i.texcoord2 * 1.0f + (UNITY_ACCESS_INSTANCED_PROP(_NormalAnimateSpeed_arr, _NormalAnimateSpeed) * _Time / 20))).rg;
|
|
distort += UnpackNormal(tex2D(_NormalTex, i.texcoord2 * 1.0f - (UNITY_ACCESS_INSTANCED_PROP(_NormalAnimateSpeed_arr, _NormalAnimateSpeed)*_Time / 20) + float2(0.5f, 0.15f))).rg;
|
|
distort += UnpackNormal(tex2D(_NormalTex, i.texcoord2 * 0.5f - (UNITY_ACCESS_INSTANCED_PROP(_NormalAnimateSpeed_arr, _NormalAnimateSpeed)*_Time / 10) + float2(0.15f, 0.5f))).rg;
|
|
distort += UnpackNormal(tex2D(_NormalTex, i.texcoord2 * 0.5f - (UNITY_ACCESS_INSTANCED_PROP(_NormalAnimateSpeed_arr, _NormalAnimateSpeed)*_Time / 10) + float2(-0.5f, -0.15f))).rg;
|
|
i.texcoord.xy += distort.xy * UNITY_ACCESS_INSTANCED_PROP(_NormalDistortionFactor_arr, _NormalDistortionFactor);
|
|
#endif
|
|
|
|
#ifdef IS_TEXTURE_ANIMATE
|
|
half4 tex = tex2D(_MainTex, i.texcoord.xy - (UNITY_ACCESS_INSTANCED_PROP(_TextureAnimateSpeed_arr, _TextureAnimateSpeed) * _Time / 10));
|
|
tex *= tex2D(_MainTex, i.texcoord.xy - (UNITY_ACCESS_INSTANCED_PROP(_TextureAnimateSpeed_arr, _TextureAnimateSpeed) * _Time / 10) + float2(0.25f, -0.25f));
|
|
half4 tex2 = tex2D(_MainTex, i.texcoord.xy + (UNITY_ACCESS_INSTANCED_PROP(_TextureAnimateSpeed_arr, _TextureAnimateSpeed) * _Time / 10));
|
|
tex2 *= tex2D(_MainTex, i.texcoord.xy + (UNITY_ACCESS_INSTANCED_PROP(_TextureAnimateSpeed_arr, _TextureAnimateSpeed) * _Time / 10) + float2(0.15f, -0.15f));
|
|
tex = (tex + tex2) / 1.5f;
|
|
#else
|
|
half4 tex = tex2D(_MainTex, i.texcoord);
|
|
#endif
|
|
|
|
#ifdef IS_MASK_FADE
|
|
half mask_a =pow( saturate(tex2D(_MaskTex, i.texcoord3) - (1-_MaskCutOut)),1.5f);
|
|
#else
|
|
half mask_a = tex.a * _MaskCutOut;
|
|
#endif
|
|
#ifdef IS_USE_SECOND_TINTCOLOR
|
|
half4 res = tex * UNITY_ACCESS_INSTANCED_PROP(_TintColor2_arr, _TintColor2) * UNITY_ACCESS_INSTANCED_PROP(_ColorFactor_arr, _ColorFactor);
|
|
half alpha = res.a * i.color.a * mask_a * UNITY_ACCESS_INSTANCED_PROP(_ColorFactor_arr, _ColorFactor) * UNITY_ACCESS_INSTANCED_PROP(_TintColor2_arr, _TintColor2).a;
|
|
#else
|
|
half4 res = tex * UNITY_ACCESS_INSTANCED_PROP(_TintColor_arr, _TintColor) * UNITY_ACCESS_INSTANCED_PROP(_ColorFactor_arr, _ColorFactor);
|
|
half alpha = res.a * i.color.a * mask_a * UNITY_ACCESS_INSTANCED_PROP(_ColorFactor_arr, _ColorFactor) * UNITY_ACCESS_INSTANCED_PROP(_TintColor_arr, _TintColor).a;
|
|
#endif
|
|
res.a = alpha;
|
|
|
|
if (dot(vpos, i.vertex) != 0)
|
|
return res;
|
|
else
|
|
return 0;
|
|
}
|
|
ENDCG
|
|
}
|
|
}
|
|
}
|
|
} |