CapersProject/Assets/Toon Water URP/Functions/OtherLightsInfo.cginc
2024-09-02 14:06:21 +09:00

28 lines
1.0 KiB
HLSL

void OtherLights_half(half4 SpecColor, half SpecularPower, half SpecularCutoff, half SpecularTolerance, half3 WorldPosition, half3 WorldNormal, half3 WorldView, out half3 Specular)
{
half3 specularColor = 0;
#ifndef SHADERGRAPH_PREVIEW
WorldNormal = normalize(WorldNormal);
WorldView = SafeNormalize(WorldView);
int pixelLightCount = GetAdditionalLightsCount();
for (int i = 0; i < pixelLightCount; i++)
{
Light light = GetAdditionalLight(i, WorldPosition);
half3 attenuatedLightColor = light.color * (light.distanceAttenuation * light.shadowAttenuation);
half3 dirView = normalize(light.direction + WorldView);
half NdotV = saturate(dot(WorldNormal, dirView));
NdotV = pow(NdotV, SpecularPower * 3);
NdotV = smoothstep(SpecularCutoff - SpecularTolerance, SpecularCutoff + SpecularTolerance, NdotV);
specularColor += NdotV * (SpecColor.rgb * attenuatedLightColor);
}
#endif
specularColor = lerp(half3(0, 0, 0), specularColor, SpecColor.a);
Specular = specularColor;
}