Skip to content

Commit 1ba8584

Browse files
authored
fix spot light angle strength (#18945)
1 parent c788f7b commit 1ba8584

File tree

4 files changed

+19
-1
lines changed

4 files changed

+19
-1
lines changed

editor/assets/chunks/common/lighting/attenuation.chunk

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,3 +58,11 @@ float CalculateAngleAttenuation(vec3 spotLightDir, vec3 L, float cosAngleOuter)
5858
float litAngleOffset = -cosAngleOuter * litAngleScale;
5959
return GetAngleAtt(L, spotLightDir, litAngleScale, litAngleOffset);
6060
}
61+
62+
float CalculateAngleAttenuationWithStrength(vec3 spotLightDir, vec3 L, float cosAngleOuter, float strength)
63+
{
64+
float cosInner = max(dot(spotLightDir, L), 0.01);
65+
float litAngleScale = 1.0 / max(0.001, mix(cosInner, 1.0, strength) - cosAngleOuter);
66+
float litAngleOffset = -cosAngleOuter * litAngleScale;
67+
return GetAngleAtt(L, spotLightDir, litAngleScale, litAngleOffset);
68+
}

editor/assets/chunks/lighting-models/lighting-flow/common-flow.chunk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@
7878

7979
float angleAtt = 1.0;
8080
if (IS_SPOT_LIGHT(cc_lightPos[i].w)) {
81-
angleAtt = CCSurfacesLightingCalculateAngleAttenuation(lightingData, cc_lightSizeRangeAngle[i], -cc_lightDir[i].xyz);
81+
angleAtt = CCSurfacesLightingCalculateAngleAttenuationWithStrength(lightingData, cc_lightSizeRangeAngle[i], -cc_lightDir[i].xyz, cc_lightBoundingSizeVS[i].w);
8282
}
8383

8484
float multiplier = distAtt * angleAtt;

editor/assets/chunks/lighting-models/model-functions/standard.chunk

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@ float CCSurfacesLightingCalculateAngleAttenuation(in LightingIntermediateData li
2727
return CalculateAngleAttenuation(spotLightDir, lightingData.L, lightSizeRangeAngle.z);
2828
}
2929

30+
float CCSurfacesLightingCalculateAngleAttenuationWithStrength(in LightingIntermediateData lightingData, in vec4 lightSizeRangeAngle, in vec3 spotLightDir, in float strength)
31+
{
32+
return CalculateAngleAttenuationWithStrength(spotLightDir, lightingData.L, lightSizeRangeAngle.z, strength);
33+
}
34+
3035
void CCSurfacesLightingCalculateDirect(out vec3 lightingDiffuse, out vec3 lightingSpecular, in LightingIntermediateData lightingData, in vec4 lightSourceColorAndIntensity)
3136
{
3237
#if !CC_SURFACES_LIGHTING_DISABLE_DIFFUSE

editor/assets/chunks/lighting-models/model-functions/toon.chunk

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@ float CCSurfacesLightingCalculateAngleAttenuation(in LightingIntermediateData li
1717
return CalculateAngleAttenuation(spotLightDir, lightingData.L, lightSizeRangeAngle.z);
1818
}
1919

20+
float CCSurfacesLightingCalculateAngleAttenuationWithStrength(in LightingIntermediateData lightingData, in vec4 lightSizeRangeAngle, in vec3 spotLightDir, in float strength)
21+
{
22+
return CalculateAngleAttenuationWithStrength(spotLightDir, lightingData.L, lightSizeRangeAngle.z, strength);
23+
}
24+
2025
void CCSurfacesLightingCalculateDirect(out vec3 lightingDiffuse, out vec3 lightingSpecular, in LightingIntermediateData lightingData, in vec4 lightSourceColorAndIntensity)
2126
{
2227
vec3 irradiance = lightSourceColorAndIntensity.rgb * lightSourceColorAndIntensity.w;

0 commit comments

Comments
 (0)