我正在研究MSAA以及它是如何工作的。我理解它的概念,它是如何工作的,它背后的想法是什么。基本上,如果三角形的中心覆盖像素的中心,这将被处理(在非msaa的情况下)。然而,如果涉及到msaa。假设4xmsaa,那么它将采样另外4个点作为子样本。像素着色器将按像素执行。但是,将对每个子像素应用遮挡和覆盖测试。我困惑的一点是,我把像素想象成屏幕上的小方块,我不能理解样本矩形内的子采样点是如何确定的。计算机如何感知一个像素子采样位置。如果只有一个正方形,那么如何确定它的子采样颜色。(如果有一个正方形,那么应该只有一种颜色)。最后,如果每个子样本基本上是相同的像素,那么每个子样本如何具有不同的深度值。谢谢!
发布于 2020-04-12 20:24:25
基本上,如果三角形的中心覆盖像素的中心,这将被处理(在非msaa的情况下)。
不,这说不通。三角形的中心只是一个点,掉在像素中心上的那一品脱没有任何意义。标准的光栅化规则是:如果像素的中心位于三角形的内部,则生成一个片段(对于像素的中心恰好位于三角形的边界的情况,有特殊的规则)。
,我困惑的一点是,我把像素想象成屏幕上的小方块,我不能理解样本矩形内的子采样点是如何确定的。
不知道你所说的“采样矩形”是什么意思,但先把它放在一边:如果你使用一些坐标框架,其中像素是面积为1x1单位的,那么你可以简单地使用小数部分来描述像素内的位置。
默认的OpenGL窗口空间使用一种约定,其中(0,0)是左下角像素的左下角,(width,height)是右上角像素的右上角,并且所有像素的中心都是半整数.5。
真实图形处理器的光栅化器确实可以与定点表示一起工作,并且D3D规范要求它对于子像素位置至少具有8位分数精度(GL将精确精度留给实现者)。
请注意,在这一点上,像素光栅根本不相关。覆盖样本只是测试某个2D点是否位于2D三角形的内部或外部,并且一个点始终是一个面积为0的数学上无限小的实体。在中执行此计算的坐标系的约定可以任意定义。
和如果只有一个正方形,如何确定它的子采样颜色。(如果有一个正方形,那么应该只有一个颜色)。最后,如果每个子样本基本上是相同的像素,那么每个子样本如何具有不同的深度值。
使用多重采样时,始终使用多重采样的帧缓冲区,这意味着对于每个像素,没有单一的颜色、深度和...值,但有n (您的多重采样计数,通常在2和16之间,包括2和16)。您将需要额外的过程来计算显示抗锯齿结果所需的单个每像素值(在默认的frambebuffer上执行时,grpahics API可能会对您隐藏该值,但当您使用自定义渲染目标时,必须手动执行此操作)。
https://stackoverflow.com/questions/61166193
复制相似问题