diff --git a/package/Shaders/AmbientCompositeCS.hlsl b/package/Shaders/AmbientCompositeCS.hlsl index d424895252..efdd5c6b6e 100644 --- a/package/Shaders/AmbientCompositeCS.hlsl +++ b/package/Shaders/AmbientCompositeCS.hlsl @@ -79,6 +79,8 @@ void SampleSSGI(uint2 pixCoord, float3 normalWS, out float ao, out float3 il) float skylightingDiffuse = SphericalHarmonics::FuncProductIntegral(skylightingSH, SphericalHarmonics::EvaluateCosineLobe(skylightingNormal)) / Math::PI; skylightingDiffuse = saturate(skylightingDiffuse); + skylightingDiffuse *= 1.0 + saturate(normalWS.z) * (1.0 - SharedData::skylightingSettings.MinDiffuseVisibility); + skylightingDiffuse = lerp(1.0, skylightingDiffuse, Skylighting::getFadeOutFactor(positionMS.xyz)); skylightingDiffuse = Skylighting::mixDiffuse(SharedData::skylightingSettings, skylightingDiffuse); diff --git a/package/Shaders/Lighting.hlsl b/package/Shaders/Lighting.hlsl index bf57c809e6..d52cfa5435 100644 --- a/package/Shaders/Lighting.hlsl +++ b/package/Shaders/Lighting.hlsl @@ -2288,7 +2288,6 @@ PS_OUTPUT main(PS_INPUT input, bool frontFace # endif float3 directionalAmbientColor = max(0, mul(DirectionalAmbient, modelNormal)); - float3 directionalAmbientColorDirect = 0; # if defined(SKYLIGHTING) float skylightingDiffuse = 1; @@ -2301,15 +2300,12 @@ PS_OUTPUT main(PS_INPUT input, bool frontFace skylightingDiffuse = lerp(1.0, skylightingDiffuse, skylightingFadeOutFactor); - float skylightingBoost = 0.25 * skylightingDiffuse * saturate(worldSpaceNormal.z) * (1.0 - SharedData::skylightingSettings.MinDiffuseVisibility); - skylightingDiffuse = Skylighting::mixDiffuse(SharedData::skylightingSettings, skylightingDiffuse); directionalAmbientColor = Color::GammaToLinear(directionalAmbientColor); - directionalAmbientColorDirect = directionalAmbientColor * skylightingBoost; - directionalAmbientColorDirect = Color::LinearToGamma(directionalAmbientColorDirect); - directionalAmbientColor *= skylightingDiffuse + skylightingBoost; + directionalAmbientColor *= skylightingDiffuse; + directionalAmbientColor *= 1.0 + saturate(worldSpaceNormal.z) * (1.0 - SharedData::skylightingSettings.MinDiffuseVisibility); directionalAmbientColor = Color::LinearToGamma(directionalAmbientColor); } # endif @@ -2322,7 +2318,6 @@ PS_OUTPUT main(PS_INPUT input, bool frontFace # if !defined(TRUE_PBR) # if defined(DEFERRED) && defined(SSGI) - diffuseColor += directionalAmbientColorDirect; # else diffuseColor += directionalAmbientColor; # endif @@ -2465,12 +2460,17 @@ PS_OUTPUT main(PS_INPUT input, bool frontFace if (Permutation::ExtraShaderDescriptor & Permutation::ExtraFlags::IsTree) { // Remove AO + float3 originalVertexColor = vertexColor; vertexColor = vertexColor / vertexAO; vertexColor = lerp(input.Color.xyz, vertexColor, skylightingFadeOutFactor); // Apply AO to direct lighting only + float3 originalDiffuseColor = diffuseColor; diffuseColor -= lightsDiffuseColor; diffuseColor += lerp(lightsDiffuseColor, lightsDiffuseColor * vertexAO, skylightingFadeOutFactor); + + vertexColor = lerp(vertexColor, originalVertexColor, SharedData::skylightingSettings.MinDiffuseVisibility); + diffuseColor = lerp(diffuseColor, originalDiffuseColor, SharedData::skylightingSettings.MinDiffuseVisibility); } // Brighten skylighting on vertex AO @@ -2502,7 +2502,6 @@ PS_OUTPUT main(PS_INPUT input, bool frontFace # endif # if defined(DEFERRED) && defined(SSGI) - color.xyz += indirectDiffuseLobeWeight * directionalAmbientColorDirect; # else color.xyz += indirectDiffuseLobeWeight * directionalAmbientColor; # endif @@ -2596,7 +2595,6 @@ PS_OUTPUT main(PS_INPUT input, bool frontFace # if defined(LOD_LAND_BLEND) && defined(TRUE_PBR) { # if defined(DEFERRED) && defined(SSGI) - lodLandDiffuseColor += directionalAmbientColorDirect; # else lodLandDiffuseColor += directionalAmbientColor; # endif diff --git a/package/Shaders/RunGrass.hlsl b/package/Shaders/RunGrass.hlsl index 060defd5cc..ac435d02da 100644 --- a/package/Shaders/RunGrass.hlsl +++ b/package/Shaders/RunGrass.hlsl @@ -693,7 +693,6 @@ PS_OUTPUT main(PS_INPUT input, bool frontFace normal = normalize(float3(normal.xy, max(0, normal.z))); float3 directionalAmbientColor = max(0, mul(SharedData::DirectionalAmbient, float4(normal, 1.0))); - float3 directionalAmbientColorDirect = 0; # if defined(SKYLIGHTING) if (!SharedData::InInterior) { @@ -709,23 +708,18 @@ PS_OUTPUT main(PS_INPUT input, bool frontFace float skylightingDiffuse = SphericalHarmonics::FuncProductIntegral(skylightingSH, SphericalHarmonics::EvaluateCosineLobe(skylightingNormal)) / Math::PI; skylightingDiffuse = saturate(skylightingDiffuse); - float skylightingBoost = 0.25 * skylightingDiffuse * saturate(normal.z) * (1.0 - SharedData::skylightingSettings.MinDiffuseVisibility); - skylightingDiffuse = lerp(1.0, skylightingDiffuse, skylightingFadeOutFactor); skylightingDiffuse = Skylighting::mixDiffuse(SharedData::skylightingSettings, skylightingDiffuse); directionalAmbientColor = Color::GammaToLinear(directionalAmbientColor); - directionalAmbientColorDirect = directionalAmbientColor * skylightingBoost; - directionalAmbientColorDirect = Color::LinearToGamma(directionalAmbientColorDirect); - directionalAmbientColor *= skylightingDiffuse + skylightingBoost; + directionalAmbientColor *= skylightingDiffuse; + directionalAmbientColor *= 1.0 + saturate(normal.z) * (1.0 - SharedData::skylightingSettings.MinDiffuseVisibility); directionalAmbientColor = Color::LinearToGamma(directionalAmbientColor); } # endif // SKYLIGHTING -# if defined(SSGI) - diffuseColor += directionalAmbientColorDirect; -# else +# if !defined(SSGI) diffuseColor += directionalAmbientColor; # endif @@ -875,7 +869,6 @@ PS_OUTPUT main(PS_INPUT input) # endif float3 directionalAmbientColor = max(0, mul(SharedData::DirectionalAmbient, float4(normal, 1.0))); - float3 directionalAmbientColorDirect = 0; # if defined(SKYLIGHTING) if (!SharedData::InInterior) { @@ -891,23 +884,19 @@ PS_OUTPUT main(PS_INPUT input) float skylightingDiffuse = SphericalHarmonics::FuncProductIntegral(skylightingSH, SphericalHarmonics::EvaluateCosineLobe(skylightingNormal)) / Math::PI; skylightingDiffuse = saturate(skylightingDiffuse); - float skylightingBoost = 0.25 * skylightingDiffuse * saturate(normal.z) * (1.0 - SharedData::skylightingSettings.MinDiffuseVisibility); - skylightingDiffuse = lerp(1.0, skylightingDiffuse, skylightingFadeOutFactor); skylightingDiffuse = Skylighting::mixDiffuse(SharedData::skylightingSettings, skylightingDiffuse); directionalAmbientColor = Color::GammaToLinear(directionalAmbientColor); - directionalAmbientColorDirect = directionalAmbientColor * skylightingBoost; - directionalAmbientColorDirect = Color::LinearToGamma(directionalAmbientColorDirect); - directionalAmbientColor *= skylightingDiffuse + skylightingBoost; + directionalAmbientColor *= skylightingDiffuse; + directionalAmbientColor *= 1.0 + saturate(normal.z) * (1.0 - SharedData::skylightingSettings.MinDiffuseVisibility); + directionalAmbientColor = Color::LinearToGamma(directionalAmbientColor); } # endif // SKYLIGHTING -# if defined(SSGI) - diffuseColor += directionalAmbientColorDirect; -# else +# if !defined(SSGI) diffuseColor += directionalAmbientColor; # endif