Fix : 화이트 호라이즌 그림자 생성 업데이트

This commit is contained in:
user 2026-05-05 23:18:21 +09:00
parent 7075f46b25
commit 2ec4077d90
4 changed files with 90 additions and 16 deletions

Binary file not shown.

Binary file not shown.

View File

@ -11,7 +11,8 @@ Material:
m_Shader: {fileID: 4800000, guid: 6dd2533ed522d7547ad0fc9dd62febd0, type: 3}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords: []
m_ValidKeywords:
- _RECEIVE_NILOTOON_CHAR_SHADOW
m_InvalidKeywords: []
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
@ -111,11 +112,13 @@ Material:
- _Glossiness: 0
- _GlossyReflections: 0
- _Metallic: 0
- _NiloToonCharShadowStrength: 0.5
- _OcclusionStrength: 1
- _Parallax: 0.005
- _QueueControl: 0
- _QueueOffset: -13
- _Radius: 0.084
- _ReceiveNiloToonCharShadow: 1
- _ReceiveShadows: 1
- _SampleGI: 0
- _ScreenSpaceOutlineIntensity: 1

View File

@ -30,6 +30,10 @@ Shader "Mingle/Floor/White Horizon"
_ScreenSpaceOutlineIntensity("Screen Space Outline Intensity", Range(0,1)) = 1
[HDR]_ScreenSpaceOutlineColor("Screen Space Outline Color", Color) = (1,1,1,1)
_ScreenSpaceOutlineWidth("Screen Space Outline Width", Float) = 1
// NiloToon Character Self Shadow Receiver (off by default to keep parity with original ASE template)
[Toggle(_RECEIVE_NILOTOON_CHAR_SHADOW)] _ReceiveNiloToonCharShadow("Receive NiloToon Char Shadow", Float) = 0
_NiloToonCharShadowStrength(" Shadow Strength", Range(0, 1)) = 1.0
}
SubShader
@ -75,7 +79,7 @@ Shader "Mingle/Floor/White Horizon"
#pragma multi_compile_instancing
#pragma multi_compile _ LOD_FADE_CROSSFADE
#define ASE_VERSION 19904
#define ASE_SRP_VERSION 170200
#define ASE_SRP_VERSION -1
#pragma target 2.0
@ -102,6 +106,10 @@ Shader "Mingle/Floor/White Horizon"
#pragma shader_feature_local_fragment _ENVIRONMENTREFLECTIONS_OFF
#pragma shader_feature_local_fragment _SPECULAR_SETUP
// NiloToon Character Self Shadow keywords
#pragma shader_feature_local_fragment _RECEIVE_NILOTOON_CHAR_SHADOW
#pragma multi_compile_fragment _ _NILOTOON_RECEIVE_SELF_SHADOW
// -------------------------------------
// Universal Pipeline keywords
#pragma multi_compile _ _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE _MAIN_LIGHT_SHADOWS_SCREEN
@ -216,6 +224,8 @@ Shader "Mingle/Floor/White Horizon"
half3 _ScreenSpaceOutlineColor;
float _ScreenSpaceOutlineWidth;
float _Surface;
// NiloToon Character Self Shadow per-material strength
float _NiloToonCharShadowStrength;
/*ase_srp_batcher*/
CBUFFER_END
@ -235,6 +245,56 @@ Shader "Mingle/Floor/White Horizon"
half3 _GlobalScreenSpaceOutlineTintColorForEnvi;
float _CurrentCameraFOV;
// NiloToon Character Self Shadow uniforms + sampling function
// (mirrors NiloToonEnvironment_LitForwardPass.hlsl. Both keywords required:
// _RECEIVE_NILOTOON_CHAR_SHADOW = per-material toggle, _NILOTOON_RECEIVE_SELF_SHADOW = global runtime keyword set by C# pass.)
#if defined(_RECEIVE_NILOTOON_CHAR_SHADOW) && defined(_NILOTOON_RECEIVE_SELF_SHADOW)
TEXTURE2D(_NiloToonCharSelfShadowMapRT);
SAMPLER_CMP(sampler_NiloToonCharSelfShadowMapRT_LinearClampCompare);
SAMPLER(sampler_NiloToonCharSelfShadowMapRT_Linear_Clamp);
float4x4 _NiloToonSelfShadowWorldToClip;
float4 _NiloToonSelfShadowParam;
float3 _NiloToonSelfShadowLightDirection;
float _GlobalReceiveNiloToonSelfShadowMap;
float _NiloToonSelfShadowRange;
float _NiloToonSelfShadowUseNdotLFix;
half SampleNiloToonCharSelfShadow(float3 positionWS, float3 normalWS, float linearEyeDepth)
{
float4 positionSelfShadowCS = mul(_NiloToonSelfShadowWorldToClip, float4(positionWS, 1));
float3 positionSelfShadowNDC = positionSelfShadowCS.xyz;
float2 shadowMapUV = positionSelfShadowNDC.xy * 0.5 + 0.5;
float ndcZCompareValue = positionSelfShadowNDC.z;
ndcZCompareValue = UNITY_NEAR_CLIP_VALUE < 0 ? ndcZCompareValue * 0.5 + 0.5 : ndcZCompareValue;
#if UNITY_UV_STARTS_AT_TOP
shadowMapUV.y = 1 - shadowMapUV.y;
#endif
if(shadowMapUV.x < 0 || shadowMapUV.x > 1 || shadowMapUV.y < 0 || shadowMapUV.y > 1)
return 1;
float shadowMapRawDepth = SAMPLE_TEXTURE2D_LOD(_NiloToonCharSelfShadowMapRT,
sampler_NiloToonCharSelfShadowMapRT_Linear_Clamp,
shadowMapUV, 0).r;
if(shadowMapRawDepth < 0.0001)
return 1;
half shadow = SAMPLE_TEXTURE2D_SHADOW(_NiloToonCharSelfShadowMapRT,
sampler_NiloToonCharSelfShadowMapRT_LinearClampCompare,
float3(shadowMapUV, ndcZCompareValue));
float fadeTotalDistance = 1.0;
shadow = lerp(shadow, 1, saturate((1.0 / fadeTotalDistance) * (linearEyeDepth - (_NiloToonSelfShadowRange - fadeTotalDistance))));
if(_NiloToonSelfShadowUseNdotLFix > 0.5)
shadow *= smoothstep(0.1, 0.2, saturate(dot(normalWS, _NiloToonSelfShadowLightDirection)));
return shadow;
}
#endif
#ifdef SCENEPICKINGPASS
float4 _SelectionID;
#endif
@ -450,6 +510,17 @@ Shader "Mingle/Floor/White Horizon"
#endif
Light mainLight = GetMainLight(inputData.shadowCoord, inputData.positionWS, nilotoonShadowMask);
// NiloToon Character Self Shadow (matches order in NiloToonEnvironment_LitForwardPass.hlsl: applied before shadow border tint)
#if defined(_RECEIVE_NILOTOON_CHAR_SHADOW) && defined(_NILOTOON_RECEIVE_SELF_SHADOW)
{
float linearEyeDepth = abs(mul(UNITY_MATRIX_V, float4(input.positionWS, 1)).z);
half charSelfShadow = SampleNiloToonCharSelfShadow(input.positionWS, inputData.normalWS, linearEyeDepth);
charSelfShadow = lerp(1, charSelfShadow, _NiloToonCharShadowStrength * _GlobalReceiveNiloToonSelfShadowMap);
color.rgb *= charSelfShadow;
}
#endif
float isShadowEdge = 1-abs(mainLight.shadowAttenuation-0.5)*2;
color.rgb = lerp(color.rgb, color.rgb * _NiloToonGlobalEnviShadowBorderTintColor.rgb, isShadowEdge * _NiloToonGlobalEnviShadowBorderTintColor.a);
@ -520,7 +591,7 @@ Shader "Mingle/Floor/White Horizon"
#pragma multi_compile_instancing
#pragma multi_compile _ LOD_FADE_CROSSFADE
#define ASE_VERSION 19904
#define ASE_SRP_VERSION 170200
#define ASE_SRP_VERSION -1
#pragma multi_compile_vertex _ _CASTING_PUNCTUAL_LIGHT_SHADOW
@ -665,7 +736,7 @@ Shader "Mingle/Floor/White Horizon"
#pragma multi_compile_instancing
#pragma multi_compile _ LOD_FADE_CROSSFADE
#define ASE_VERSION 19904
#define ASE_SRP_VERSION 170200
#define ASE_SRP_VERSION -1
#pragma vertex vert
@ -790,7 +861,7 @@ Shader "Mingle/Floor/White Horizon"
#pragma multi_compile_instancing
#pragma multi_compile _ LOD_FADE_CROSSFADE
#define ASE_VERSION 19904
#define ASE_SRP_VERSION 170200
#define ASE_SRP_VERSION -1
#pragma vertex vert
@ -953,7 +1024,7 @@ Shader "Mingle/Floor/White Horizon"
#define _NORMAL_DROPOFF_TS 1
#pragma multi_compile_instancing
#define ASE_VERSION 19904
#define ASE_SRP_VERSION 170200
#define ASE_SRP_VERSION -1
#pragma vertex vert
@ -1094,11 +1165,11 @@ Node;AmplifyShaderEditor.SmoothstepOpNode, AmplifyShaderEditor, Version=0.0.0.0,
Node;AmplifyShaderEditor.SamplerNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;5;-944,-240;Inherit;True;Property;_BaseTexture;BaseTexture;0;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;False;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5
Node;AmplifyShaderEditor.LayeredBlendNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;18;-624,-240;Inherit;False;6;0;FLOAT;0;False;1;COLOR;1,1,1,1;False;2;COLOR;1,1,1,1;False;3;FLOAT;0;False;4;FLOAT;0;False;5;FLOAT;0;False;1;COLOR;0
Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;19;-455.1483,-37.39032;Inherit;False;Constant;_Float0;Float 0;3;0;Create;True;0;0;0;False;0;False;0;0;0;0;0;1;FLOAT;0
Node;AmplifyShaderEditor.TemplateMultiPassMasterNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;71;-192,-336;Float;False;True;-1;3;UnityEditor.ShaderGraphUnlitGUI;300;20;Mingle/Floor/White Horizon;df83b33f62768f64cb5fff5416086758;True;Forward;0;0;Forward;10;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;0;False;;False;False;False;False;False;False;False;False;False;False;False;True;1;False;;True;3;False;;True;True;0;False;;0;False;;True;4;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;UniversalMaterialType=ComplexLit;IgnoreProjector=True;True;2;False;0;False;True;1;1;False;;0;False;;1;1;False;;0;False;;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;True;True;True;True;0;False;;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;True;1;False;;True;3;False;;True;True;0;False;;0;False;;True;1;LightMode=UniversalForwardOnly;True;0;False;0;;0;0;Standard;14;Workflow;1;0;Surface;0;0; Blend;0;0;Two Sided;1;0;Alpha Clipping;0;0;Fragment Normal Space;0;0;Cast Shadows;1;0;Receive Shadows;2;0;Specular Highlights;2;0;Environment Reflections;2;0;Receive SSAO;1;0;GPU Instancing;1;0;LOD CrossFade;1;0;NiloToon Screen Space Outline;0;0;0;5;True;True;True;True;True;False;;False;0
Node;AmplifyShaderEditor.TemplateMultiPassMasterNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;72;-192,-104.4;Float;False;False;-1;3;UnityEditor.ShaderGraphUnlitGUI;300;20;New Amplify Shader;df83b33f62768f64cb5fff5416086758;True;ShadowCaster;0;1;ShadowCaster;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;0;False;;False;False;False;False;False;False;False;False;False;False;False;True;1;False;;True;3;False;;True;True;0;False;;0;False;;True;4;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;UniversalMaterialType=ComplexLit;IgnoreProjector=True;True;2;False;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;False;False;True;False;False;False;False;0;False;;False;False;False;False;False;False;False;False;False;True;1;False;;True;3;False;;False;True;1;LightMode=ShadowCaster;False;False;0;;0;0;Standard;0;False;0
Node;AmplifyShaderEditor.TemplateMultiPassMasterNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;73;-192,-71.39999;Float;False;False;-1;3;UnityEditor.ShaderGraphUnlitGUI;300;20;New Amplify Shader;df83b33f62768f64cb5fff5416086758;True;DepthOnly;0;2;DepthOnly;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;0;False;;False;False;False;False;False;False;False;False;False;False;False;True;1;False;;True;3;False;;True;True;0;False;;0;False;;True;4;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;UniversalMaterialType=ComplexLit;IgnoreProjector=True;True;2;False;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;False;False;True;True;False;False;False;0;False;;False;False;False;False;False;False;False;False;False;True;1;False;;False;False;True;1;LightMode=DepthOnly;False;False;0;;0;0;Standard;0;False;0
Node;AmplifyShaderEditor.TemplateMultiPassMasterNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;75;-192,-38.39999;Float;False;False;-1;3;UnityEditor.ShaderGraphUnlitGUI;300;20;New Amplify Shader;df83b33f62768f64cb5fff5416086758;True;Meta;0;4;Meta;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;0;False;;False;False;False;False;False;False;False;False;False;False;False;True;1;False;;True;3;False;;True;True;0;False;;0;False;;True;4;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;UniversalMaterialType=ComplexLit;IgnoreProjector=True;True;2;False;0;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;2;False;;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;1;LightMode=Meta;False;False;0;;0;0;Standard;0;False;0
Node;AmplifyShaderEditor.TemplateMultiPassMasterNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;76;-176,192;Float;False;False;-1;3;UnityEditor.ShaderGraphUnlitGUI;300;20;New Amplify Shader;df83b33f62768f64cb5fff5416086758;True;DepthNormalsOnly;0;3;DepthNormalsOnly;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;0;False;;False;False;False;False;False;False;False;False;False;False;False;True;1;False;;True;3;False;;True;True;0;False;;0;False;;True;4;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;UniversalMaterialType=ComplexLit;IgnoreProjector=True;True;2;False;0;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;1;False;;True;3;False;;False;True;1;LightMode=DepthNormalsOnly;False;False;0;;0;0;Standard;0;False;0
Node;AmplifyShaderEditor.TemplateMultiPassMasterNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;71;-192,-336;Float;False;True;-1;3;UnityEditor.ShaderGraphUnlitGUI;300;14;Mingle/Floor/White Horizon;df83b33f62768f64cb5fff5416086758;True;Forward;0;0;Forward;10;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;0;False;;False;False;False;False;False;False;False;False;False;False;False;True;1;False;;True;3;False;;True;True;0;False;;0;False;;True;4;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;UniversalMaterialType=ComplexLit;IgnoreProjector=True;True;2;False;0;False;True;1;1;False;;0;False;;1;1;False;;0;False;;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;True;True;True;True;0;False;;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;True;1;False;;True;3;False;;True;True;0;False;;0;False;;True;1;LightMode=UniversalForwardOnly;True;0;False;0;;0;0;Standard;14;Workflow;1;0;Surface;0;0; Blend;0;0;Two Sided;1;0;Alpha Clipping;0;0;Fragment Normal Space;0;0;Cast Shadows;1;0;Receive Shadows;2;0;Specular Highlights;2;0;Environment Reflections;2;0;Receive SSAO;1;0;GPU Instancing;1;0;LOD CrossFade;1;0;NiloToon Screen Space Outline;0;0;0;5;True;True;True;True;True;False;;False;0
Node;AmplifyShaderEditor.TemplateMultiPassMasterNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;72;-192,-104.4;Float;False;False;-1;3;UnityEditor.ShaderGraphUnlitGUI;300;14;New Amplify Shader;df83b33f62768f64cb5fff5416086758;True;ShadowCaster;0;1;ShadowCaster;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;0;False;;False;False;False;False;False;False;False;False;False;False;False;True;1;False;;True;3;False;;True;True;0;False;;0;False;;True;4;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;UniversalMaterialType=ComplexLit;IgnoreProjector=True;True;2;False;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;False;False;True;False;False;False;False;0;False;;False;False;False;False;False;False;False;False;False;True;1;False;;True;3;False;;False;True;1;LightMode=ShadowCaster;False;False;0;;0;0;Standard;0;False;0
Node;AmplifyShaderEditor.TemplateMultiPassMasterNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;73;-192,-71.39999;Float;False;False;-1;3;UnityEditor.ShaderGraphUnlitGUI;300;14;New Amplify Shader;df83b33f62768f64cb5fff5416086758;True;DepthOnly;0;2;DepthOnly;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;0;False;;False;False;False;False;False;False;False;False;False;False;False;True;1;False;;True;3;False;;True;True;0;False;;0;False;;True;4;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;UniversalMaterialType=ComplexLit;IgnoreProjector=True;True;2;False;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;False;False;True;True;False;False;False;0;False;;False;False;False;False;False;False;False;False;False;True;1;False;;False;False;True;1;LightMode=DepthOnly;False;False;0;;0;0;Standard;0;False;0
Node;AmplifyShaderEditor.TemplateMultiPassMasterNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;75;-192,-38.39999;Float;False;False;-1;3;UnityEditor.ShaderGraphUnlitGUI;300;14;New Amplify Shader;df83b33f62768f64cb5fff5416086758;True;Meta;0;4;Meta;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;0;False;;False;False;False;False;False;False;False;False;False;False;False;True;1;False;;True;3;False;;True;True;0;False;;0;False;;True;4;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;UniversalMaterialType=ComplexLit;IgnoreProjector=True;True;2;False;0;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;2;False;;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;1;LightMode=Meta;False;False;0;;0;0;Standard;0;False;0
Node;AmplifyShaderEditor.TemplateMultiPassMasterNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;76;-176,34;Float;False;False;-1;3;UnityEditor.ShaderGraphUnlitGUI;300;14;New Amplify Shader;df83b33f62768f64cb5fff5416086758;True;DepthNormalsOnly;0;3;DepthNormalsOnly;3;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;0;False;;False;False;False;False;False;False;False;False;False;False;False;True;1;False;;True;3;False;;True;True;0;False;;0;False;;True;4;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;UniversalMaterialType=ComplexLit;IgnoreProjector=True;True;2;False;0;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;1;False;;True;3;False;;False;True;1;LightMode=DepthNormalsOnly;False;False;0;;0;0;Standard;0;False;0
WireConnection;12;0;11;0
WireConnection;12;1;10;0
WireConnection;8;0;6;0
@ -1113,4 +1184,4 @@ WireConnection;71;0;18;0
WireConnection;71;3;19;0
WireConnection;71;4;19;0
ASEEND*/
//CHKSM=8B1CA8DE0570E445AF37A3658FBEA2444B0B4CEB
//CHKSM=953A03029D769DC0DCBAF35D8CB0252F2B80DC0C