如果是正向渲染,则FS执行的次数为(numberOfAllPixels*numberOfLights(;如果是延迟渲染,则执行的次数是(numberOfVisiblePixels*numberOfLight斯(。
因此,如果我将early-z添加到正向渲染中,那么FS执行的次数也将变为(numberOfVisiblePixels*numberOfLights(,那么延迟渲染没有任何好处吗?
在正向渲染中,必须多次重新渲染整个场景。在延迟渲染中,只渲染一次场景,仅此而已。
重新渲染整个场景意味着重新进行一系列工作,包括但不限于:
- 场景的CPU处理。也就是说,遍历场景图形并发出渲染命令
- GPU处理绘图命令之间的状态变化
- GPU读取网格的顶点阵列
- 顶点着色器执行
所有这些在延迟渲染中只需发生一次。
别忘了"早-z";不是免费的。这些三角形不仅必须生成,而且还必须光栅化。它们必须深入处理管道,才能被淘汰。这不是什么大不了的事,但也不是什么都没有。
所以,是的,前向渲染中的深度预处理意味着只有在绝对必要的时候才运行FS。但你仍然在处理一大堆不必要的事情。