Add IndirectLightingIntensity support for lights in Global Surface Atlas

This commit is contained in:
Wojciech Figat
2022-06-06 10:28:39 +02:00
parent 79220556df
commit 31d9802cf4
6 changed files with 11 additions and 0 deletions

View File

@@ -35,6 +35,7 @@ void DirectionalLight::Draw(RenderContext& renderContext)
data.ShadowsDepthBias = ShadowsDepthBias; data.ShadowsDepthBias = ShadowsDepthBias;
data.ShadowsSharpness = ShadowsSharpness; data.ShadowsSharpness = ShadowsSharpness;
data.VolumetricScatteringIntensity = VolumetricScatteringIntensity; data.VolumetricScatteringIntensity = VolumetricScatteringIntensity;
data.IndirectLightingIntensity = IndirectLightingIntensity;
data.CastVolumetricShadow = CastVolumetricShadow; data.CastVolumetricShadow = CastVolumetricShadow;
data.RenderedVolumetricFog = 0; data.RenderedVolumetricFog = 0;
data.ShadowsMode = ShadowsMode; data.ShadowsMode = ShadowsMode;

View File

@@ -131,6 +131,7 @@ void PointLight::Draw(RenderContext& renderContext)
data.SourceRadius = SourceRadius; data.SourceRadius = SourceRadius;
data.SourceLength = SourceLength; data.SourceLength = SourceLength;
data.ContactShadowsLength = ContactShadowsLength; data.ContactShadowsLength = ContactShadowsLength;
data.IndirectLightingIntensity = IndirectLightingIntensity;
data.IESTexture = IESTexture ? IESTexture->GetTexture() : nullptr; data.IESTexture = IESTexture ? IESTexture->GetTexture() : nullptr;
renderContext.List->PointLights.Add(data); renderContext.List->PointLights.Add(data);
} }

View File

@@ -112,6 +112,7 @@ void SkyLight::Draw(RenderContext& renderContext)
data.CastVolumetricShadow = CastVolumetricShadow; data.CastVolumetricShadow = CastVolumetricShadow;
data.RenderedVolumetricFog = 0; data.RenderedVolumetricFog = 0;
data.AdditiveColor = AdditiveColor.ToVector3() * (AdditiveColor.A * brightness); data.AdditiveColor = AdditiveColor.ToVector3() * (AdditiveColor.A * brightness);
data.IndirectLightingIntensity = IndirectLightingIntensity;
data.Radius = GetScaledRadius(); data.Radius = GetScaledRadius();
data.Image = GetSource(); data.Image = GetSource();
renderContext.List->SkyLights.Add(data); renderContext.List->SkyLights.Add(data);

View File

@@ -182,6 +182,7 @@ void SpotLight::Draw(RenderContext& renderContext)
data.CosOuterCone = _cosOuterCone; data.CosOuterCone = _cosOuterCone;
data.InvCosConeDifference = _invCosConeDifference; data.InvCosConeDifference = _invCosConeDifference;
data.ContactShadowsLength = ContactShadowsLength; data.ContactShadowsLength = ContactShadowsLength;
data.IndirectLightingIntensity = IndirectLightingIntensity;
data.IESTexture = IESTexture ? IESTexture->GetTexture() : nullptr; data.IESTexture = IESTexture ? IESTexture->GetTexture() : nullptr;
Vector3::Transform(Vector3::Up, GetOrientation(), data.UpVector); Vector3::Transform(Vector3::Up, GetOrientation(), data.UpVector);
data.OuterConeAngle = outerConeAngle; data.OuterConeAngle = outerConeAngle;

View File

