我可以通过仅两次渲染几何图形来执行MSAA进行延迟渲染吗?

时间:2019-02-25 14:51:06

标签: opengl graphics rendering

我对3D渲染有疑问。 延迟渲染功能非常强大,但由于对MSAA不好而受到欢迎。

我清楚地知道为什么,但是我突然想到了一些解决方案。 这很简单:只需完全进行延迟渲染,然后在纹理上获取屏幕图像即可。当然,此纹理(附加在帧缓冲区或其他对象上)不是抗锯齿的。

这是进一步的处理:接下来,再次绘制整个场景,但是这次片段着色器使用texelFetch()在预渲染的纹理上查找完全相同的位置。并输出。完成。

这很愚蠢,但我认为它可能会起作用。如果我们以延期渲染的结果作为输出颜色再次绘制几何图形,则意味着我们用几何图形重新渲染场景 因此,我们现在可以提供超级采样的深度信息,GPU将能够使用别名颜色但超级采样的深度几何图形执行MSAA。 (这与仅拾取片段的“中心”并在常规MSAA流程中对其进行评估类似。)

我不确定此描述是否有意义。我使用opengl进行了测试,但是这样做与延迟渲染没什么区别。

我的想法行得通吗?

1 个答案:

答案 0 :(得分:4)

不,你的想法行不通。

如果您没有使用多重采样来渲染初始图像,则在进行多重采样时稍后再读取它不会神奇地创建该图像中不存在的信息。

在您的方法中,对应于多重采样渲染中特定像素的每个样本将具有相同的颜色值。因此,如果两个图元在一个像素中重叠并写入不同的样本,则无关紧要,因为两个图元都将生成相同的颜色。您要做的就是在一个像素内生成多个不同的深度值,而这实际上并没有直接(直接)对抗锯齿输出做出贡献。