如何在延迟着色中获取受光照影响的像素?

我使用帧缓冲区在我的小引擎中实现了延迟渲染,但目前没有dynamic照明。 g缓冲区包含视图空间和反照率的位置和法线。

为了实现实时照明,我想我需要为每个灯光执行一次通过。 鉴于光的位置和形状,如何find受光影响的所有像素? 我想支持点灯,聚光灯和方向灯。

在延迟着色中,通常只画出一些几何graphics,将光线在世界空间中的效果区域(如多边形球体或圆锥体)包围在点或光点的math球体或圆锥体中。

要做的最简单的事情就是绘制这个几何体的背面(正面剔除)与深度testing相反(大于而不是小于等于)。 然后,相机与光照几何体的背面之间的任何像素都将被遮蔽。

这也遮蔽了照相机和光照几何体的正面之间的像素,这些光在光之外,因此不需要被遮蔽。 有各种优化,可以做到消除这些像素,如深度边界testing或模板蒙版。

对于定向灯,你做一个全屏通行证。