OpenGL - MSAA 不支持浮点纹理吗?
OpenGL - Does MSAA not support floating-point texture?
事情是这样的,我正在尝试使用多重采样纹理进行延迟着色。
为了创建 GBuffer,我创建了一个带有多采样纹理附件的帧缓冲区以在其上绘制,以及一个带有普通纹理附件的帧缓冲区用于复制结果。 (因为我不能直接读取多重采样纹理)。
光照通过后,我发现边缘没有正确抗锯齿,见下图。
(可以看到光影之间的拼图)
所以我查看了 gbuffer 内容,使用 float
纹理格式的 Position
缓冲区似乎 NOT 抗锯齿。但是使用 unsigned byte
纹理格式的 Albedo
缓冲区看起来不错。
下面是这些缓冲区的样子,上面的是 Position
缓冲区,下面的是 Albedo
缓冲区
有人可以解释一下吗?我做错了什么吗?
I create a framebuffer with mutlisample texture attachments to draw on and a framebuffer with normal texture attachments for copying result.
这是你的问题;这实际上行不通。
在你的光照通道之前进行多重采样解析是没有意义的。您有效地混合了 不同对象 上的两个位置。这不会产生有意义的结果。
如果您要在延迟渲染中进行多重采样,则必须使用 per-sample shading in the fragment shader and read each sample (with texelFetch
on sampler2DMS
) 来进行光照传递。您还将写入多样本图像。
只有最后一张图像是对其进行多重采样解析操作的图像。
事情是这样的,我正在尝试使用多重采样纹理进行延迟着色。 为了创建 GBuffer,我创建了一个带有多采样纹理附件的帧缓冲区以在其上绘制,以及一个带有普通纹理附件的帧缓冲区用于复制结果。 (因为我不能直接读取多重采样纹理)。
光照通过后,我发现边缘没有正确抗锯齿,见下图。
(可以看到光影之间的拼图)
所以我查看了 gbuffer 内容,使用 float
纹理格式的 Position
缓冲区似乎 NOT 抗锯齿。但是使用 unsigned byte
纹理格式的 Albedo
缓冲区看起来不错。
下面是这些缓冲区的样子,上面的是 Position
缓冲区,下面的是 Albedo
缓冲区
有人可以解释一下吗?我做错了什么吗?
I create a framebuffer with mutlisample texture attachments to draw on and a framebuffer with normal texture attachments for copying result.
这是你的问题;这实际上行不通。
在你的光照通道之前进行多重采样解析是没有意义的。您有效地混合了 不同对象 上的两个位置。这不会产生有意义的结果。
如果您要在延迟渲染中进行多重采样,则必须使用 per-sample shading in the fragment shader and read each sample (with texelFetch
on sampler2DMS
) 来进行光照传递。您还将写入多样本图像。
只有最后一张图像是对其进行多重采样解析操作的图像。