60 lines
2.2 KiB
HLSL
60 lines
2.2 KiB
HLSL
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
/*=============================================================================
|
|
HitProxyPixelShader.hlsl: Pixel shader for rendering scene hit proxies.
|
|
=============================================================================*/
|
|
|
|
// Some input nodes can't compute their output value at hit proxy rendering time, and so their implementation changes.
|
|
#define HIT_PROXY_SHADER 1
|
|
|
|
#include "Common.ush"
|
|
#include "/Engine/Generated/Material.ush"
|
|
#include "/Engine/Generated/VertexFactory.ush"
|
|
|
|
// Whether HitProxy IDs are provided per instance or not
|
|
#define PER_INSTANCE_HITPROXY_ID (USE_INSTANCING || USE_PER_VERTEX_HITPROXY_ID || USE_VERTEXFACTORY_HITPROXY_ID)
|
|
|
|
float4 HitProxyId;
|
|
|
|
void Main(
|
|
FVertexFactoryInterpolantsVSToPS Interpolants,
|
|
#if PER_INSTANCE_HITPROXY_ID || USE_INSTANCE_CULLING
|
|
float4 InstanceHitProxyId : HIT_PROXY_ID,
|
|
#endif
|
|
float4 PixelPosition : TEXCOORD6,
|
|
#if USE_WORLD_POSITION_EXCLUDING_SHADER_OFFSETS
|
|
float3 PixelPositionExcludingWPO : TEXCOORD7,
|
|
#endif
|
|
in FStereoPSInput StereoInput,
|
|
in INPUT_POSITION_QUALIFIERS float4 SvPosition : SV_Position
|
|
OPTIONAL_IsFrontFace
|
|
OPTIONAL_OutDepthConservative
|
|
,out float4 OutColor : SV_Target0
|
|
)
|
|
{
|
|
StereoSetupPS(StereoInput);
|
|
|
|
FMaterialPixelParameters MaterialParameters = GetMaterialPixelParameters(Interpolants, 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
|
|
ApplyPixelDepthOffsetToMaterialParameters(MaterialParameters, PixelMaterialInputs, OutDepth);
|
|
#endif
|
|
|
|
GetMaterialCoverageAndClipping(MaterialParameters, PixelMaterialInputs);
|
|
|
|
#if PER_INSTANCE_HITPROXY_ID || USE_INSTANCE_CULLING
|
|
OutColor = HitProxyId + InstanceHitProxyId;
|
|
#else
|
|
OutColor = HitProxyId;
|
|
#endif
|
|
}
|