首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MSAA的奇怪结果

MSAA的奇怪结果
EN

Stack Overflow用户
提问于 2015-11-19 17:07:19
回答 1查看 608关注 0票数 0

MSAA使用OpenGL。

我只是用'glutSolidSphere‘画了一个白色的球体,填充了黑色的其中’点(正常,CameraVec) <阈值‘的轮廓。

我在内部白色圆圈的轮廓上发现了一个奇怪的结果。看来MSAA没起作用。

顺便说一句,它在黑圈的轮廓(最外面)上效果很好。

如果我增加样本的数量,即使在内部白色圆圈的轮廓上,它也能很好地工作。

我认为它应该很好地独立于样本的数量,因为分解样本发生在碎片着色之后。

这样的结果对吗?如果是,为什么?

下面是4个样本(左)和32个样本(右)的结果。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-20 04:40:44

MSAA只会帮助平滑多边形的边和交点。它对平滑由你的着色代码创建的锐利转换没有任何作用。

MSAA背后的主要思想是片段着色器仍然每个片段只执行一次。每个片段有多个样本,覆盖范围由样本决定。这意味着,片段的一些样本可以在呈现的多边形内,也可以在外部。然后将片段着色器输出写到覆盖的样本中。但是片段中所有覆盖的样本都得到了相同的值。

深度缓冲器还具有每个样本的分辨率,这意味着多边形之间的交叉也从MSAA产生的平滑中获益。

一旦你意识到MSAA是如何工作的,它对多边形内部的急剧转换没有任何作用,这可能是应用在着色器中的逻辑的结果。为了在这种情况下实现平滑,您必须对每个样本的片段着色器进行评估,这在MSAA中不会发生。

MSAA之所以有吸引力,是因为它确实为许多用例执行了足够的反混叠,并且开销相对较小。但正如你所注意到的,这显然不足以解决所有的问题。

你对此所能做的,超出了答案的范围。主要有两个方向:

  • 您可以避免在您的着色器代码中生成尖锐的转换。如果您使用标准纹理,使用mipmap可能会有所帮助。对于过程转换,您可以在代码中平滑它们,可能是基于梯度值。
  • 您可以使用不同的反混叠方法。这里提到的太多了。这是很容易得到完美的反混叠与超采样,但它是非常昂贵的。大多数方法都试图在获得比普通MSAA更好的结果方面达成妥协,同时又不增加太多的开销。

我有点困惑于这样一个事实,那就是,在32倍的MSAA中,你在内部边缘得到了一些平滑。我不认为这是意料之中的。我想知道在下采样过程中是否发生了某种形式的平滑。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33810143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档