Files
Dino_Love_Simulation/Assets/SpecialSkillsEffectsPack/Shader_ForEffects/Shader_Decal.shader
2026-07-17 18:09:45 +09:00

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