【发布时间】:2020-08-23 01:27:47
【问题描述】:
上下文:
我正在使用延迟渲染设置,在第一阶段我有两个 FBO:一个是 GBuffer,用于存储所有可见片段的法线、反照率和材质信息。此 FBO 具有 32 位深度纹理。在计算任何光照之前,它会被绘制到几何通道中。
第二个 FBO 是纯颜色的,从黑色开始,但在多个通道中累积光照,来自从 GBuffer 采样并使用加法混合写入纯颜色缓冲区的光照着色器。
问题是,我真的很想利用早期深度测试来让我的光照只计算包含实际几何体(不仅仅是天空)的片段。我能想到的最好方法是使用深度测试来使在阳光下深度为 1 的任何像素失效,或者使位于点光源影响范围后面的任何像素失效。但是,我不认为我可以将此深度纹理绑定到我的颜色 FBO,因为我还在光照着色器中对其进行采样以计算片段在世界空间中的位置。
所以我的问题是:有没有办法为早期深度测试和着色器内部采样使用相同的深度纹理?或者,如果没有,是否有其他(合理的性能)方法来拒绝其中没有几何图形的像素?在我的光照通道中,我根本不会写入这个深度纹理。
我只需针对 PC 上的现代图形硬件(这样我就可以使用任何常见的扩展或 openGL 4.6 功能)。
【问题讨论】:
标签: opengl fbo opengl-4 deferred-rendering