【问题标题】:OpenGL: Post-Processing + Multisampling =?OpenGL:后处理+多重采样=?
【发布时间】:2015-06-07 02:48:09
【问题描述】:
我对 OpenGL 还很陌生,并试图弄清楚如何将后处理阶段添加到我的场景渲染中。到目前为止,我相信我知道的是我创建了一个 FBO,将场景渲染到该场景,然后我可以使用我的后处理着色器将 FBO 的纹理作为输入渲染到后台缓冲区。
但这超出了我的知识范围,当多重采样被投入使用时。FBO 必须是多重采样的。这留下了两种可能性:1. 后处理着色器对子样本进行 1:1 操作以生成最终的多重采样屏幕输出,或者 2. 着色器必须解析多个样本并为每个屏幕像素输出一个屏幕片段。这些怎么做?
【问题讨论】:
标签:
opengl
fragment-shader
post-processing
multisampling
【解决方案1】:
嗯,选项 1 在 GL 中通过 GL_ARB_texture_multisample 引入的功能得到支持(自 GL 3.2 起成为核心)。基本上,这带来了新的多样本纹理类型,以及相应的采样器,如sampler2DMS,您可以在其中明确地从特定的样本索引中获取。这种方式能不能有效的实现你的后期处理效果,我不知道。
选项 2 与您描述的有点不同。不是着色器会进行多重采样解析。您可以渲染成多重采样 FBO(不需要纹理,渲染缓冲区也可以)并使用 glBlitFramebuffer 显式解析到另一个非多重采样 FBO(这次,使用纹理)。然后可以将这种非多重采样纹理用作后处理的输入。而且无论是后处理还是默认帧缓冲区都不需要知道多重采样。