关于MSAA的困惑

问题描述 投票:0回答:1

我正在研究MSAA及其工作方式。我了解该概念的工作原理以及其背后的想法是什么。基本上,如果三角形的中心覆盖像素的中心,则将对其进行处理(对于非msaa而言)。但是,如果涉及msaa。假设4xmsaa,然后它将采样另外4个点作为子采样。像素着色器将按像素执行。但是,将对每个子像素进行遮挡和覆盖率测试。我很困惑的一点是,我认为像素在屏幕上只是小正方形,我无法理解如何在采样矩形内确定子采样点。计算机如何知道一个像素子采样位置。如果只有一个正方形,则如何确定子采样颜色(如果有一个正方形,则应该只有一种颜色)。最后,如果每个子样本基本上是相同的像素,那么它们如何具有不同的深度值。谢谢!

opengl directx msaa
1个回答
0
投票

[基本上,如果三角形的中心覆盖像素的中心,则将对其进行处理(在非msaa的情况下。)>

不,这没有道理。三角形的中心仅是一个点,而品脱掉落到像素中心就没有任何意义。标准的光栅化规则是:如果像素的中心位于三角形的inside

中,则会生成一个片段(对于像素的中心恰好位于三角形的边界的情况,有特殊的规则)。

我很困惑的一点是,我想象像素在屏幕上只是小正方形,我不明白如何在采样矩形内确定子采样点。

[不知道您所指的“样本矩形”是什么意思,但是请放开:如果您使用某个像素坐标系为1x1单位的参考坐标系,则可以使用小数部分来描述像素内的位置。

默认OpenGL窗口空间使用约定,其中(0,0)是左下像素的左下角corner

(width,height)是右上像素的右上角,所有像素中心为半个整数.5

真实GPU的光栅化器确实可以使用定点

表示,并且D3D规范要求它对于子像素位置必须具有至少8位小数精度(GL将确切的精度留给实现者)。

请注意,此时像素光栅根本不相关。 Coverage样本仅用于测试某个2D点是否位于2D三角形的内部或外部,并且该点始终是面积为0的数学上无限小的实体。可以任意定义用于进行此计算的坐标系的约定。 。

如果只有一个正方形,则如何确定子采样颜色。(如果有一个正方形,则应该只有一种颜色)。最后,如果每个子样本基本上是相同的像素,那么它们如何具有不同的深度值。

[使用多重采样时,始终使用多重采样的帧缓冲区,这意味着对于每个像素,没有单一的颜色,深度,...值,但是有n(您的多重采样计数,通常在2到2之间)。 16(含16))。您将需要额外的遍历才能计算出显示抗锯齿结果所需的单个每像素值(使用默认frambebuffer进行处理时,grpahics API可能会将其隐藏起来,但是使用自定义渲染目标时,您必须手动执行)。

© www.soinside.com 2019 - 2024. All rights reserved.