在iOS上使用多重采样反走样会对性能产生什么影响?

4
我一直在尝试在iOS 4上的iPhone和iPad上使用多重采样来进行全场景反锯齿实验。一般机制使用苹果公司的APPLE_framebuffer_multisample扩展(http://www.khronos.org/registry/gles/extensions/APPLE/APPLE_framebuffer_multisample.txt),并在这个问题的答案中描述:How do you activate multisampling in OpenGL ES on the iPhone?,由苹果在他们的OpenGL ES编程指南中记录。
它按照所描述的方式运作,但是当我将样本数设置为2时,我的测试应用程序的绘图性能下降了约50%。我主要在iPhone 4上进行测试,使用非视网膜启用的应用程序。我正在使用苹果在他们的文档中提供的其他性能建议(使用glDiscardFramebufferEXT来丢弃附加到多重采样帧缓冲区的渲染缓冲区,在帧开始时使用glClear清除整个帧缓冲区等)。
使用这种方式启用多重采样似乎会带来很大的性能开销。您是否也遇到了类似的结果,或者这意味着我做错了什么?
2个回答

2

您提到您正在iPhone 4上运行此应用程序。请问您的OpenGL ES图层是否以完整的2X Retina显示比例进行渲染?也就是说,您是否将OpenGL ES主机层上的contentScaleFactor设置为[[UIScreen mainScreen] scale]?如果是这样,您首先要推送大量像素。

在应用多重采样抗锯齿之前,您是否受到填充速率限制?为了检查,请使用Instruments中的OpenGL ES工具来监视您的运行应用程序,并启用Tiler Utilization和Renderer Utilization统计信息。如果您的应用程序在未启用MSAA的情况下显示高Renderer Utilization,则首先受到填充速率限制。在此基础上添加MSAA可能会显着降低帧速率,因为存在瓶颈。

在我的一个几何限制而不是填充速率限制的应用程序中,当我在iPhone 4上使用4X MSAA时,我没有看到太大的减速。我猜测您的应用程序的瓶颈在于向屏幕推送像素。


1

当您将样本数量设置为2时,性能下降约50%并不奇怪:您正在绘制两倍的样本!多重采样意味着您在屏幕外缓冲区中以比屏幕更高的分辨率绘制场景,然后使用过滤算法将更高分辨率的多重采样缓冲区减少到显示屏幕分辨率,希望由于最终图片实际上包含比单一采样版本更多的细节(经过滤波的更高分辨率输出),因此减少了更少的走样伪影。

这是图形中非常普遍(如果不是最普遍)的性能问题:您绘制的样本越多,速度就越慢。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接