Unity 抗锯齿 SSAA 卷积

卷积的理解

  一个函数在另一个函数上的加权叠加

  

  最形象的理解:一个人被不停的打巴掌,每打一个巴掌,脸会肿起来,并在一定时间内消除,求时间t时,脸肿的程度

SSAA

  SSAA的步骤有两步:计算边缘系数,边缘模糊算法,

  计算边缘系数:效果比较好的是Sobel算法,Sobel定义了x与y方向的两个过滤器,至于为什么是这样的矩形,不懂??

    但是起码知道,它们总体相加趋于0,根据当前点,以及与其相邻的8个点,组成像素的9宫矩阵;

    当下面两个过滤器与像素矩阵做卷积运算,也就大概能得出当前点与周围的差异度

  

 

  

 

   这样当前点的x与y方向的灰度值就是,这个值越大,代表越有可能是边缘,与周围像素差异越大

  边缘模糊算法:  

    该算法是采样当前点周围的点,用上面计算出的Sobel算子,与采样的这些点,做像素插值,得到最终平滑

  之后的结果,效果比较好的是旋转网格采样,当然你也可以自定义,去直接采它周围的4个点,或8个点,让这些

  点的值做平均,再与当前点做插值。下面是旋转网格采样的计算式(x4采样):  

     float4 c0 = tex2D(_MainTex, i.uv_MainTex + fixed2(0.2 / 2, 0.8) / _Size);
	float4 c1 = tex2D(_MainTex, i.uv_MainTex + fixed2(0.8 / 2, -0.2) / _Size);
	float4 c2 = tex2D(_MainTex, i.uv_MainTex + fixed2(-0.2 / 2, -0.8) / _Size);
	float4 c3 = tex2D(_MainTex, i.uv_MainTex + fixed2(-0.8 / 2, 0.2) / _Size);

参考

https://www.zhihu.com/question/22298352

https://www.cnblogs.com/zhanlang96/p/4471769.html

posted on 2020-03-19 22:04  胖福  阅读(723)  评论(0编辑  收藏  举报

导航