我对了解多重采样的工作原理非常感兴趣。我找到了大量关于如何启用或使用它的文献,但很少有关于它为实现抗锯齿渲染而真正做什么的信息。我发现,在很多地方,相互矛盾的信息只会让我更加困惑。
请注意,我知道如何启用和使用多重采样(我实际上已经使用它),我不知道什么样的数据真正进入多重采样渲染缓冲区/纹理,以及如何在渲染管道中使用这些数据。
我可以很好地理解超级采样的工作原理,但是多重采样仍然有一些我想了解的模糊领域。
这是规格所说的:(OpenGL 4.2)
像素样本值(包括颜色、深度和模板值)存储在此缓冲区(多样本缓冲区)中。样本包含每个片段颜色的单独颜色值。
...
在多重采样渲染期间,像素片段的内容以两种方式更改。首先,每个片段都包含一个带有 SAMPLES 位的覆盖率值。
...
其次,每个片段包括 SAMPLES 深度值和相关数据集,而不是在单样本渲染模式中维护的单个深度值和相关数据集。
因此,每个样本都包含不同的颜色、覆盖位和深度。与普通的超级采样有什么区别?对我来说似乎是“加权”超级采样,其中每个最终像素值由其样本的覆盖率值而不是简单的平均值确定,但我对此非常不确定。那么样本级别的纹理坐标呢?
例如,如果我将法线存储在 RGBF 多重采样纹理中,我会在多边形边缘将它们读回“抗锯齿”(即接近 0)吗?
每个片段调用一次片段着色器,除非它使用 gl_SampleID、glSampleIn 或具有“样本”存储限定符。如何为每个片段调用一次片段着色器并获得抗锯齿渲染?