我正在编写 PixelShader(HLSL、SM40)并尝试在某些情况下完全跳过输出。我当前的代码如下所示:
float4 PS( PS_INPUT input) : SV_Target
{
float4 result=float4(1,1,1,0);
if(input.Col.r >= 0.999998f)
result=float4(0,0,0,0);
return result;
}
但这只会写入看不见的黑色像素(因为黑色是这里的背景色)。但在某些情况下,如果像素之前已着色,则像素会明显变成黑色。我的目的是跳过对渲染目标的写入。有没有办法跳过这个,例如代码可能看起来像这样不起作用:
float4 PS( PS_INPUT input) : SV_Target
{
float4 result=float4(1,1,1,0);
if(input.Col.r >= 0.999998f)
return; //or 'return null;'
return result;
}
编辑 - 现在我们有了一个工作示例(未优化以保持可比性,剪辑而不是丢弃可能更快)示例:
float4 PS( PS_INPUT input) : SV_Target
{
float4 result=float4(1,1,1,0);
if(input.Col.r >= 0.999998f)
discard;
return result;
}
最佳答案
关于shader - 是否可以跳过像素着色器中的颜色输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16673670/