Fix radial lights

This commit is contained in:
Wojciech Figat
2021-12-13 17:30:51 +01:00
parent 5f4bfa36d8
commit 25c7909e30
4 changed files with 15 additions and 14 deletions

View File

@@ -118,11 +118,15 @@ float4 GetLighting(float3 viewPos, LightData lightData, GBufferSample gBuffer, f
float distanceAttenuation = 1;
float lightRadiusMask = 1;
float spotAttenuation = 1;
float3 toLight = lightData.Direction;
// Calculate attenuation
if (isRadial)
{
GetRadialLightAttenuation(lightData, isSpotLight, gBuffer.WorldPos, N, 1, L, NoL, distanceAttenuation, lightRadiusMask, spotAttenuation);
toLight = lightData.Position - gBuffer.WorldPos;
float distanceSqr = dot(toLight, toLight);
L = toLight * rsqrt(distanceSqr);
GetRadialLightAttenuation(lightData, isSpotLight, N, distanceSqr, 1, toLight, L, NoL, distanceAttenuation, lightRadiusMask, spotAttenuation);
}
float attenuation = distanceAttenuation * lightRadiusMask * spotAttenuation;
@@ -136,7 +140,7 @@ float4 GetLighting(float3 viewPos, LightData lightData, GBufferSample gBuffer, f
if (shadow.SurfaceShadow + shadow.TransmissionShadow > 0)
{
gBuffer.Roughness = max(gBuffer.Roughness, lightData.MinRoughness);
float energy = AreaLightSpecular(lightData, gBuffer.Roughness, lightData.Direction, L, V, N);
float energy = AreaLightSpecular(lightData, gBuffer.Roughness, toLight, L, V, N);
// Calculate direct lighting
LightingData lighting = SurfaceShading(gBuffer, energy, L, V, N);