317 lines
11 KiB
HLSL
317 lines
11 KiB
HLSL
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
#include "/Engine/Public/Platform.ush"
|
|
#include "/Plugin/TextureGraph/SamplerStates.ush"
|
|
#include "/Plugin/TextureGraph/ShaderUtil.ush"
|
|
|
|
Texture2D LHS;
|
|
Texture2D RHS;
|
|
Texture2D Then;
|
|
Texture2D Else;
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
/// GT
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
float4 FSH_IfThenElse_GT_Component(float2 uv : TEXCOORD0) : SV_Target0
|
|
{
|
|
float4 LHSValue = LHS.Sample(SamplerStates_NoBorder, uv);
|
|
float4 RHSValue = RHS.Sample(SamplerStates_NoBorder, uv);
|
|
float4 ThenValue = Then.Sample(SamplerStates_NoBorder, uv);
|
|
float4 ElseValue = Else.Sample(SamplerStates_NoBorder, uv);
|
|
|
|
float4 Result;
|
|
Result.r = LHSValue.r > RHSValue.r ? ThenValue.r : ElseValue.r;
|
|
Result.g = LHSValue.g > RHSValue.g ? ThenValue.g : ElseValue.g;
|
|
Result.b = LHSValue.b > RHSValue.b ? ThenValue.b : ElseValue.b;
|
|
Result.a = LHSValue.a > RHSValue.a ? ThenValue.a : ElseValue.a;
|
|
|
|
return Result;
|
|
}
|
|
|
|
float4 FSH_IfThenElse_GT_All(float2 uv : TEXCOORD0) : SV_Target0
|
|
{
|
|
float4 LHSValue = LHS.Sample(SamplerStates_NoBorder, uv);
|
|
float4 RHSValue = RHS.Sample(SamplerStates_NoBorder, uv);
|
|
float4 ThenValue = Then.Sample(SamplerStates_NoBorder, uv);
|
|
float4 ElseValue = Else.Sample(SamplerStates_NoBorder, uv);
|
|
|
|
float4 Result;
|
|
|
|
if (LHSValue.r > RHSValue.r && LHSValue.g > RHSValue.g && LHSValue.b > RHSValue.b && LHSValue.a > RHSValue.a)
|
|
Result = ThenValue;
|
|
else
|
|
Result = ElseValue;
|
|
|
|
return Result;
|
|
}
|
|
|
|
float4 FSH_IfThenElse_GT_Grayscale(float2 uv : TEXCOORD0) : SV_Target0
|
|
{
|
|
float4 LHSValue = LHS.Sample(SamplerStates_NoBorder, uv);
|
|
float4 RHSValue = RHS.Sample(SamplerStates_NoBorder, uv);
|
|
float4 ThenValue = Then.Sample(SamplerStates_NoBorder, uv);
|
|
float4 ElseValue = Else.Sample(SamplerStates_NoBorder, uv);
|
|
|
|
float LHSGray = Grayscale(LHSValue.rgb);
|
|
float RHSGray = Grayscale(RHSValue.rgb);
|
|
|
|
float4 Result = LHSGray > RHSGray ? ThenValue : ElseValue;
|
|
return Result;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
/// GT
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
float4 FSH_IfThenElse_GTE_Component(float2 uv : TEXCOORD0) : SV_Target0
|
|
{
|
|
float4 LHSValue = LHS.Sample(SamplerStates_NoBorder, uv);
|
|
float4 RHSValue = RHS.Sample(SamplerStates_NoBorder, uv);
|
|
float4 ThenValue = Then.Sample(SamplerStates_NoBorder, uv);
|
|
float4 ElseValue = Else.Sample(SamplerStates_NoBorder, uv);
|
|
|
|
float4 Result;
|
|
Result.r = LHSValue.r >= RHSValue.r ? ThenValue.r : ElseValue.r;
|
|
Result.g = LHSValue.g >= RHSValue.g ? ThenValue.g : ElseValue.g;
|
|
Result.b = LHSValue.b >= RHSValue.b ? ThenValue.b : ElseValue.b;
|
|
Result.a = LHSValue.a >= RHSValue.a ? ThenValue.a : ElseValue.a;
|
|
|
|
return Result;
|
|
}
|
|
|
|
float4 FSH_IfThenElse_GTE_All(float2 uv : TEXCOORD0) : SV_Target0
|
|
{
|
|
float4 LHSValue = LHS.Sample(SamplerStates_NoBorder, uv);
|
|
float4 RHSValue = RHS.Sample(SamplerStates_NoBorder, uv);
|
|
float4 ThenValue = Then.Sample(SamplerStates_NoBorder, uv);
|
|
float4 ElseValue = Else.Sample(SamplerStates_NoBorder, uv);
|
|
|
|
float4 Result;
|
|
|
|
if (LHSValue.r >= RHSValue.r &&
|
|
LHSValue.g >= RHSValue.g &&
|
|
LHSValue.b >= RHSValue.b &&
|
|
LHSValue.a >= RHSValue.a)
|
|
Result = ThenValue;
|
|
else
|
|
Result = ElseValue;
|
|
|
|
return Result;
|
|
}
|
|
|
|
float4 FSH_IfThenElse_GTE_Grayscale(float2 uv : TEXCOORD0) : SV_Target0
|
|
{
|
|
float4 LHSValue = LHS.Sample(SamplerStates_NoBorder, uv);
|
|
float4 RHSValue = RHS.Sample(SamplerStates_NoBorder, uv);
|
|
float4 ThenValue = Then.Sample(SamplerStates_NoBorder, uv);
|
|
float4 ElseValue = Else.Sample(SamplerStates_NoBorder, uv);
|
|
|
|
float LHSGray = Grayscale(LHSValue.rgb);
|
|
float RHSGray = Grayscale(RHSValue.rgb);
|
|
|
|
float4 Result = LHSGray >= RHSGray ? ThenValue : ElseValue;
|
|
return Result;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
/// LT
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
float4 FSH_IfThenElse_LT_Component(float2 uv : TEXCOORD0) : SV_Target0
|
|
{
|
|
float4 LHSValue = LHS.Sample(SamplerStates_NoBorder, uv);
|
|
float4 RHSValue = RHS.Sample(SamplerStates_NoBorder, uv);
|
|
float4 ThenValue = Then.Sample(SamplerStates_NoBorder, uv);
|
|
float4 ElseValue = Else.Sample(SamplerStates_NoBorder, uv);
|
|
|
|
float4 Result;
|
|
Result.r = LHSValue.r < RHSValue.r ? ThenValue.r : ElseValue.r;
|
|
Result.g = LHSValue.g < RHSValue.g ? ThenValue.g : ElseValue.g;
|
|
Result.b = LHSValue.b < RHSValue.b ? ThenValue.b : ElseValue.b;
|
|
Result.a = LHSValue.a < RHSValue.a ? ThenValue.a : ElseValue.a;
|
|
|
|
return Result;
|
|
}
|
|
|
|
float4 FSH_IfThenElse_LT_All(float2 uv : TEXCOORD0) : SV_Target0
|
|
{
|
|
float4 LHSValue = LHS.Sample(SamplerStates_NoBorder, uv);
|
|
float4 RHSValue = RHS.Sample(SamplerStates_NoBorder, uv);
|
|
float4 ThenValue = Then.Sample(SamplerStates_NoBorder, uv);
|
|
float4 ElseValue = Else.Sample(SamplerStates_NoBorder, uv);
|
|
|
|
float4 Result;
|
|
|
|
if (LHSValue.r < RHSValue.r && LHSValue.g < RHSValue.g && LHSValue.b < RHSValue.b && LHSValue.a < RHSValue.a)
|
|
Result = ThenValue;
|
|
else
|
|
Result = ElseValue;
|
|
|
|
return Result;
|
|
}
|
|
|
|
float4 FSH_IfThenElse_LT_Grayscale(float2 uv : TEXCOORD0) : SV_Target0
|
|
{
|
|
float4 LHSValue = LHS.Sample(SamplerStates_NoBorder, uv);
|
|
float4 RHSValue = RHS.Sample(SamplerStates_NoBorder, uv);
|
|
float4 ThenValue = Then.Sample(SamplerStates_NoBorder, uv);
|
|
float4 ElseValue = Else.Sample(SamplerStates_NoBorder, uv);
|
|
|
|
float LHSGray = Grayscale(LHSValue.rgb);
|
|
float RHSGray = Grayscale(RHSValue.rgb);
|
|
|
|
float4 Result = LHSGray < RHSGray ? ThenValue : ElseValue;
|
|
return Result;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
/// LT
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
float4 FSH_IfThenElse_LTE_Component(float2 uv : TEXCOORD0) : SV_Target0
|
|
{
|
|
float4 LHSValue = LHS.Sample(SamplerStates_NoBorder, uv);
|
|
float4 RHSValue = RHS.Sample(SamplerStates_NoBorder, uv);
|
|
float4 ThenValue = Then.Sample(SamplerStates_NoBorder, uv);
|
|
float4 ElseValue = Else.Sample(SamplerStates_NoBorder, uv);
|
|
|
|
float4 Result;
|
|
Result.r = LHSValue.r <= RHSValue.r ? ThenValue.r : ElseValue.r;
|
|
Result.g = LHSValue.g <= RHSValue.g ? ThenValue.g : ElseValue.g;
|
|
Result.b = LHSValue.b <= RHSValue.b ? ThenValue.b : ElseValue.b;
|
|
Result.a = LHSValue.a <= RHSValue.a ? ThenValue.a : ElseValue.a;
|
|
|
|
return Result;
|
|
}
|
|
|
|
float4 FSH_IfThenElse_LTE_All(float2 uv : TEXCOORD0) : SV_Target0
|
|
{
|
|
float4 LHSValue = LHS.Sample(SamplerStates_NoBorder, uv);
|
|
float4 RHSValue = RHS.Sample(SamplerStates_NoBorder, uv);
|
|
float4 ThenValue = Then.Sample(SamplerStates_NoBorder, uv);
|
|
float4 ElseValue = Else.Sample(SamplerStates_NoBorder, uv);
|
|
|
|
float4 Result;
|
|
|
|
if (LHSValue.r <= RHSValue.r &&
|
|
LHSValue.g <= RHSValue.g &&
|
|
LHSValue.b <= RHSValue.b &&
|
|
LHSValue.a <= RHSValue.a)
|
|
Result = ThenValue;
|
|
else
|
|
Result = ElseValue;
|
|
|
|
return Result;
|
|
}
|
|
|
|
float4 FSH_IfThenElse_LTE_Grayscale(float2 uv : TEXCOORD0) : SV_Target0
|
|
{
|
|
float4 LHSValue = LHS.Sample(SamplerStates_NoBorder, uv);
|
|
float4 RHSValue = RHS.Sample(SamplerStates_NoBorder, uv);
|
|
float4 ThenValue = Then.Sample(SamplerStates_NoBorder, uv);
|
|
float4 ElseValue = Else.Sample(SamplerStates_NoBorder, uv);
|
|
|
|
float LHSGray = Grayscale(LHSValue.rgb);
|
|
float RHSGray = Grayscale(RHSValue.rgb);
|
|
|
|
float4 Result = LHSGray <= RHSGray ? ThenValue : ElseValue;
|
|
return Result;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
/// EQ
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
float4 FSH_IfThenElse_EQ_Component(float2 uv : TEXCOORD0) : SV_Target0
|
|
{
|
|
float4 LHSValue = LHS.Sample(SamplerStates_NoBorder, uv);
|
|
float4 RHSValue = RHS.Sample(SamplerStates_NoBorder, uv);
|
|
float4 ThenValue = Then.Sample(SamplerStates_NoBorder, uv);
|
|
float4 ElseValue = Else.Sample(SamplerStates_NoBorder, uv);
|
|
|
|
float4 Result;
|
|
Result.r = abs(LHSValue.r - RHSValue.r) < 0.00001 ? ThenValue.r : ElseValue.r;
|
|
Result.g = abs(LHSValue.g - RHSValue.g) < 0.00001 ? ThenValue.g : ElseValue.g;
|
|
Result.b = abs(LHSValue.b - RHSValue.b) < 0.00001 ? ThenValue.b : ElseValue.b;
|
|
Result.a = abs(LHSValue.a - RHSValue.a) < 0.00001 ? ThenValue.a : ElseValue.a;
|
|
|
|
return Result;
|
|
}
|
|
|
|
float4 FSH_IfThenElse_EQ_All(float2 uv : TEXCOORD0) : SV_Target0
|
|
{
|
|
float4 LHSValue = LHS.Sample(SamplerStates_NoBorder, uv);
|
|
float4 RHSValue = RHS.Sample(SamplerStates_NoBorder, uv);
|
|
float4 ThenValue = Then.Sample(SamplerStates_NoBorder, uv);
|
|
float4 ElseValue = Else.Sample(SamplerStates_NoBorder, uv);
|
|
|
|
float4 Result;
|
|
|
|
if (abs(LHSValue.r - RHSValue.r) < 0.00001 && abs(LHSValue.g - RHSValue.g) < 0.00001 && abs(LHSValue.b - RHSValue.b) < 0.00001 && abs(LHSValue.a - RHSValue.a) < 0.00001)
|
|
Result = ThenValue;
|
|
else
|
|
Result = ElseValue;
|
|
|
|
return Result;
|
|
}
|
|
|
|
float4 FSH_IfThenElse_EQ_Grayscale(float2 uv : TEXCOORD0) : SV_Target0
|
|
{
|
|
float4 LHSValue = LHS.Sample(SamplerStates_NoBorder, uv);
|
|
float4 RHSValue = RHS.Sample(SamplerStates_NoBorder, uv);
|
|
float4 ThenValue = Then.Sample(SamplerStates_NoBorder, uv);
|
|
float4 ElseValue = Else.Sample(SamplerStates_NoBorder, uv);
|
|
|
|
float LHSGray = Grayscale(LHSValue.rgb);
|
|
float RHSGray = Grayscale(RHSValue.rgb);
|
|
|
|
float4 Result = abs(LHSGray - RHSGray) < 0.00001 ? ThenValue : ElseValue;
|
|
return Result;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
/// NEQ
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
float4 FSH_IfThenElse_NEQ_Component(float2 uv : TEXCOORD0) : SV_Target0
|
|
{
|
|
float4 LHSValue = LHS.Sample(SamplerStates_NoBorder, uv);
|
|
float4 RHSValue = RHS.Sample(SamplerStates_NoBorder, uv);
|
|
float4 ThenValue = Then.Sample(SamplerStates_NoBorder, uv);
|
|
float4 ElseValue = Else.Sample(SamplerStates_NoBorder, uv);
|
|
|
|
float4 Result;
|
|
Result.r = abs(LHSValue.r - RHSValue.r) > 0.00001 ? ThenValue.r : ElseValue.r;
|
|
Result.g = abs(LHSValue.g - RHSValue.g) > 0.00001 ? ThenValue.g : ElseValue.g;
|
|
Result.b = abs(LHSValue.b - RHSValue.b) > 0.00001 ? ThenValue.b : ElseValue.b;
|
|
Result.a = abs(LHSValue.a - RHSValue.a) > 0.00001 ? ThenValue.a : ElseValue.a;
|
|
|
|
return Result;
|
|
}
|
|
|
|
float4 FSH_IfThenElse_NEQ_All(float2 uv : TEXCOORD0) : SV_Target0
|
|
{
|
|
float4 LHSValue = LHS.Sample(SamplerStates_NoBorder, uv);
|
|
float4 RHSValue = RHS.Sample(SamplerStates_NoBorder, uv);
|
|
float4 ThenValue = Then.Sample(SamplerStates_NoBorder, uv);
|
|
float4 ElseValue = Else.Sample(SamplerStates_NoBorder, uv);
|
|
|
|
float4 Result;
|
|
|
|
if (abs(LHSValue.r - RHSValue.r) > 0.00001 && abs(LHSValue.g - RHSValue.g) > 0.00001 && abs(LHSValue.b - RHSValue.b) > 0.00001 && abs(LHSValue.a - RHSValue.a) > 0.00001)
|
|
Result = ThenValue;
|
|
else
|
|
Result = ElseValue;
|
|
|
|
return Result;
|
|
}
|
|
|
|
float4 FSH_IfThenElse_NEQ_Grayscale(float2 uv : TEXCOORD0) : SV_Target0
|
|
{
|
|
float4 LHSValue = LHS.Sample(SamplerStates_NoBorder, uv);
|
|
float4 RHSValue = RHS.Sample(SamplerStates_NoBorder, uv);
|
|
float4 ThenValue = Then.Sample(SamplerStates_NoBorder, uv);
|
|
float4 ElseValue = Else.Sample(SamplerStates_NoBorder, uv);
|
|
|
|
float LHSGray = Grayscale(LHSValue.rgb);
|
|
float RHSGray = Grayscale(RHSValue.rgb);
|
|
|
|
float4 Result = abs(LHSGray - RHSGray) > 0.00001 ? ThenValue : ElseValue;
|
|
return Result;
|
|
}
|