11

我对了解多重采样的工作原理非常感兴趣。我找到了大量关于如何启用或使用它的文献,但很少有关于它为实现抗锯齿渲染而真正做什么的信息。我发现,在很多地方,相互矛盾的信息只会让我更加困惑。

请注意,我知道如何启用和使用多重采样(我实际上已经使用它),我不知道什么样的数据真正进入多重采样渲染缓冲区/纹理,以及如何在渲染管道中使用这些数据。

我可以很好地理解超级采样的工作原理,但是多重采样仍然有一些我想了解的模糊领域。

这是规格所说的:(OpenGL 4.2)

像素样本值(包括颜色、深度和模板值)存储在此缓冲区(多样本缓冲区)中。样本包含每个片段颜色的单独颜色值。

...

在多重采样渲染期间,像素片段的内容以两种方式更改。首先,每个片段都包含一个带有 SAMPLES 位的覆盖率值。

...

其次,每个片段包括 SAMPLES 深度值和相关数据集,而不是在单样本渲染模式中维护的单个深度值和相关数据集。

因此,每个样本都包含不同的颜色、覆盖位和深度。与普通的超级采样有什么区别?对我来说似乎是“加权”超级采样,其中每个最终像素值由其样本的覆盖率值而不是简单的平均值确定,但我对此非常不确定。那么样本级别的纹理坐标呢?

例如,如果我将法线存储在 RGBF 多重采样纹理中,我会在多边形边缘将它们读回“抗锯齿”(即接近 0)吗?

每个片段调用一次片段着色器,除非它使用 gl_SampleID、glSampleIn 或具有“样本”存储限定符。如何为每个片段调用一次片段着色器并获得抗锯齿渲染?

4

1 回答 1

7

Silicon Graphics Systems 上的 OpenGL:

http://www-f9.ijs.si/~matevz/docs/007-2392-003/sgi_html/ch09.html#LE68984-PARENT

提到:当您使用多重采样并回读颜色时,您会得到解析的颜色值(即样本的平均值)。当您回读模板或深度时,您通常会返回单个样本值而不是平均值。该样本值通常是最接近像素中心的样本值。

还有来自 OpenGL 站点的技术规范 (1994)。它详细解释了如果启用 MULTISAMPLE_SGIS 会做什么:http: //opengl.org/registry/specs/SGIS/multisample.txt

另请参阅此相关问题:多重采样时如何在 OpenGL 纹理中解析深度值?

以及这个问题的答案,建议在哪里使用 GL_MULTISAMPLE_ARB:GL_MULTISAMPLE 是在哪里定义的?. GL_MULTISAMPLE_ARB (2002) 的规格在这里:http ://www.opengl.org/registry/specs/ARB/multisample.txt

于 2012-01-14T11:25:40.300 回答