延迟渲染
延迟渲染(延迟着色)是一种屏幕空间照明技术。在遍历场景的几何图形时,不计算场景的照明,而是推迟或等待执行照明计算,直到场景的几何图形片段被剔除或丢弃。这可以根据场景的复杂性提高性能。
延迟渲染分两个阶段执行。
第一阶段包括浏览场景的几何图形,并将其位置或深度、法线和材质渲染到一个称为几何缓冲区或重力缓冲区的帧缓冲区中。除了一些转换之外,这主要是一个只读阶段,因此其性能成本最低。在这个阶段之后,你只需要处理屏幕形状的2D纹理。
第二也是最后一个阶段是使用第一阶段的输出进行照明计算的阶段。这是计算环境颜色、漫射颜色和镜面颜色的时候。阴影和法线贴图也在这个阶段执行。
优势
使用延迟渲染的原因是为了减少照明计算的数量。使用正向渲染,照明计算的数量与片段和灯光的数量成比例。但是,对于延迟着色,照明计算的数量会随着像素和灯光的数量而缩放。回想一下,对于单个像素,可能会产生多个片段。添加几何图形时,使用正向时,每个像素的照明计算数量会增加,而使用延迟时不会增加。
对于简单的场景,延迟渲染不能提供很大的性能提升,甚至可能会影响性能。然而,对于光线充足的复杂场景,这是更好的选择。延迟变得比向前更快,因为你只计算每盏灯,每像素的照明。在正向渲染中,你要计算每个片段每盏灯的亮度,每像素可以是多次。
不足之处
延迟渲染允许您使用许多灯光渲染复杂场景,但它也有自己的一套折衷方案。透明度成为一个问题,因为透过半透明对象可以看到的几何数据在第一阶段会被丢弃。其他权衡因素包括由于缓冲区和处理混叠所需的额外变通办法而增加的内存消耗。