在iPad / iOS上启用4x MSAA抗锯齿时出现的物件问题

7
我已经在我的iPad OpenGL ES 2.0应用程序上使用了苹果网站上的示例启用了4x MSAA。在模拟器上,这很好地运行,并且图像非常流畅,但是在设备上,边缘处应该进行抗锯齿处理的地方有彩色伪影。这存在于iPad / iPad2和iPhone4上,但不会出现在模拟器上。下面附上了伪影的图片。有人知道这可能是什么吗?

你只是在绘制纹理还是有更复杂的操作?着色器是什么样子的? - Nicol Bolas
这是一个球体上的纹理,你正在看到地球的地平线。地球的着色器只是在球体上进行纹理处理,然后有大气层着色器渲染蓝色的光晕。 - paranoidroid
你能展示一张带有MSAA但没有大气渲染器的图片吗? - Ben Voigt
使用MSAA并且没有大气层,这些伪影仍然存在。http://cl.ly/2E2N343Y0W3l3m1Z3h0Y - paranoidroid
抱歉,上一张图片仍然在地面上使用了大气着色器。这是没有任何大气着色器的版本。http://cl.ly/0R0K1W0X2A1U0q151L29 瑕疵已经消失了,因此是来自于着色器。为什么启用MSAA会导致这种情况发生(这是一个复杂的着色器)?而且是否可能只在该着色器通道上禁用MSAA? - paranoidroid
1个回答

10
看起来你的着色器可能存在问题,但我不能确定,因为你没有发布该着色器。当你打开MSAA时,着色器有可能在像素区域内但在三角形区域外的样本中执行。如果没有MSAA,则此像素根本不会导致片段着色器执行,但现在你打开了MSAA,如果一个样本是活动的,它必须为该像素执行片段着色器。
我发布的链接更深入地解释了这个问题。它还提供了避免此问题的方法,但我不知道OpenGL ES 2.0是否提供对质心采样的访问。如果没有,那么你将不得不为那些会导致伪影的东西禁用多重采样渲染:glDisable(GL_MULTISAMPLE)。当你需要多重采样激活时,可以重新启用它。

你很棒。我会研究一下的。 - paranoidroid
看起来OpenGL ES 2.0不支持中心采样。此外,我需要在着色器中将地面纹理函数与大气函数分开,以便我可以仅禁用大气部分。这基本上是我的唯一选择,对吧? - paranoidroid
@mm1:基本上是这样。如果ES 2.0没有质心采样,那就只有这个选项了。不过,你可能想要检查一下扩展列表,因为可能会有一个你可以使用的质心扩展。 - Nicol Bolas
好的,我终于完成了将地面着色器与大气着色器分离的所有工作。最终看起来iOS忽略了glDisable(GL_MULTISAMPLE),因为在其他着色器上禁用它们没有任何效果。所以由于这个不起作用,也没有质心采样,我想我没什么办法了! - paranoidroid

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