如果使用深度预pass,深度排序是多余的吗?



为了避免过度绘制(对同一个像素绘制两次阴影),最好从前向后绘制对象。当你在前面画一个对象时,深度值被写入深度缓冲区,然后当你在后面画一个对象时,如果它的深度值没有通过比较操作,像素可以被拒绝。然而,我一直想知道是否有任何好处深度排序,如果你做一个完整的深度预传递。我能看到从前到后排序的唯一好处是,深度测试与写作分开。因为读取像素深度值是为了将其与当前栅格化的三角形进行比较,所以深度缓冲区读取的数量总是相同的,无论渲染是前到后还是后到前。

然而,写入深度缓冲区的次数(用新的最低/最高值替换值)似乎取决于你是前到后还是后到前排序。我不太了解它,但我相信深度测试和写入是同一个操作(禁用深度测试也会禁用深度写入)。如果是这样的话,那么排序就无关紧要了。

这有什么区别吗?如果是或不是,为什么?

同时,考虑如果对象的深度通道附加了一个写入深度的片段着色器(这对于alpha测试的写入是必要的,例如链条栅栏,树木等)是否存在差异,我的直觉是alpha测试的对象不会产生差异,因为如果你写入深度缓冲区,早期的深度测试无法完成,因此碎片着色器需要运行。所以在这种情况下,同样的问题也适用,除了深度在片段着色器执行结束时读取和写入,问题仍然是是否只有测试(而不是写入),比测试和写入都快。深度排序对深度预传有什么好处?

使用深度预传递排序仍然是有帮助的。一些深度缓冲区具有可以通过单个测试剔除整个片段组的功能。分层深度缓冲,Hi-Z,不管它的具体名称是什么,这些技术是存在的。当你大致按前后顺序渲染时,它们的效果最好。

除了深度缓冲之外,还有一些GFX技术需要深度排序…

例如处理透明度,因为以错误的顺序渲染透明多边形导致错误的渲染结果。

我希望有更多类似的技术和效果,我想象体积照明,云,光间隙,和类似的…

最新更新