2013-03-18 109 views

回答

1

深度测试发生在像素着色器之后。见this question。另外,它清楚地表明像素着色器每像素运行多于一次。考虑alpha混合:不透明像素必须先渲染,然后透明像素与已渲染的不透明像素混合。如果像素着色器每个像素只输入一次,则不会发生这种情况。

“每个基元一次”不是正确的术语。单个基元最喜欢覆盖多个像素,因此单个基元会导致像素着色器针对基元覆盖的每个像素运行。

为防止像素着色器在被其他对象遮挡的图元上运行,必须实现某种形式的occlusion culling。或者,一些司机可能会在一定程度上为你做到这一点。请参阅下面的this link和注释。

+1

如果像素着色器不修改像素的深度值,大多数驱动程序将进行早期深度测试,以避免遮挡像素(也称为“早期Z拒绝”)执行着色器。 – datenwolf 2013-03-18 20:50:33

相关问题