延迟着色抗锯齿

时间:2016-01-24 21:44:18

标签: opengl graphics direct3d

许多人都注意到MSAA不适用于延迟着色。这是为什么?这听起来还不错。

根据wikipedia

  

...由于将照明阶段与几何阶段分开,   硬件抗锯齿不再产生正确的结果   插值子样本会导致无意义的位置,正常,   和切线属性。

你能解释一下吗?

我有哪些其他AA替代品?

2 个答案:

答案 0 :(得分:8)

多重采样确实适用于延迟渲染。延期呈现只会更改您为其支付的价格

多重采样基于这样的一般思想:您只需要对该像素内特定三角形光栅化所覆盖的所有样本执行一次片段着色器。因此,当您写入多个样本时(如使用超级采样),您只需执行一次片段着色器,从而节省了大量纹理访问。在多重采样图像中的样本中写入相同的值。

使用延迟渲染仍然可行。在多重采样规则下,几何通道仍然有意义。或者至少,尽可能多的感觉。

问题是你在照明过程中必须做的事情。

由于您的几何图形传递是多重采样的,因此您的光照传递必须读取多重采样数据。您不能对几何缓冲区进行多重采样解析(这将是"无意义的"维基百科所讨论的部分);您的照明通道必须读取每个样品并进行处理。每盏灯。因此,如果您进行了8倍多重采样操作,则片段着色器必须为每个像素运行八次。每盏灯。

这通常不是许多人愿意支付的费用。

替代方案是"我不能相信它不是抗锯齿"技术,如FXAA或其他。

答案 1 :(得分:3)

多样本抗锯齿在几个子像素位置处对图元的可见性进行采样,但是在每个图元的像素内仅对一次进行着色评估。延迟着色对几何属性进行采样,并且着色被推迟到第二阶段,其中基元和可见性样本之间的对应关系丢失,这使得难以避免冗余着色。此外,在高屏幕分辨率和高可见度采样的情况下,几何缓冲器可能变得非常大,因为每个样本需要存储所有属性。 ---来自延迟属性插值着色的介绍。