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