Opengl multisample是如何工作的?

Opengl multisample是如何工作的?,opengl,multisampling,Opengl,Multisampling,我非常有兴趣了解多重采样的工作原理。我找到了大量关于如何启用或使用它的文献,但很少有关于它在实现抗锯齿渲染方面真正做了什么的信息。我发现,在很多地方,相互矛盾的信息让我更加困惑 请注意,我知道如何启用和使用多重采样(我实际上已经使用了它),但我不知道什么样的数据真正进入多重采样渲染缓冲区/纹理,以及这些数据如何在渲染管道中使用 我可以很好地理解超级采样的工作原理,但多重采样仍然有一些我想了解的模糊领域 以下是规格说明:(OpenGL4.2) 像素采样值(包括颜色、深度和模具值)存储在此中 缓冲区

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

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

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

以下是规格说明:(OpenGL4.2)

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

在多采样渲染期间,像素片段的内容会发生更改 在两个方面。首先,每个片段包括一个覆盖率值和样本位

第二,每个片段都包括样本深度值和相关数据集 数据,而不是维护的单个深度值和关联数据集 在单示例渲染模式下

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

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


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

硅图形系统上的OpenGL:

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


OpenGL网站上有一个技术规范(1994)。它详细说明了如果启用了多样本系统,将执行哪些操作:

另见这一相关问题:


这个问题的答案,其中建议使用GL_MULTISAMPLE_ARB:。GL_MULTISAMPLE_ARB(2002)的规格如下:

NVIDIA的解释:抱歉,此链接绝对没有提供ms如何工作的信息,您可以从维基百科获得更好的信息。这是2007年斯坦福大学CS讲座:,可惜它没有引用任何来源。事实上,它们确实引用了以下来源:,但是你需要订阅才能查看文章。OpenGL网站上有这个技术规范(1994),但你可能已经看过了。它详细说明了如果启用了多采样系统,将执行什么操作:太好了,感谢您参考多采样问题