Direct3D 12——混合——裁剪像素

有时候,我们希望彻底禁止某个源像素参与后续的处理。这可以通过HLSL的内置函数clip(x)来 实现。此函数仅供像素着色器调用,若x < 0,则当前这一像素将从后面的处理阶段中丢弃。用这个函 数来处理铁丝网纹理的绘制再合适不过了,用它来绘制透明 与非透明相间的像素再好不过了。
Direct3D 12——混合——裁剪像素_第1张图片
alpha通道的铁丝网纹理。有着黑色alpha值的像素将被clip函数丢掉,从而不被绘制出来。因此,只有铁丝网部分会留存下来。从本质上来讲,alpha通道的用处在于从纹理中屏蔽掉非铁丝网的部分。

在像素着色器中,我们将采集像素的alpha分量。如果该值极小接近于0,则表示此像素是完全透明 的,那么我们就将此像素从后续处理中淘汰掉。

注意,通过混合操作也能实现相同的效果,但是使用clip函数更为有效。首先,它无须执行混合 运算(即可以禁用混合操作)。其次,处理期间也不必考虑绘制顺序。此外,通过提前从像素着色器中抛 弃像素,能够使之略过像素着色器的剩余指令(为终将被丢弃的像素执行这些后续指令是毫无意义的)。

纹理过滤操作可能会使alpha通道的数据略受影响,因此在裁剪像素时应对判断值留出适 当的余地(即允许特定的误差)。例如,可以根据接近0的alpha值来裁剪像素,但不要 按精确的0值进行处理。

你可能感兴趣的:(Direct3D12,图形渲染)