多样本如何真正起作用?

时间:2012-01-14 10:02:56

标签: opengl multisampling

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

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

我非常了解超级采样是如何工作的,但是多重采样仍然有一些我想要理解的模糊区域。

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

  

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

     

...

     

在多重采样渲染期间,像素片段的内容会发生变化   有两种方式。首先,每个片段包括带有SAMPLES位的覆盖值。

     

...

     

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

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

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

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

1 个答案:

答案 0 :(得分:5)

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

另请参阅此相关问题:How are depth values resolved in OpenGL textures when multisampling?

这个问题的答案,建议使用GL_MULTISAMPLE_ARB:where is GL_MULTISAMPLE defined?。 GL_MULTISAMPLE_ARB(2002)的规范如下:http://www.opengl.org/registry/specs/ARB/multisample.txt