This repository has been archived on 2024-08-16. You can view files and clone it, but cannot push or open issues or pull requests.
sota/RunningLateGame/Assets/Forst/CTI Runtime Components/CTI Runtime Components URP 14plus/Shaders/Includes/CTI URP SG Lighting.hlsl

62 lines
1.9 KiB
HLSL

void CTI_SimpleTranslucentLighting_half(
float3 PositionWS,
half3 NormalWS,
half3 TangentWS,
half3 BitangentWS,
half3 Albedo,
half3 NormalTS,
half3 Transmission,
half TransmissionMask,
half Occlusion,
out half3 o_NormalWS,
out half3 o_Transmission
)
{
#ifdef SHADERGRAPH_PREVIEW
o_NormalWS = half3(0,1,0);
o_Transmission = 0;
#else
half3 translucency = 1;
half3 viewDirWS = GetWorldSpaceNormalizeViewDir(PositionWS);
half3x3 tangentToWorld = half3x3(TangentWS, BitangentWS, NormalWS);
o_NormalWS = NormalizeNormalPerPixel(TransformTangentToWorld(NormalTS, tangentToWorld));
half4 shadowCoord = TransformWorldToShadowCoord(PositionWS);
Light mainLight = GetMainLight(shadowCoord);
half w = 0.3; // 0.4
half NdotL = saturate((dot(o_NormalWS, mainLight.direction) + w) / ((1 + w) * (1 + w)));
half3 transLightDir = mainLight.direction + o_NormalWS * Transmission.z;
half transDot = dot( transLightDir, -viewDirWS );
transDot = exp2(saturate(transDot) * Transmission.y - Transmission.y);
o_Transmission = transDot * (1.0 - NdotL) * mainLight.color * mainLight.shadowAttenuation * Transmission.x;
if(_AmbientTranslucency > 0)
{
o_Transmission += SampleSH(-o_NormalWS) * _AmbientTranslucency * Occlusion;
}
o_Transmission *= Albedo * TransmissionMask;
#endif
}
void SampleSH(half3 normalWS, out half3 Ambient)
{
// LPPV is not supported in Ligthweight Pipeline
real4 SHCoefficients[7];
SHCoefficients[0] = unity_SHAr;
SHCoefficients[1] = unity_SHAg;
SHCoefficients[2] = unity_SHAb;
SHCoefficients[3] = unity_SHBr;
SHCoefficients[4] = unity_SHBg;
SHCoefficients[5] = unity_SHBb;
SHCoefficients[6] = unity_SHC;
Ambient = max(half3(0, 0, 0), SampleSH9(SHCoefficients, normalWS));
}