OpenGL:Post-处理+多重采样=?
OpenGL: Post-Processing + Multisampling =?
我是 OpenGL 的新手,正在尝试弄清楚如何将 post 处理阶段添加到我的场景渲染中。我相信到目前为止我所知道的是我创建了一个 FBO,将场景渲染到它,然后我可以使用我的 post-processing 着色器将来自 FBO 的纹理作为输入渲染到后台缓冲区。
但是,这超出了我的知识范围,那就是何时引入多重采样。FBO 必须是多重采样的。这留下了两种可能性:1. post-process 着色器在子样本上运行 1:1 以生成最终的多重采样屏幕输出,或者 2. 着色器必须解析多个样本并为每个样本输出一个屏幕片段屏幕像素。如何做到这些?
好吧,GL 中通过 GL_ARB_texture_multisample 引入的功能支持选项 1(自 GL 3.2 起为核心)。基本上,这带来了新的多样本纹理类型,以及相应的采样器,如 sampler2DMS
,您可以在其中明确地从特定样本索引中获取。如果这种方法可以有效地实现你的post-处理效果,我不知道。
选项 2 与您描述的略有不同。着色器不会执行多重采样解析。您可以渲染到多采样 FBO(不需要纹理,渲染缓冲区也可以)并使用 glBlitFramebuffer
明确地解析到另一个非多采样 FBO(这次,使用纹理).然后可以将此非多重采样纹理用作 post 处理的输入。 post-processing 和默认帧缓冲区都不需要知道多重采样。
我是 OpenGL 的新手,正在尝试弄清楚如何将 post 处理阶段添加到我的场景渲染中。我相信到目前为止我所知道的是我创建了一个 FBO,将场景渲染到它,然后我可以使用我的 post-processing 着色器将来自 FBO 的纹理作为输入渲染到后台缓冲区。
但是,这超出了我的知识范围,那就是何时引入多重采样。FBO 必须是多重采样的。这留下了两种可能性:1. post-process 着色器在子样本上运行 1:1 以生成最终的多重采样屏幕输出,或者 2. 着色器必须解析多个样本并为每个样本输出一个屏幕片段屏幕像素。如何做到这些?
好吧,GL 中通过 GL_ARB_texture_multisample 引入的功能支持选项 1(自 GL 3.2 起为核心)。基本上,这带来了新的多样本纹理类型,以及相应的采样器,如 sampler2DMS
,您可以在其中明确地从特定样本索引中获取。如果这种方法可以有效地实现你的post-处理效果,我不知道。
选项 2 与您描述的略有不同。着色器不会执行多重采样解析。您可以渲染到多采样 FBO(不需要纹理,渲染缓冲区也可以)并使用 glBlitFramebuffer
明确地解析到另一个非多采样 FBO(这次,使用纹理).然后可以将此非多重采样纹理用作 post 处理的输入。 post-processing 和默认帧缓冲区都不需要知道多重采样。