小编the*_*bit的帖子

是否可以跳过像素着色器中的颜色输出?

我正在编写 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;
}
Run Code Online (Sandbox Code Playgroud)

但这只会写入看不见的黑色像素(因为黑色是这里的背景色)。但在某些情况下,如果像素之前已着色,则像素会明显变成黑色。我的目的是跳过对渲染目标的写入。有没有办法跳过这个,例如代码可能看起来像这样不起作用:

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;
}
Run Code Online (Sandbox Code Playgroud)

编辑- 现在我们有一个工作示例(未优化以保持可比性,剪辑而不是丢弃可能更快)示例:

float4 PS( PS_INPUT input) : SV_Target
{
    float4 result=float4(1,1,1,0);
    if(input.Col.r >= 0.999998f)
        discard;
    return result;
}
Run Code Online (Sandbox Code Playgroud)

shader direct3d hlsl

2
推荐指数
1
解决办法
3517
查看次数

标签 统计

direct3d ×1

hlsl ×1

shader ×1