【问题标题】:Antialiasing on OpenGL ES 2.0OpenGL ES 2.0 上的抗锯齿
【发布时间】:2013-07-29 15:35:13
【问题描述】:

如何在整个渲染中对三角形进行抗锯齿处理?我应该把它放在fragmentShader上吗?有没有其他好的解决方案来改进这种事情?

这是我的“观点”,边缘很脆(不是很好)。

【问题讨论】:

    标签: android opengl-es rendering antialiasing


    【解决方案1】:

    在做了一些深入研究后,我发现其实很简单,最常见的就是渲染成屏幕大 4 倍(甚至超过 4 倍)。渲染到这个更大的屏幕后,GPU 将获取该区域的平均值并根据该区域设置像素颜色。

    使用这个库很容易启用它:

    https://code.google.com/p/gdc2011-android-opengl/source/browse/trunk/src/com/example/gdc11/MultisampleConfigChooser.java

    但是,您应该记住,渲染所有内容将花费 4 倍或更多时间,这意味着需要更多时间来处理,并且可能会减少 FPS...

    此外,如果您使用 OpenGL 模拟安卓设备,请确定您的 GPU 是否支持这种多重采样。例如,我的没有(Tegra)。

    这是最终结果,有和没有多重采样:

    【讨论】:

    • 多重采样不会将渲染时间增加 4 倍。甚至不会接近。它仍然每个像素只执行一次片段着色器,然后根据覆盖范围将相同的结果写入最多 4 个输出样本。虽然输出缓冲区理论上是 4 倍大,但它通常被压缩。这个答案所描述的听起来更像是超级采样,这是一种非常不同的方法。
    • @RetoKoradi ,但无论如何,片段着色器需要“子渲染”4个像素,以便处理平均值。如果渲染一个像素花费 1,渲染 4 也将花费 4,加上取平均值的时间......当然,它不会是“平均花费的时间”,而是它的最大限制(因为取决于GPU核心的数量,可以并行完成......但无论如何,渲染它会花费4倍的时间,不考虑并行渲染
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多