Files
UnrealEngine/Engine/Shaders/Private/DepthOnlyPixelShader.usf
2025-05-18 13:04:45 +08:00

105 lines
3.4 KiB
HLSL

// Copyright Epic Games, Inc. All Rights Reserved.
/*=============================================================================
DepthOnlyPixelShader.hlsl: Depth-only pixel shader.
=============================================================================*/
#if !MATERIAL_LWC_ENABLED
#define UE_DF_FORCE_FP32_OPS 1
#endif
#include "Common.ush"
#include "/Engine/Generated/Material.ush"
#include "/Engine/Generated/VertexFactory.ush"
void Main(
#if !MATERIALBLENDING_SOLID || OUTPUT_PIXEL_DEPTH_OFFSET
in INPUT_POSITION_QUALIFIERS float4 SvPosition : SV_Position,
#endif
#if !MATERIALBLENDING_SOLID || OUTPUT_PIXEL_DEPTH_OFFSET
FVertexFactoryInterpolantsVSToPS FactoryInterpolants
, float4 PixelPosition : TEXCOORD6 //-- Not used currently
#if USE_WORLD_POSITION_EXCLUDING_SHADER_OFFSETS
, float3 PixelPositionExcludingWPO : TEXCOORD7
#endif
, in FStereoPSInput StereoInput
OPTIONAL_IsFrontFace
OPTIONAL_OutDepthConservative,
#endif
out float4 OutColor : SV_Target0
#if MATERIALBLENDING_MASKED_USING_COVERAGE
, out uint OutCoverage : SV_Coverage
#endif
)
{
#if !MATERIALBLENDING_SOLID || OUTPUT_PIXEL_DEPTH_OFFSET
StereoSetupPS(StereoInput);
FMaterialPixelParameters MaterialParameters = GetMaterialPixelParameters(FactoryInterpolants, SvPosition);
FPixelMaterialInputs PixelMaterialInputs;
#if USE_WORLD_POSITION_EXCLUDING_SHADER_OFFSETS
float4 ScreenPosition = SvPositionToResolvedScreenPosition(SvPosition);
float3 TranslatedWorldPosition = SvPositionToResolvedTranslatedWorld(SvPosition);
CalcMaterialParametersEx(MaterialParameters, PixelMaterialInputs, SvPosition, ScreenPosition, bIsFrontFace, TranslatedWorldPosition, PixelPositionExcludingWPO);
#else
CalcMaterialParameters(MaterialParameters, PixelMaterialInputs, SvPosition, bIsFrontFace);
#endif
#if OUTPUT_PIXEL_DEPTH_OFFSET
#if ALLOW_DEBUG_VIEW_MODES
OutDepth = SvPosition.z;
if (!ResolvedView.DebugViewModeMask)
#endif
{
ApplyPixelDepthOffsetToMaterialParameters(MaterialParameters, PixelMaterialInputs, OutDepth);
}
#if APPLE_DEPTH_BIAS_HACK
OutDepth -= APPLE_DEPTH_BIAS_VALUE;
#endif
#endif
#if SUBTRATE_GBUFFER_FORMAT==1
FSubstrateData SubstrateData = PixelMaterialInputs.GetFrontSubstrateData();
FSubstratePixelHeader SubstratePixelHeader = MaterialParameters.GetFrontSubstrateHeader();
float MaterialOpacity = 1.0f;
if (SubstratePixelHeader.ClosureCount > 0)
{
// Update tree (coverage/transmittance/luminace weights)
const FSubstrateIntegrationSettings Settings = InitSubstrateIntegrationSettings();
const float3 V = MaterialParameters.CameraVector;
SubstratePixelHeader.SubstrateUpdateTree(V, Settings);
MaterialOpacity = SubstratePixelHeader.SubstrateTree.Operators[SubstrateData.OperatorIndex].Coverage;
}
#if SUBSTRATE_USE_PREMULTALPHA_OVERRIDE // AlphaComposite - Premultiplied alpha blending
MaterialOpacity = GetMaterialOpacity(PixelMaterialInputs);
#endif
#else // SUBTRATE_GBUFFER_FORMAT==1
float MaterialOpacity = GetMaterialOpacity(PixelMaterialInputs);
#endif // SUBTRATE_GBUFFER_FORMAT==1
#if MATERIALBLENDING_TRANSLUCENT
clip(MaterialOpacity - GetMaterialOpacityMaskClipValue());
#elif MATERIALBLENDING_MASKED_USING_COVERAGE
OutCoverage = DiscardMaterialWithPixelCoverage(MaterialParameters, PixelMaterialInputs);
#else
GetMaterialCoverageAndClipping(MaterialParameters, PixelMaterialInputs);
#endif
#endif
OutColor = 0;
}