【问题标题】:Anti-aliasing techniques for OpenGL ES profilesOpenGL ES 配置文件的抗锯齿技术
【发布时间】:2016-07-21 16:32:27
【问题描述】:

我一直在桌面和 ES 配置文件(es 2.0 及更高版本)上研究和试用 OpenGL 中的不同 AA 技术,以将 2D 内容渲染到屏幕外 FBO。

到目前为止,我已经尝试过 FSAA、FXAA、MSAA 并使用 GL_LINE_SMOOTH 功能。

我无法为 ES 配置文件找到合适的 AA 解决方案,由于 API 限制,我一直受限于 FSAA 和 FXAA。例如 glTexImage2DMultisample(MSAA 需要)和 GL_LINE_SMOOTH 功能不可用。

FXAA 很聪明,但会使文本字形模糊到弊大于利的地步,它只真正适合 3D 场景。

FSAA 提供了非常好的结果,特别是在 2 倍超级采样时,但消耗了太多额外的视频内存,我无法在我们的大多数硬件上使用。

我在问其他人是否在类似情况下对任何其他技术有很大的运气 - 即:使用 OpenGL ES 配置文件将抗锯齿 2D 内容渲染到屏幕外 FBO。

请注意:我知道在 ES 配置文件上通过 GL_MULTISAMPLE 设置窗口时,我可以要求对默认帧缓冲区进行多重采样,但这对我渲染到必须实现 AA 的屏幕外 FBO 没有好处自己。

如果我的上述任何陈述不正确,请直接加入并直言不讳,这可能会有所帮助!

谢谢。

【问题讨论】:

    标签: opengl-es antialiasing


    【解决方案1】:

    例如 glTexImage2DMultisample(MSAA 需要)

    为什么需要它?为此,要“在规范内”渲染到多样本存储缓冲区,然后使用 glBlitFramebuffer 将其解析为单个采样表面。

    如果您不介意扩展,那么许多供应商都会实现此扩展,其行为类似于 EGL 窗口表面,具有隐式解析,这比上述更有效,因为它避免了基于 tile 的硬件上的内存往返架构。

    https://www.khronos.org/registry/gles/extensions/EXT/EXT_multisampled_render_to_texture.txt

    和 GL_LINE_SMOOTH 功能不可用。

    你有一个引人注目的线条用例吗?如果您真的需要它们,那么只需对它们进行三角测量,但对于 MSAA 真正有帮助的 3D 内容,线条实际上并不常用。

    【讨论】:

    • 感谢您的意见,我是自学的,所以我有很多误解。我会看看你所有的观点,看看我得到了什么。规范内的东西最好,因为我们使用各种设备,我不知道它们是否都支持该扩展。我所有的渲染目前都是用于 GUI 的 2D 几何图形(圆角矩形、椭圆形、路径等,用纹理、渐变等填充或抚摸它们)——使用 GL_LINE_STRIP 进行描边只是我开始的地方。如果您有其他方法,我很高兴看到它们。
    • W.r.t. “其他方法”;一条线只是一个矩形,所以最简单的选择就是用两个三角形替换每个线段。在连接两个线段以获得整洁的角时,您需要做一些额外的工作来处理顶点的放置位置,但这并不难解决(只是内部和外部两个线方程的交点)。
    • 我不知道的一件事(因为我从未在示例中真正看到过)是您可以使用 GL_RENDER_BUFFER 作为颜色附件 - 现在感觉真的很愚蠢......所以使我能够创建更多设备都满意的东西,但看起来我还有一些问题需要尝试追踪。 W.r.t.制作矩形线,如何使它们看起来平滑?在我的脑海中,我想象着与现在类似的情况。这是你的想法吗? http.developer.nvidia.com/GPUGems2/gpugems2_chapter22.html
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-07
    • 1970-01-01
    相关资源
    最近更新 更多