From 7a3065211e23d8e9dac02b1a1b4166b522951eec Mon Sep 17 00:00:00 2001 From: DeMuenu <96650288+DeMuenu@users.noreply.github.com> Date: Tue, 30 Sep 2025 01:20:22 +0200 Subject: [PATCH] Add shadow caster support to LitParticles shader Introduced shadow caster texture, color, outside color, and minimum brightness parameters to the LitParticles shader. Moved related variable declarations to Variables.hlsl for reuse and removed redundant declarations from BlendinShader.shader. Updated LitParticles lighting calculation to apply shadow caster effects when appropriate. --- Shader/BlendinShader.shader | 9 ++------- Shader/Includes/Variables.hlsl | 8 ++++++++ Shader/LitParticles.shader | 16 +++++++++++++++- 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/Shader/BlendinShader.shader b/Shader/BlendinShader.shader index 1de969c..ec85d5e 100644 --- a/Shader/BlendinShader.shader +++ b/Shader/BlendinShader.shader @@ -15,12 +15,13 @@ Shader "DeMuenu/World/Hoppou/RevealStandart" //Moonlight _InverseSqareMultiplier ("Inverse Square Multiplier", Float) = 1 _LightCutoffDistance ("Light Cutoff Distance", Float) = 100 - //Moonlight END + _shadowCasterTex ("Shadow Caster Texture", 2D) = "white" {} _shadowCasterColor ("Shadow Caster Color", Color) = (1,1,1,1) _OutSideColor ("Outside Color", Color) = (1,1,1,1) _MinBrightnessShadow ("Min Brightness for Shadows", Range(0,1)) = 0 + //Moonlight END @@ -91,12 +92,6 @@ Shader "DeMuenu/World/Hoppou/RevealStandart" MoonlightGlobalVariables - float4x4 _Udon_WorldToLocal; - sampler2D _shadowCasterTex; - float4 _shadowCasterColor; - float4 _OutSideColor; - float _MinBrightnessShadow; - v2f vert (appdata v) { diff --git a/Shader/Includes/Variables.hlsl b/Shader/Includes/Variables.hlsl index 95e74a8..bb89d05 100644 --- a/Shader/Includes/Variables.hlsl +++ b/Shader/Includes/Variables.hlsl @@ -11,4 +11,12 @@ float _Udon_ShadowMapIndex[MAX_LIGHTS];\ float _Udon_PlayerCount; /* set via SetFloat */ \ + + float4x4 _Udon_WorldToLocal; \ + sampler2D _shadowCasterTex; \ + float4 _shadowCasterColor; \ + float4 _OutSideColor; \ + float _MinBrightnessShadow; \ + + #endif \ No newline at end of file diff --git a/Shader/LitParticles.shader b/Shader/LitParticles.shader index e4debd5..ba6d357 100644 --- a/Shader/LitParticles.shader +++ b/Shader/LitParticles.shader @@ -9,6 +9,12 @@ Shader "DeMuenu/World/Hoppou/Particles/LitParticles" //Moonlight _InverseSqareMultiplier ("Inverse Square Multiplier", Float) = 1 _LightCutoffDistance ("Light Cutoff Distance", Float) = 100 + + + _shadowCasterTex ("Shadow Caster Texture", 2D) = "white" {} + _shadowCasterColor ("Shadow Caster Color", Color) = (1,1,1,1) + _OutSideColor ("Outside Color", Color) = (1,1,1,1) + _MinBrightnessShadow ("Min Brightness for Shadows", Range(0,1)) = 0 //Moonlight END @@ -36,6 +42,7 @@ Shader "DeMuenu/World/Hoppou/Particles/LitParticles" #include "Includes/Lambert.hlsl" #include "Includes/DefaultSetup.hlsl" #include "Includes/Variables.hlsl" + #include "Includes/Shadowcaster.cginc" @@ -118,7 +125,14 @@ Shader "DeMuenu/World/Hoppou/Particles/LitParticles" LightTypeCalculations(_Udon_LightColors, LightCounter, i, NdotL, dIntensity, _Udon_LightPositions[LightCounter].a, _Udon_LightPositions[LightCounter].xyz); - dmax = dmax + contrib * float4(LightColor, 1) * NdotL; // accumulate light contributions + float4 ShadowCasterMult = float4(1,1,1,1); + if (_Udon_ShadowMapIndex[LightCounter] > 0.5) { + ShadowCasterMult = SampleShadowcasterPlane(_Udon_WorldToLocal, _shadowCasterTex, _Udon_LightPositions[LightCounter].xyz, i.worldPos, _OutSideColor); + ShadowCasterMult *= _shadowCasterColor; + ShadowCasterMult = float4(ShadowCasterMult.rgb * (1-ShadowCasterMult.a), 1); + } + + dmax = dmax + contrib * float4(LightColor, 1) * 1 * max(ShadowCasterMult, _MinBrightnessShadow); }