From 43f87d1541a3d810c782845935e14e57739d14ed Mon Sep 17 00:00:00 2001 From: mnaumov Date: Mon, 10 May 2021 17:58:12 -0700 Subject: [PATCH] another attempt fixing the artifacts --- .../Assets/Materials/Types/EnhancedPBR_ForwardPass.azsl | 3 ++- Gems/Atom/Feature/Common/Assets/Materials/Types/Skin.azsl | 2 +- .../Materials/Types/StandardMultilayerPBR_ForwardPass.azsl | 3 ++- .../Assets/Materials/Types/StandardPBR_ForwardPass.azsl | 5 +++-- .../Features/LightCulling/LightCullingTileIterator.azsli | 6 +++--- 5 files changed, 11 insertions(+), 8 deletions(-) diff --git a/Gems/Atom/Feature/Common/Assets/Materials/Types/EnhancedPBR_ForwardPass.azsl b/Gems/Atom/Feature/Common/Assets/Materials/Types/EnhancedPBR_ForwardPass.azsl index 367b2e379c..34c57db974 100644 --- a/Gems/Atom/Feature/Common/Assets/Materials/Types/EnhancedPBR_ForwardPass.azsl +++ b/Gems/Atom/Feature/Common/Assets/Materials/Types/EnhancedPBR_ForwardPass.azsl @@ -163,6 +163,7 @@ PbrLightingOutput ForwardPassPS_Common(VSOutput IN, bool isFrontFace, out float { DirectionalLightShadow::GetShadowCoords(shadowIndex, IN.m_worldPosition, IN.m_shadowCoords); } + IN.m_position.w = mul(ViewSrg::m_viewProjectionMatrix, IN.m_worldPosition).z; } } @@ -268,7 +269,7 @@ PbrLightingOutput ForwardPassPS_Common(VSOutput IN, bool isFrontFace, out float LightingData lightingData; // Light iterator - lightingData.tileIterator.Init(IN.m_position.xy, IN.m_position.z, PassSrg::m_lightListRemapped, PassSrg::m_tileLightData); + lightingData.tileIterator.Init(IN.m_position, PassSrg::m_lightListRemapped, PassSrg::m_tileLightData); lightingData.Init(surface.position, surface.normal, surface.roughnessLinear); // Directional light shadow coordinates diff --git a/Gems/Atom/Feature/Common/Assets/Materials/Types/Skin.azsl b/Gems/Atom/Feature/Common/Assets/Materials/Types/Skin.azsl index c81d96d552..84095ac163 100644 --- a/Gems/Atom/Feature/Common/Assets/Materials/Types/Skin.azsl +++ b/Gems/Atom/Feature/Common/Assets/Materials/Types/Skin.azsl @@ -324,7 +324,7 @@ PbrLightingOutput SkinPS_Common(VSOutput IN) LightingData lightingData; // Light iterator - lightingData.tileIterator.Init(IN.m_position.xy, IN.m_position.z, PassSrg::m_lightListRemapped, PassSrg::m_tileLightData); + lightingData.tileIterator.Init(IN.m_position, PassSrg::m_lightListRemapped, PassSrg::m_tileLightData); lightingData.Init(surface.position, surface.normal, surface.roughnessLinear); // Directional light shadow coordinates diff --git a/Gems/Atom/Feature/Common/Assets/Materials/Types/StandardMultilayerPBR_ForwardPass.azsl b/Gems/Atom/Feature/Common/Assets/Materials/Types/StandardMultilayerPBR_ForwardPass.azsl index 5c527998c1..9cc0047b72 100644 --- a/Gems/Atom/Feature/Common/Assets/Materials/Types/StandardMultilayerPBR_ForwardPass.azsl +++ b/Gems/Atom/Feature/Common/Assets/Materials/Types/StandardMultilayerPBR_ForwardPass.azsl @@ -195,6 +195,7 @@ PbrLightingOutput ForwardPassPS_Common(VSOutput IN, bool isFrontFace, out float { DirectionalLightShadow::GetShadowCoords(shadowIndex, IN.m_worldPosition, IN.m_shadowCoords); } + IN.m_position.w = mul(ViewSrg::m_viewProjectionMatrix, IN.m_worldPosition).z; } } @@ -303,7 +304,7 @@ PbrLightingOutput ForwardPassPS_Common(VSOutput IN, bool isFrontFace, out float LightingData lightingData; // Light iterator - lightingData.tileIterator.Init(IN.m_position.xy, IN.m_position.z, PassSrg::m_lightListRemapped, PassSrg::m_tileLightData); + lightingData.tileIterator.Init(IN.m_position, PassSrg::m_lightListRemapped, PassSrg::m_tileLightData); lightingData.Init(surface.position, surface.normal, surface.roughnessLinear); // Directional light shadow coordinates diff --git a/Gems/Atom/Feature/Common/Assets/Materials/Types/StandardPBR_ForwardPass.azsl b/Gems/Atom/Feature/Common/Assets/Materials/Types/StandardPBR_ForwardPass.azsl index dc20f89a75..8621865f54 100644 --- a/Gems/Atom/Feature/Common/Assets/Materials/Types/StandardPBR_ForwardPass.azsl +++ b/Gems/Atom/Feature/Common/Assets/Materials/Types/StandardPBR_ForwardPass.azsl @@ -125,7 +125,7 @@ PbrLightingOutput ForwardPassPS_Common(VSOutput IN, bool isFrontFace, out float // ------- Depth & Parallax ------- - depth = IN.m_position.w; + depth = IN.m_position.z; bool displacementIsClipped = false; @@ -147,6 +147,7 @@ PbrLightingOutput ForwardPassPS_Common(VSOutput IN, bool isFrontFace, out float { DirectionalLightShadow::GetShadowCoords(shadowIndex, IN.m_worldPosition, IN.m_shadowCoords); } + IN.m_position.w = mul(ViewSrg::m_viewProjectionMatrix, IN.m_worldPosition).z; } } @@ -210,7 +211,7 @@ PbrLightingOutput ForwardPassPS_Common(VSOutput IN, bool isFrontFace, out float LightingData lightingData; // Light iterator - lightingData.tileIterator.Init(IN.m_position.xy, IN.m_position.z, PassSrg::m_lightListRemapped, PassSrg::m_tileLightData); + lightingData.tileIterator.Init(IN.m_position, PassSrg::m_lightListRemapped, PassSrg::m_tileLightData); lightingData.Init(surface.position, surface.normal, surface.roughnessLinear); // Directional light shadow coordinates diff --git a/Gems/Atom/Feature/Common/Assets/ShaderLib/Atom/Features/LightCulling/LightCullingTileIterator.azsli b/Gems/Atom/Feature/Common/Assets/ShaderLib/Atom/Features/LightCulling/LightCullingTileIterator.azsli index 314a8951a4..001f672631 100644 --- a/Gems/Atom/Feature/Common/Assets/ShaderLib/Atom/Features/LightCulling/LightCullingTileIterator.azsli +++ b/Gems/Atom/Feature/Common/Assets/ShaderLib/Atom/Features/LightCulling/LightCullingTileIterator.azsli @@ -17,13 +17,13 @@ // This class is used by forward shaders to iterate through lights (and decals) that are visible at this pixel position class LightCullingTileIterator { - void Init(float2 screenPos, float depth, StructuredBuffer lightListRemapped, Texture2D tileLightDataTex) + void Init(float4 svPosition, StructuredBuffer lightListRemapped, Texture2D tileLightDataTex) { m_lightListRemapped = lightListRemapped; - uint2 tileId = ComputeTileId(screenPos); + uint2 tileId = ComputeTileId(svPosition.xy); - float viewz = abs(depth); + float viewz = abs(svPosition.w); // https://jira.agscollab.com/browse/ATOM-4198 // Replace GetDimensions() with a cbuffer uint read. Reading it from a cbuffer should be faster