From 5bfbb660c7213cdd14c9bde2349b3a09ccdaff4e Mon Sep 17 00:00:00 2001 From: yum Date: Sun, 12 Oct 2025 22:13:26 -0700 Subject: add shadowcaster --- 3ner.cginc | 20 +++++++++++++++----- 3ner.shader | 32 ++++++++++++++++++++++++++++++++ features.cginc | 4 ++++ 3 files changed, 51 insertions(+), 5 deletions(-) diff --git a/3ner.cginc b/3ner.cginc index 26b2a3d..4aa4184 100644 --- a/3ner.cginc +++ b/3ner.cginc @@ -17,6 +17,10 @@ #include "vertex.cginc" v2f vert(appdata v) { +#if defined(SHADOW_CASTER_PASS) && !defined(_SHADOW_CASTER) + return (v2f) asfloat(-1); +#endif + v2f o; UNITY_SETUP_INSTANCE_ID(v); UNITY_INITIALIZE_OUTPUT(v2f, o); @@ -43,9 +47,10 @@ v2f vert(appdata v) { UNITY_TRANSFER_LIGHTING(o, v.uv1); UNITY_TRANSFER_FOG_COMBINED_WITH_EYE_VEC(o, o.pos); - TRANSFER_SHADOW(o); #if defined(SHADOW_CASTER_PASS) TRANSFER_SHADOW_CASTER_NORMALOFFSET(o); +#else + TRANSFER_SHADOW(o); #endif return o; @@ -170,6 +175,11 @@ v2f domain( UNITY_TRANSFER_INSTANCE_ID(patch[0], o); UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); +#if defined(SHADOW_CASTER_PASS) + //TRANSFER_SHADOW_CASTER_NORMALOFFSET(o); +#else + TRANSFER_SHADOW(o); +#endif return o; } //endex @@ -217,11 +227,11 @@ void geom(triangle v2f tri_in[3], } //endex -float4 frag(v2f i, uint facing : SV_IsFrontFace -#if defined(_VERTEX_DEFORMATION_TUBES) -, out float depth : SV_DepthLessEqual +float4 frag(v2f i, uint facing : SV_IsFrontFace) : SV_Target { +#if defined(SHADOW_CASTER_PASS) + return 0; #endif -) : SV_Target { + #if defined(_VERTEX_DEFORMATION_FRAGMENT_NORMALS) deform_normal(i.objPos_orig, i.normal, i.tangent.xyz); #endif diff --git a/3ner.shader b/3ner.shader index d8c9f56..5fca9e9 100644 --- a/3ner.shader +++ b/3ner.shader @@ -143,6 +143,12 @@ Shader "yum_food/3ner" [ThryToggle(_UNLIT)] _Unlit("Unlit", Float) = 0 //endex + //ifex _Shadow_Caster_Enabled==0 + [HideInInspector] m_start_Shadow_Caster("Shadow caster pass", Float) = 0 + [ThryToggle(_SHADOW_CASTER)] _Shadow_Caster_Enabled("Enable", Float) = 1 + [HideInInspector] m_end_Shadow_Caster("Shadow caster pass", Float) = 0 + //endex + [HideInInspector] m_start_BRDF("BRDF", Float) = 0 _DFG_LUT("DFG LUT", 2D) = "white" {} _BRDF_Specular_Min_Denom("Specular minimum denominator", Float) = 0.000001 @@ -256,6 +262,32 @@ Shader "yum_food/3ner" #define FORWARD_ADD_PASS + #include "3ner.cginc" + ENDCG + } + Pass { + Name "SHADOW" + Tags { "LightMode" = "ShadowCaster" } + Fog { Color (0,0,0,0) } + Cull [_Cull] + ZTest [_ZTest] + + CGPROGRAM + #pragma target 5.0 + #pragma multi_compile_instancing + #pragma multi_compile_shadowcaster + #pragma vertex vert + //ifex _Geometry_Enabled==0 + #pragma geometry geom + //endex + //ifex _Tessellation_Enabled==0 + #pragma hull hull + #pragma domain domain + //endex + #pragma fragment frag + + #define SHADOW_CASTER_PASS + #include "3ner.cginc" ENDCG } diff --git a/features.cginc b/features.cginc index 5ab9cb6..3788d6d 100644 --- a/features.cginc +++ b/features.cginc @@ -52,4 +52,8 @@ #pragma shader_feature_local _CENTER_OFFSET //endex +//ifex _Shadow_Caster_Enabled==0 +#pragma shader_feature_local _SHADOW_CASTER +//endex + #endif // __FEATURES_INC -- cgit v1.2.3