我正在考虑将我的前向渲染器转换为延迟渲染器,但有一个问题我找不到(或无法概念化),那就是场景中所有的灯光是如何累积的。在正向渲染中,我会将所有的灯光上传到着色器,但由于对象的大小不同,我被限制为4。如何将累积的灯光信息获取到最终的合成着色器?是否以与渲染每个场景对象类似的方式渲染每个灯光?我看到了一些将每个点光源渲染为球体的示例,但我看不出这种方法是如何允许衰减的。
延迟着色的想法是,在每个灯光的一个屏幕大小的图像操作中进行照明计算,即对每个灯光进行自己的延迟着色过程。灯光相加,因此使用相加混合模式(没有alpha通道,只需将其相加)。这也是延迟着色仅适用于不透明几何体的原因,如果要应用于半透明几何体,则需要额外的准备工作(如深度剥离场景)。