taa抗锯齿(forgotten)

超级采样防盗-联盟

SAA在许多抗锯齿算法中比较昂贵,年代也很久,但方法比较简单。

主要分为两步

1 .寻找边缘

2 .模糊边缘

这是开机自检处理的处理方法,

看看接下来怎么实现

搜索边缘的理由也是为了减少消耗量。 这样,可以只通过边缘进行超级采样,而无需对所有图进行采样。

上一篇文章详细介绍了三种方法: Roberts、Sobel和Canny,其中Sobel最好,所以我们使用Sobel搜索边缘

简单来说,寻找边缘的区别在于滤波器的不同,但都是水平垂直采样

Sobel算子两个滤波器分别计算横向和纵向的灰度

GX是水平滤波器,GY是垂直滤波器,垂直滤波器是水平滤波器旋转90度。

过滤器是3×3矩阵,与图像平面折叠。

如果不存在边,则两个点的颜色非常接近,过滤器返回较小的值。 否则,可以判断为存在边缘。

找到边缘后,可以模糊边缘

模糊边缘使边缘模糊是进行超级采样。 如果取周围的像素点进行混色,则例如常见于SSAAx2、SSAAx4、x8…。 后面的数字是采样点的数量。

我以前翻译过维客的超级采样

模糊边缘的方式(采样方式)有很多种,但比较流行的有几种

网格采样、随机采样、poisson disc采样、抖动算法采样、旋转网格采样

有些方法的采样范围设定为他们边缘的灰度,也就是边缘检测中的g。 g越大,边缘越深,锯齿越明显,因此必须增大采样范围。

尝试网格、随机和旋转采样

网格采样相对简单,但由于过于规则,模糊效果可能不够理想

获取周围的点,进行混色

float4C0=tex2D(_maintex,I.uv_maintexfixed2) 0.5,1 )/_Size ); float4C1=tex2d(_maintex,I.uv _ maintexfixed2(-0.5,1 )/_Size ); float4C2=tex2d(_maintex,I.uv_maintexfixed2) 0.5,-1)/_Size ); float4C3=tex2d(_maintex,I.uv_maintexfixed2(-0.5,-1)/_Size );

然后是随机的。 我个人认为随机效果不太好。 因为像素点有扩散的痕迹,就像边缘被干扰了一样

浮动2 rand uv=0; rand uv=rand (浮动2 (n.x,n.y ); float4C0=tex2D(_maintex,I.uv_maintexfloat2) randuv.x/2,randUV.y )/_Size ); rand uv=rand (浮动2 (-n.x,n.y ); float4C1=tex2D(_maintex,I.uv_maintexfloat2) randuv.x/2,randUV.y )/_Size ); rand uv=rand (浮动2 (n.x,-n.y ); float4C2=tex2d(_maintex,I.uv_maintexfloat2) randuv.x/2,randUV.y )/_Size ); randuv=rand(float2(-n.x,-n.y ); float4C3=tex2D(_maintex,I.uv_maintexfloat2) randuv.x/2,randUV.y )/_Size );

然后是旋转网格的采样。 最佳旋转角度约为Arctan(1/2) ) 26.6。 在这里偷懒,也可以省去周转计算的消耗。 在大致位置取样,效果很好。 span style=’font-size:14px;’ float4C0=tex2D(_maintex,I.uv_maintexfixed2) 0.2/2,0.8 )/_Size ); float4C1=tex2d(_maintex,I.uv_maintexfixed2) 0.8/2,-0.2 )/_Size ); float4C2=tex2d(_maintex,I.uv_maintexfixed2(-0.2/2,-0.8 )/_Size ); float4C3=tex2d(_maintex,I.uv _ maintexfixed2(-0.8/2,0.2 )/_Size ); /span

比较结果

在性能方面SSAA比其他AA稍弱,主要是因为方法是这样的暴力采样

SAA采样方式之间的损失大致相同

都是SSAAx4

无抗锯齿

网格采样

随机抽样

旋转采样

unity下image effect的SSAA消费量与正文大致相同

从其他unity的抗锯齿方法来看,FXAA的消费量最低也在2.8ms左右

所有代码都被GitHub共享了

—–by wolf96 http://blog.csdn.net/wolf96/

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注