正向渲染是直接根据输入的几何形状和照明信息计算表面碎片的辐射值的过程。延迟渲染将该过程分为两个步骤:首先生成一个包含空间属性的屏幕空间缓冲区(包含通过光栅化输入几何图形而构建的材质属性)(几何缓冲区或G缓冲区),其次通过组合G-缓冲带照明信息。
延迟渲染通常是对正向渲染的优化。一种解释是,照明是相当昂贵的,并且如果您有任何透支,那么您将照明屏幕上永远不会看到的像素,而如果将材质属性存储到G缓冲区中,然后再照明,则您将仅照明将要显示的像素。实际上出现在屏幕上。假设您还可以进行深度预传递,然后再将深度测试设置为D3D11_COMPARISON_EQUAL
或GL_EQUAL
等效,则进行正向渲染传递,这实际上是递延的优势吗?
延迟渲染还可以在GPU上更好地进行调度。将一个较大的翘曲/波阵面拆分为一个较小的几何波阵面,然后再将较小的照明波阵面拆分,可以提高占用率(同时飞行中有更多的波阵面)。但是,最终还会占用更多带宽(将大量通道写到G缓冲区,然后在照明期间将它们读回)。显然,这里的细节在很大程度上取决于您的GPU,但是一般原则是什么?
在正向渲染和延迟渲染之间做出决定时,还有其他实际性能方面的考虑吗?(假设如有必要,我们可以使用每种技术的变体:即,我们也可以比较前向平铺和延迟的平铺。)