MSAA使用OpenGL。
我只是用'glutSolidSphere‘画了一个白色的球体,填充了黑色的其中’点(正常,CameraVec) <阈值‘的轮廓。
我在内部白色圆圈的轮廓上发现了一个奇怪的结果。看来MSAA没起作用。
顺便说一句,它在黑圈的轮廓(最外面)上效果很好。
如果我增加样本的数量,即使在内部白色圆圈的轮廓上,它也能很好地工作。
我认为它应该很好地独立于样本的数量,因为分解样本发生在碎片着色之后。
这样的结果对吗?如果是,为什么?
下面是4个样本(左)和32个样本(右)的结果。


发布于 2015-11-20 04:40:44
MSAA只会帮助平滑多边形的边和交点。它对平滑由你的着色代码创建的锐利转换没有任何作用。
MSAA背后的主要思想是片段着色器仍然每个片段只执行一次。每个片段有多个样本,覆盖范围由样本决定。这意味着,片段的一些样本可以在呈现的多边形内,也可以在外部。然后将片段着色器输出写到覆盖的样本中。但是片段中所有覆盖的样本都得到了相同的值。
深度缓冲器还具有每个样本的分辨率,这意味着多边形之间的交叉也从MSAA产生的平滑中获益。
一旦你意识到MSAA是如何工作的,它对多边形内部的急剧转换没有任何作用,这可能是应用在着色器中的逻辑的结果。为了在这种情况下实现平滑,您必须对每个样本的片段着色器进行评估,这在MSAA中不会发生。
MSAA之所以有吸引力,是因为它确实为许多用例执行了足够的反混叠,并且开销相对较小。但正如你所注意到的,这显然不足以解决所有的问题。
你对此所能做的,超出了答案的范围。主要有两个方向:
我有点困惑于这样一个事实,那就是,在32倍的MSAA中,你在内部边缘得到了一些平滑。我不认为这是意料之中的。我想知道在下采样过程中是否发生了某种形式的平滑。
https://stackoverflow.com/questions/33810143
复制相似问题