Consolidate alpha retrieval and clip

Signed-off-by: Jeremy Ong <jcong@amazon.com>
This commit is contained in:
Jeremy Ong
2022-02-04 13:37:42 -07:00
parent 61f915366a
commit 7aace39c2f
15 changed files with 16 additions and 38 deletions
@@ -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;
@@ -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"
@@ -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"
@@ -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"
@@ -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);
@@ -8,7 +8,6 @@
#include <Atom/Features/PBR/Surfaces/EnhancedSurface.azsli>
#include <Atom/Features/MatrixUtility.azsli>
#include "StandardGetAlpha.azsli"
void EvaluateEnhancedSurface(
float3 normal,
@@ -8,7 +8,6 @@
#include <Atom/Features/PBR/Surfaces/StandardSurface.azsli>
#include <Atom/Features/MatrixUtility.azsli>
#include "StandardGetAlpha.azsli"
void EvaluateStandardSurface(
float3 normal,
@@ -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)
{
@@ -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;
}
@@ -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 <Atom/Features/PBR/AlphaUtils.azsli>
void MaybeClip(float alpha, float2 uvs[UvSetCount])
{
CheckClipping(alpha, MaterialSrg::m_opacityFactor);
}
@@ -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;
@@ -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"
@@ -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"
@@ -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"
@@ -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);