我正在调查在多次抽样中使用大量样本的情况。如果我有一个RGBA8帧缓冲区并使用多个样本呈现给它,比如说32,在每个样本级别上抖动会在解析后从32个4位颜色样本中得到一个相当精确的8位颜色。规范(4.5)似乎有点吓人,尽管(glBlitFrameBuffer):
如果读取帧缓冲区是多采样的(其SAMPLE_BUFFERS的有效值为1)而绘制帧缓冲区不是(其值为SAMPLE_BUFFERS为0),则在写入目的地之前,将源中每个像素位置对应的样本转换为单个样本。过滤器被忽略了。如果源格式是整数类型或模具值,则为每个像素选择单个示例的值。如果源格式是floating或规范化类型,则每个像素的示例值将以依赖于实现的方式解析。如果源格式是深度值,则以依赖于实现的方式解析样本值,其结果将介于像素中的最小深度值和最大深度值之间。
这到底是什么意思?
是否有办法以跨实现定义的方式完成?
发布于 2016-11-03 20:05:44
这到底是什么意思?
这意味着多采样被解决了。
多样本帧缓冲区包含每个像素的多个样本。样本的组合表示该像素的颜色。从多个样本转换为单一颜色的过程是多样本解析。
通过从多采样缓冲区闪烁到非多采样缓冲区,您正在告诉OpenGL将每个像素的样本值解析为单个样本。通常,这是通过将所有样本值加起来并除以样本数来完成的,但是实现可以采用加权平均值或其他方法,这取决于每个示例的精确性质。
一般来说,最好让实现完成它的工作。
是否有办法以跨实现定义的方式完成?
您可以通过将多样本纹理呈现为非多样本纹理来编程您自己的分辨率。在FS中,读取每个片段的像素值,执行任何您想要组合它们的操作。
但这可能不会像让硬件完成多样本解析一样快。
发布于 2016-11-06 16:58:35
GPU压缩多样本数据(带宽)和抖动将击败这一点-所以这是不支持的。GPU也有技术,以更高的频率采样,而不是存储值(参见QUINCUNX反混叠的例子,已经有一段时间了),节省了整体内存。
https://computergraphics.stackexchange.com/questions/4226
复制相似问题