旋转网格超采样(Rotated Grid Supersampling)

旋转网格超采样(Rotated Grid Supersampling)

这是对文章 4-Rook Antialiasing (RGSS) @Alan Wolfe 的翻译

原文采用MIT协议发布

上一篇文章讲解了采样点呈5点梅花状的梅花抗锯齿(Quincunx effect),该抗锯齿技术分享4个采样点给周围的4个像素,使得每个像素只需要渲染2个采样点就能得到总共5个采样点。

之前我提到了ShaderToy不允许在ShaderToy Demo上进行材质渲染,为了展示出梅花抗锯齿的效果,我实际上对每个像素进行了5次采样。

如果你不能够或者不想渲染两次场景,也许4-Rook Antialiasing(译者注:N-Rook Antialiasing是RGSS的别称)正是你所需要的方案。

4-Rook Antialiasing 在每个像素做4次采样,采样点位置和权重如下所示。这种采样方法有时候被称为旋转网格超采样(Rotated Grid Supersampling),这种技术是N-Rook supersampling技术的一种特例,N-Rook supersampling 是一种在位置不在同一直线的采样点的上采样的技术。N-Rook supersampling 可以防止水平或垂直走样现象。

有趣的是,4-Rook AA 的模糊问题看起来比梅花抗锯齿要轻。直觉上,这个结论是对的。因为4-Rook AA每个像素的信息来源于像素内的4次子像素,而梅花抗锯齿每个像素的信息来源于像素内的5个子像素。因此看起来比梅花抗锯齿要来的清晰,但性能上的消耗4-Rook AA比较昂贵:因为4-Rook AA的每个像素需要采样4次子像素,而梅花抗锯齿的5个子像素中的4个子像素位于像素的边界,因为其信息与其他像素共享,因此在平均下每个像素只需要采样2次子像素就能完成渲染。

我认为SSAA与模糊Blur的区别是,Blur不需要额外的信息就能完成运算,而SSAA则需要。梅花抗锯齿有点像是介于上述两种技术之间的技术:它采样了一个全新的子像素,并重用了4个子像素,4-Rook Antialiasing 则是 完全重新采样了它所需的4个子像素。

当然你也可以通过渲染四次画面来实现抗锯齿,每一次渲染给予不同的偏差,最后计算平均值即可。

Output[x][y] = (A[X][Y] + B[X][Y] + C[X][Y] + D[X][Y])/4

下面是我编写的4-rook anti aliasing的Demo:

下面是采用梅花抗锯齿的渲染Demo,注意下图看起来要比上图要模糊一点(注意红色和蓝色矩形的边缘部分),其螺旋方块图案也看起来不怎么样(看起来走样程度更高?),并且背景看起来也比4-rook anti aliasing的版本要暗一点。

Shadertoy: 4-Rook Antialiasing (RGSS)

posted @ 2023-02-15 21:33  鸟临窗语报天晴  阅读(186)  评论(0编辑  收藏  举报