@@ -786,6 +786,7 @@ bool GlobalSurfaceAtlasPass::Render(RenderContext& renderContext, GPUContext* co
const bool useShadow = CanRenderShadow(renderContext.View, light); const bool useShadow = CanRenderShadow(renderContext.View, light);
// TODO: test perf/quality when using Shadow Map for directional light (ShadowsPass::Instance()->LastDirLightShadowMap) instead of Global SDF trace // TODO: test perf/quality when using Shadow Map for directional light (ShadowsPass::Instance()->LastDirLightShadowMap) instead of Global SDF trace
light.SetupLightData(&data.Light, useShadow); light.SetupLightData(&data.Light, useShadow);
data.Light.Color *= light.IndirectLightingIntensity;
data.LightShadowsStrength = 1.0f - light.ShadowsStrength; data.LightShadowsStrength = 1.0f - light.ShadowsStrength;
context->UpdateCB(_cb0, &data); context->UpdateCB(_cb0, &data);
context->SetState(_psDirectLighting0); context->SetState(_psDirectLighting0);
@@ -813,6 +814,7 @@ bool GlobalSurfaceAtlasPass::Render(RenderContext& renderContext, GPUContext* co
// Draw draw light // Draw draw light
const bool useShadow = CanRenderShadow(renderContext.View, light); const bool useShadow = CanRenderShadow(renderContext.View, light);
light.SetupLightData(&data.Light, useShadow); light.SetupLightData(&data.Light, useShadow);
data.Light.Color *= light.IndirectLightingIntensity;
data.LightShadowsStrength = 1.0f - light.ShadowsStrength; data.LightShadowsStrength = 1.0f - light.ShadowsStrength;
context->UpdateCB(_cb0, &data); context->UpdateCB(_cb0, &data);
context->SetState(_psDirectLighting1); context->SetState(_psDirectLighting1);
@@ -840,6 +842,7 @@ bool GlobalSurfaceAtlasPass::Render(RenderContext& renderContext, GPUContext* co
// Draw draw light // Draw draw light
const bool useShadow = CanRenderShadow(renderContext.View, light); const bool useShadow = CanRenderShadow(renderContext.View, light);
light.SetupLightData(&data.Light, useShadow); light.SetupLightData(&data.Light, useShadow);
data.Light.Color *= light.IndirectLightingIntensity;
data.LightShadowsStrength = 1.0f - light.ShadowsStrength; data.LightShadowsStrength = 1.0f - light.ShadowsStrength;
context->UpdateCB(_cb0, &data); context->UpdateCB(_cb0, &data);
context->SetState(_psDirectLighting1); context->SetState(_psDirectLighting1);

View File

@@ -34,6 +34,7 @@ struct RendererDirectionalLightData
float ShadowsSharpness; float ShadowsSharpness;
float VolumetricScatteringIntensity; float VolumetricScatteringIntensity;
float IndirectLightingIntensity;
int8 CastVolumetricShadow : 1; int8 CastVolumetricShadow : 1;
int8 RenderedVolumetricFog : 1; int8 RenderedVolumetricFog : 1;
@@ -72,6 +73,7 @@ struct RendererSpotLightData
float CosOuterCone; float CosOuterCone;
float InvCosConeDifference; float InvCosConeDifference;
float ContactShadowsLength; float ContactShadowsLength;
float IndirectLightingIntensity;
ShadowsCastingMode ShadowsMode; ShadowsCastingMode ShadowsMode;
int8 CastVolumetricShadow : 1; int8 CastVolumetricShadow : 1;
@@ -106,6 +108,7 @@ struct RendererPointLightData
float SourceLength; float SourceLength;
float ContactShadowsLength; float ContactShadowsLength;
float IndirectLightingIntensity;
ShadowsCastingMode ShadowsMode; ShadowsCastingMode ShadowsMode;
int8 CastVolumetricShadow : 1; int8 CastVolumetricShadow : 1;
@@ -126,6 +129,7 @@ struct RendererSkyLightData
float Radius; float Radius;
Vector3 AdditiveColor; Vector3 AdditiveColor;
float IndirectLightingIntensity;
int8 CastVolumetricShadow : 1; int8 CastVolumetricShadow : 1;
int8 RenderedVolumetricFog : 1; int8 RenderedVolumetricFog : 1;