Opengl 使用不同类型的N个灯光渲染场景

Opengl 使用不同类型的N个灯光渲染场景,opengl,Opengl,如果我需要在一个场景中绘制N个灯光,灯光类型可能是聚光灯/点/定向灯或天光,并且每个灯光投射阴影,请使用opengl es 2.0进行渲染 一次通过是不够的,所以我听到了多次通过照明,但我不知道如何实现它 我现在的想法是:按灯光类型对灯光进行分组,然后循环每个组并将场景渲染为RT,最终混合(使用“添加混合”或“倍增”)将所有RT渲染到颜色缓冲区。但是我认为颜色缓冲区中的RGB值会溢出 因此,我不知道怎么做,不能延迟着色,没有灯光预处理,没有浮动纹理没有HDR……对于多通道照明,您可能需要使用加法

如果我需要在一个场景中绘制N个灯光,灯光类型可能是聚光灯/点/定向灯或天光,并且每个灯光投射阴影,请使用opengl es 2.0进行渲染

一次通过是不够的,所以我听到了多次通过照明,但我不知道如何实现它

我现在的想法是:按灯光类型对灯光进行分组,然后循环每个组并将场景渲染为RT,最终混合(使用“添加混合”或“倍增”)将所有RT渲染到颜色缓冲区。但是我认为颜色缓冲区中的RGB值会溢出


因此,我不知道怎么做,不能延迟着色,没有灯光预处理,没有浮动纹理没有HDR……

对于多通道照明,您可能需要使用加法和乘法混合的组合。这是因为对于每个灯光,您希望累积漫反射和镜面反射项,然后在最后将累积的照明乘以基础材质属性

您完全正确,在大多数情况下,除非您对灯光非常小心,否则计算的漫反射值将在某个点超过1.0。它本身不会溢出,因为它是浮点型的,但在写入颜色缓冲区之前,它将被钳制到1.0

如果没有HDR,最好的办法可能是改变衰减系数,以便灯光衰减更快。这将减少超亮区域的大小,使其非常接近光源,效果类似于非HDR镜面反射高光(褪色的小块)