Files
AIC-Project/Client/Assets/Game/shader/SGame/Base/CustomShadowMap_Base.hlsl
T

49 lines
1.6 KiB
HLSL

#ifndef CUSTOMSHADOWMAP_BASE_INCLUDE
#define CUSTOMSHADOWMAP_BASE_INCLUDE
float4 tex2Dproj(sampler2D s, in float3 t) { return tex2D(s, t.xy / t.z); }
TEXTURE2D(_SGameShadowMap); SAMPLER(sampler_SGameShadowMap);
half _SGameShadowBias; half _SGameShadowStrength;
float4x4 _ShadowMatrix;
inline float4 GetCustomShadowCoords(float3 worldPos)
{
return mul(_ShadowMatrix, float4(worldPos, 1));
}
inline float GetCustomShadowAtten(float4 shadowCoords)
{
#if defined(SHADER_API_MOBILE)
float lightDepth = SAMPLE_TEXTURE2D(_SGameShadowMap, sampler_SGameShadowMap, shadowCoords.xy / shadowCoords.w).r;
#else
float lightDepth = 1 - SAMPLE_TEXTURE2D(_SGameShadowMap, sampler_SGameShadowMap, shadowCoords.xy / shadowCoords.w).r;
#endif
float atten = lerp(1, 0.35, step(lightDepth, (shadowCoords.z - _SGameShadowBias)));
// float atten = (shadowCoords.z - _SGameShadowBias) < lightDepth ? 1 : 0.5;
// atten = lerp(1, atten, _SGameShadowStrength);
// atten = pow(atten, 2);
atten = lerp(atten, 1, step(0.99 , shadowCoords.x));
atten = lerp(atten, 1, step(0.99 , shadowCoords.y));
return atten;
}
#if defined(_PROJECTOR_ON)
float4x4 _ProjectorVP;
TEXTURE2D(_ProjectorTex); SAMPLER(sampler_ProjectorTex);
inline float4 GetProjectorUV(float4 vertex, float4x4 o2wMat)
{
float4x4 propMVP = mul(_ProjectorVP, o2wMat);
float4 projProjPos = mul(propMVP, vertex);
projProjPos = ComputeScreenPos(projProjPos);
return projProjPos;
}
inline float3 GetProjectorColor(float3 oriCol, float4 projUV)
{
return oriCol + SAMPLE_TEXTURE2D(_ProjectorTex, sampler_ProjectorTex, projUV).rgb;
}
#endif
#endif