出于学习目的,我使用 DirectX 12 创建了一个简单的图形程序。我听说在着色器代码中使用 If 语句对性能不利。然而,我无法理解如何在不使用
if
语句的情况下实现所附图像的效果。
这是我的代码:
float4 WaterPixelShader(PixelInput _in) : SV_Target
{
float heigth = _in.worldPosition.y / 10;
float white;
if (heigth > 0.7)
{
white = 1;
}
else
{
white = 0;
}
return float4(white, white, heigth, 1);
}
这就是我想要达到的效果:
如何使用布尔值本身作为整数并转换为
float
。 GPU 的类型转换速度通常比分支速度快得多。
float4 WaterPixelShader(PixelInput pixelInput) : SV_Target
{
float height = pixelInput.worldPosition.y / 10;
float white = (float)(height > 0.7);
return float4(white, white, height, 1);
}