渲染阴影点灯的顺序?

我在我的延期渲染引擎中实现阴影映射。 我有射灯工作,现在我正在点点灯。 目前,我这样做:

// Loop through the point lights for each point light do Loop through "directions" for I = 1, 6 do Render the shadow map for direction 'I' Render the point light end end 

这工作正常,但这是次优? 我应该一次渲染所有的阴影贴图吗? 如果是这样的话,在渲染光线时,我将如何在第二阶段一次处理所有的阴影贴图?

如果我正确理解你的问题,你正在同时建立和应用阴影贴图。 你真的不想这样做。

如果你对此有所了解,你可以改变阴影贴图更新的频率,并保存大量的实际填充阴影贴图所需的内存带宽( 例如,如果世界上没有任何东西在光线体积内移动,而光线不移动,那么不需要重新计算阴影图)。 我已经尽可能地确定阴影立方体贴图中的哪个个人脸需要重新计算 – 很多工作要实现,但值得。

另一件要考虑的事情是,你实际上不必每一帧更新阴影贴图。 令人惊讶的是,对于遥远的光源或相当less量的附近光源,您可以以1/2或更低的渲染频率进行更新,而无需terminal用户注意。 我已经在自己的工作中取得了巨大的成功,在低端GPU上,我每更新一半影子地图(所以全部更新需要2帧),而且很less有人注意到)

简而言之,考虑实现一些逻辑,允许您定期更新阴影贴图而不是每一帧。 性能应该大大提高。

你可以使用点光源的立方体贴图。

立方体阴影贴图可能需要像以前那样面对面地渲染,但是最后一步可以作为一个遍完成。