From 7aace39c2fe63757c3ac966452b030842511e734 Mon Sep 17 00:00:00 2001 From: Jeremy Ong Date: Fri, 4 Feb 2022 13:37:42 -0700 Subject: [PATCH] Consolidate alpha retrieval and clip Signed-off-by: Jeremy Ong --- .../Assets/Materials/Types/DepthPass_WithPS.azsl | 3 +-- .../Types/EnhancedPBR_DepthPass_WithPS.azsl | 3 +-- .../Materials/Types/EnhancedPBR_ForwardPass.azsl | 2 +- .../Types/EnhancedPBR_Shadowmap_WithPS.azsl | 3 +-- .../Types/EnhancedSurface_ForwardPass.azsl | 3 +-- .../EvaluateEnhancedSurface.azsli | 1 - .../EvaluateStandardSurface.azsli | 1 - .../MaterialFunctions/EvaluateTangentFrame.azsli | 4 ++-- ...etAlpha.azsli => StandardGetAlphaAndClip.azsli} | 6 ++++-- .../MaterialFunctions/StandardMaybeClip.azsli | 14 -------------- .../Assets/Materials/Types/ShadowMap_WithPS.azsl | 3 +-- .../Types/StandardPBR_DepthPass_WithPS.azsl | 3 +-- .../Materials/Types/StandardPBR_ForwardPass.azsl | 2 +- .../Types/StandardPBR_Shadowmap_WithPS.azsl | 3 +-- .../Types/StandardSurface_ForwardPass.azsl | 3 +-- 15 files changed, 16 insertions(+), 38 deletions(-) rename Gems/Atom/Feature/Common/Assets/Materials/Types/MaterialFunctions/{StandardGetAlpha.azsli => StandardGetAlphaAndClip.azsli} (57%) delete mode 100644 Gems/Atom/Feature/Common/Assets/Materials/Types/MaterialFunctions/StandardMaybeClip.azsli diff --git a/Gems/Atom/Feature/Common/Assets/Materials/Types/DepthPass_WithPS.azsl b/Gems/Atom/Feature/Common/Assets/Materials/Types/DepthPass_WithPS.azsl index 9b017222b1..59d10f28f9 100644 --- a/Gems/Atom/Feature/Common/Assets/Materials/Types/DepthPass_WithPS.azsl +++ b/Gems/Atom/Feature/Common/Assets/Materials/Types/DepthPass_WithPS.azsl @@ -116,8 +116,7 @@ PSDepthOutput MainPS(VSDepthOutput IN, bool isFrontFace : SV_IsFrontFace) } #ifndef MULTILAYER - float alpha = GetAlpha(IN.m_uv); - MaybeClip(alpha, IN.m_uv); + GetAlphaAndClip(IN.m_uv); #endif return OUT; diff --git a/Gems/Atom/Feature/Common/Assets/Materials/Types/EnhancedPBR_DepthPass_WithPS.azsl b/Gems/Atom/Feature/Common/Assets/Materials/Types/EnhancedPBR_DepthPass_WithPS.azsl index 2f7a5b94f9..f5ca5c5cde 100644 --- a/Gems/Atom/Feature/Common/Assets/Materials/Types/EnhancedPBR_DepthPass_WithPS.azsl +++ b/Gems/Atom/Feature/Common/Assets/Materials/Types/EnhancedPBR_DepthPass_WithPS.azsl @@ -11,10 +11,9 @@ #include "MaterialFunctions/StandardGetObjectToWorld.azsli" #include "MaterialFunctions/StandardGetNormalToWorld.azsli" -#include "MaterialFunctions/StandardGetAlpha.azsli" #include "MaterialFunctions/StandardTransformUvs.azsli" #include "MaterialFunctions/EvaluateTangentFrame.azsli" #include "MaterialFunctions/ParallaxDepth.azsli" -#include "MaterialFunctions/StandardMaybeClip.azsli" +#include "MaterialFunctions/StandardGetAlphaAndClip.azsli" #include "DepthPass_WithPS.azsl" 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 bac97fed64..3e2bd4588b 100644 --- a/Gems/Atom/Feature/Common/Assets/Materials/Types/EnhancedPBR_ForwardPass.azsl +++ b/Gems/Atom/Feature/Common/Assets/Materials/Types/EnhancedPBR_ForwardPass.azsl @@ -39,7 +39,7 @@ COMMON_OPTIONS_DETAIL_MAPS() #include "MaterialFunctions/EnhancedParallaxDepth.azsli" #include "MaterialFunctions/StandardGetNormalToWorld.azsli" #include "MaterialFunctions/StandardGetObjectToWorld.azsli" -#include "MaterialFunctions/StandardMaybeClip.azsli" +#include "MaterialFunctions/StandardGetAlphaAndClip.azsli" #include "MaterialFunctions/StandardTransformDetailUvs.azsli" #include "MaterialFunctions/StandardTransformUvs.azsli" diff --git a/Gems/Atom/Feature/Common/Assets/Materials/Types/EnhancedPBR_Shadowmap_WithPS.azsl b/Gems/Atom/Feature/Common/Assets/Materials/Types/EnhancedPBR_Shadowmap_WithPS.azsl index 6c01a63a7c..3a9f8a7417 100644 --- a/Gems/Atom/Feature/Common/Assets/Materials/Types/EnhancedPBR_Shadowmap_WithPS.azsl +++ b/Gems/Atom/Feature/Common/Assets/Materials/Types/EnhancedPBR_Shadowmap_WithPS.azsl @@ -18,10 +18,9 @@ #include "MaterialFunctions/StandardGetObjectToWorld.azsli" #include "MaterialFunctions/StandardGetNormalToWorld.azsli" -#include "MaterialFunctions/StandardGetAlpha.azsli" #include "MaterialFunctions/StandardTransformUvs.azsli" #include "MaterialFunctions/EvaluateTangentFrame.azsli" #include "MaterialFunctions/ParallaxDepth.azsli" -#include "MaterialFunctions/StandardMaybeClip.azsli" +#include "MaterialFunctions/StandardGetAlphaAndClip.azsli" #include "ShadowMap_WithPS.azsl" \ No newline at end of file diff --git a/Gems/Atom/Feature/Common/Assets/Materials/Types/EnhancedSurface_ForwardPass.azsl b/Gems/Atom/Feature/Common/Assets/Materials/Types/EnhancedSurface_ForwardPass.azsl index ceb9379f28..ef08b928cf 100644 --- a/Gems/Atom/Feature/Common/Assets/Materials/Types/EnhancedSurface_ForwardPass.azsl +++ b/Gems/Atom/Feature/Common/Assets/Materials/Types/EnhancedSurface_ForwardPass.azsl @@ -152,8 +152,7 @@ PbrLightingOutput ForwardPassPS_Common(VSOutput IN, bool isFrontFace, out float // ------- Alpha & Clip ------- // TODO: this often invokes a separate sample of the base color texture which is wasteful - float alpha = GetAlpha(IN.m_uv); - MaybeClip(alpha, IN.m_uv); + float alpha = GetAlphaAndClip(IN.m_uv); EvaluateEnhancedSurface(IN.m_normal, IN.m_uv, IN.m_detailUv, tangents, bitangents, isFrontFace, displacementIsClipped, surface); diff --git a/Gems/Atom/Feature/Common/Assets/Materials/Types/MaterialFunctions/EvaluateEnhancedSurface.azsli b/Gems/Atom/Feature/Common/Assets/Materials/Types/MaterialFunctions/EvaluateEnhancedSurface.azsli index 9cc3e05789..c8d59363ea 100644 --- a/Gems/Atom/Feature/Common/Assets/Materials/Types/MaterialFunctions/EvaluateEnhancedSurface.azsli +++ b/Gems/Atom/Feature/Common/Assets/Materials/Types/MaterialFunctions/EvaluateEnhancedSurface.azsli @@ -8,7 +8,6 @@ #include #include -#include "StandardGetAlpha.azsli" void EvaluateEnhancedSurface( float3 normal, diff --git a/Gems/Atom/Feature/Common/Assets/Materials/Types/MaterialFunctions/EvaluateStandardSurface.azsli b/Gems/Atom/Feature/Common/Assets/Materials/Types/MaterialFunctions/EvaluateStandardSurface.azsli index 54a4a2462a..c58f0534b3 100644 --- a/Gems/Atom/Feature/Common/Assets/Materials/Types/MaterialFunctions/EvaluateStandardSurface.azsli +++ b/Gems/Atom/Feature/Common/Assets/Materials/Types/MaterialFunctions/EvaluateStandardSurface.azsli @@ -8,7 +8,6 @@ #include #include -#include "StandardGetAlpha.azsli" void EvaluateStandardSurface( float3 normal, diff --git a/Gems/Atom/Feature/Common/Assets/Materials/Types/MaterialFunctions/EvaluateTangentFrame.azsli b/Gems/Atom/Feature/Common/Assets/Materials/Types/MaterialFunctions/EvaluateTangentFrame.azsli index 2aad5f257d..643a2d29ca 100644 --- a/Gems/Atom/Feature/Common/Assets/Materials/Types/MaterialFunctions/EvaluateTangentFrame.azsli +++ b/Gems/Atom/Feature/Common/Assets/Materials/Types/MaterialFunctions/EvaluateTangentFrame.azsli @@ -17,8 +17,8 @@ void EvaluateTangentFrame( // The input tangent and bitangent vectors are optional and used to forward data from interpolants float3 IN_tangent, float3 IN_bitangent, - float3 OUT_tangent, - float3 OUT_bitangent) + out float3 OUT_tangent, + out float3 OUT_bitangent) { if (DrawSrg::GetTangentAtUv(uvIndex) == 0) { diff --git a/Gems/Atom/Feature/Common/Assets/Materials/Types/MaterialFunctions/StandardGetAlpha.azsli b/Gems/Atom/Feature/Common/Assets/Materials/Types/MaterialFunctions/StandardGetAlphaAndClip.azsli similarity index 57% rename from Gems/Atom/Feature/Common/Assets/Materials/Types/MaterialFunctions/StandardGetAlpha.azsli rename to Gems/Atom/Feature/Common/Assets/Materials/Types/MaterialFunctions/StandardGetAlphaAndClip.azsli index 90f8e417e1..81380e8c07 100644 --- a/Gems/Atom/Feature/Common/Assets/Materials/Types/MaterialFunctions/StandardGetAlpha.azsli +++ b/Gems/Atom/Feature/Common/Assets/Materials/Types/MaterialFunctions/StandardGetAlphaAndClip.azsli @@ -8,10 +8,12 @@ #include "../MaterialInputs/AlphaInput.azsli" -float GetAlpha(float2 uvs[UvSetCount]) +float GetAlphaAndClip(float2 uvs[UvSetCount]) { // Alpha float2 baseColorUV = uvs[MaterialSrg::m_baseColorMapUvIndex]; float2 opacityUV = uvs[MaterialSrg::m_opacityMapUvIndex]; - return MaterialSrg::m_opacityFactor * SampleAlpha(MaterialSrg::m_baseColorMap, MaterialSrg::m_opacityMap, baseColorUV, opacityUV, MaterialSrg::m_sampler, o_opacity_source); + float alpha = SampleAlpha(MaterialSrg::m_baseColorMap, MaterialSrg::m_opacityMap, baseColorUV, opacityUV, MaterialSrg::m_sampler, o_opacity_source); + CheckClipping(alpha, MaterialSrg::m_opacityFactor); + return MaterialSrg::m_opacityFactor * alpha; } \ No newline at end of file diff --git a/Gems/Atom/Feature/Common/Assets/Materials/Types/MaterialFunctions/StandardMaybeClip.azsli b/Gems/Atom/Feature/Common/Assets/Materials/Types/MaterialFunctions/StandardMaybeClip.azsli deleted file mode 100644 index 2dabf9ba1e..0000000000 --- a/Gems/Atom/Feature/Common/Assets/Materials/Types/MaterialFunctions/StandardMaybeClip.azsli +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#include - -void MaybeClip(float alpha, float2 uvs[UvSetCount]) -{ - CheckClipping(alpha, MaterialSrg::m_opacityFactor); -} \ No newline at end of file diff --git a/Gems/Atom/Feature/Common/Assets/Materials/Types/ShadowMap_WithPS.azsl b/Gems/Atom/Feature/Common/Assets/Materials/Types/ShadowMap_WithPS.azsl index dd0665efe7..3dc2cf5d77 100644 --- a/Gems/Atom/Feature/Common/Assets/Materials/Types/ShadowMap_WithPS.azsl +++ b/Gems/Atom/Feature/Common/Assets/Materials/Types/ShadowMap_WithPS.azsl @@ -119,8 +119,7 @@ PSDepthOutput MainPS(VertexOutput IN, bool isFrontFace : SV_IsFrontFace) } #ifndef MULTILAYER - float alpha = GetAlpha(IN.m_uv); - MaybeClip(alpha, IN.m_uv); + GetAlphaAndClip(IN.m_uv); #endif return OUT; diff --git a/Gems/Atom/Feature/Common/Assets/Materials/Types/StandardPBR_DepthPass_WithPS.azsl b/Gems/Atom/Feature/Common/Assets/Materials/Types/StandardPBR_DepthPass_WithPS.azsl index fe46d9bfba..62dcddf2a6 100644 --- a/Gems/Atom/Feature/Common/Assets/Materials/Types/StandardPBR_DepthPass_WithPS.azsl +++ b/Gems/Atom/Feature/Common/Assets/Materials/Types/StandardPBR_DepthPass_WithPS.azsl @@ -11,10 +11,9 @@ #include "MaterialFunctions/StandardGetObjectToWorld.azsli" #include "MaterialFunctions/StandardGetNormalToWorld.azsli" -#include "MaterialFunctions/StandardGetAlpha.azsli" +#include "MaterialFunctions/StandardGetAlphaAndClip.azsli" #include "MaterialFunctions/EvaluateTangentFrame.azsli" #include "MaterialFunctions/StandardTransformUvs.azsli" #include "MaterialFunctions/ParallaxDepth.azsli" -#include "MaterialFunctions/StandardMaybeClip.azsli" #include "DepthPass_WithPS.azsl" 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 1a5e92b1d3..5dc1148370 100644 --- a/Gems/Atom/Feature/Common/Assets/Materials/Types/StandardPBR_ForwardPass.azsl +++ b/Gems/Atom/Feature/Common/Assets/Materials/Types/StandardPBR_ForwardPass.azsl @@ -32,7 +32,7 @@ COMMON_OPTIONS_EMISSIVE() #include "MaterialFunctions/ParallaxDepth.azsli" #include "MaterialFunctions/StandardGetNormalToWorld.azsli" #include "MaterialFunctions/StandardGetObjectToWorld.azsli" -#include "MaterialFunctions/StandardMaybeClip.azsli" +#include "MaterialFunctions/StandardGetAlphaAndClip.azsli" #include "MaterialFunctions/StandardTransformUvs.azsli" #include "StandardSurface_ForwardPass.azsl" \ No newline at end of file diff --git a/Gems/Atom/Feature/Common/Assets/Materials/Types/StandardPBR_Shadowmap_WithPS.azsl b/Gems/Atom/Feature/Common/Assets/Materials/Types/StandardPBR_Shadowmap_WithPS.azsl index e8aeb20871..7acc121036 100644 --- a/Gems/Atom/Feature/Common/Assets/Materials/Types/StandardPBR_Shadowmap_WithPS.azsl +++ b/Gems/Atom/Feature/Common/Assets/Materials/Types/StandardPBR_Shadowmap_WithPS.azsl @@ -15,10 +15,9 @@ #include "MaterialFunctions/StandardGetObjectToWorld.azsli" #include "MaterialFunctions/StandardGetNormalToWorld.azsli" -#include "MaterialFunctions/StandardGetAlpha.azsli" +#include "MaterialFunctions/StandardGetAlphaAndClip.azsli" #include "MaterialFunctions/StandardTransformUvs.azsli" #include "MaterialFunctions/EvaluateTangentFrame.azsli" #include "MaterialFunctions/ParallaxDepth.azsli" -#include "MaterialFunctions/StandardMaybeClip.azsli" #include "ShadowMap_WithPS.azsl" \ No newline at end of file diff --git a/Gems/Atom/Feature/Common/Assets/Materials/Types/StandardSurface_ForwardPass.azsl b/Gems/Atom/Feature/Common/Assets/Materials/Types/StandardSurface_ForwardPass.azsl index 1d3fa29991..b60f789cf5 100644 --- a/Gems/Atom/Feature/Common/Assets/Materials/Types/StandardSurface_ForwardPass.azsl +++ b/Gems/Atom/Feature/Common/Assets/Materials/Types/StandardSurface_ForwardPass.azsl @@ -149,8 +149,7 @@ PbrLightingOutput ForwardPassPS_Common(VSOutput IN, bool isFrontFace, out float // ------- Alpha & Clip ------- // TODO: this often invokes a separate sample of the base color texture which is wasteful - float alpha = GetAlpha(IN.m_uv); - MaybeClip(alpha, IN.m_uv); + float alpha = GetAlphaAndClip(IN.m_uv); EvaluateStandardSurface(IN.m_normal, IN.m_uv, tangents, bitangents, isFrontFace, displacementIsClipped, surface);