【猫猫的Unity Shader之旅】之高斯模糊

本文介绍了Unity中实现高斯模糊的概念和原理,包括模糊的定义、高斯分布的作用,以及优化方法。通过实例展示了如何在Unity中应用高斯模糊,涉及到C#代码和Shader的使用,探讨了如何通过降低分辨率进行性能优化。
摘要由CSDN通过智能技术生成

  在初识屏幕特效这篇文章我们已经讲过如何在Unity中通过C#脚本和Shader配合实现最简单的屏幕特效,但是这个特效过于简单了,只是对最后将要渲染到屏幕上的颜色(即图像,或者说一张2D纹理)进行了简单的修正。由于屏幕特效本质上是对将要渲染到屏幕上的图像进行处理,所以屏幕特效用到的很多技术都是从图像处理来的,于是乎也就需要一点点(许多多)数学知识。

什么是高斯模糊

  在谈什么是高斯模糊之前我们先来看看什么是模糊。话说在一个幼儿园里面有五个小朋友坐成一排分别叫A、B、C、D、E,有一天老师给大家发糖果,五位小朋友得到的糖果数分别是10、10、20、10、10。What?C小朋友幼儿园阿姨真的不是你亲姐姐吗,怎么可以这么多?这时候C小朋友也觉得自己太特殊了,脸上都有点挂不住了,于是把多出来的糖分给了其他小朋友,这次小朋友们的糖果数变成了12、12、12、12、12,这下大家都没有意见了,C小朋友也没有了那种搞特殊的感觉,我们称C小朋友的这种做法叫做模糊。没错,图形学要从娃娃抓起,C小朋友已经成功领悟模糊的真谛,此处应有掌声ヽ(゚∀゚)メ(゚∀゚)ノ 呱唧呱唧~

  上面的例子真是生动而又不失严谨,我们可以总结一下:如果有人搞特殊,那么就不够模糊,如果大家都一样,那就是完全模糊,有更模糊,也有最模糊。比如上面的C小朋友可能稍有私心,毕竟幼儿园阿姐把糖分给我了嘛,那怎么分配就得我说了算,于是C小朋友按照其他小朋友离自己位置的远近进行分配,结果大家的糖果数变成了11、12、14、12、11,虽然不是完全平等,但是大家似乎也没有太多怨言,毕竟都多拿到糖了嘛,这样的分配方式虽然不是完全模糊,但是也相对模糊一些了。可见,模糊的方式也是多种多样的,至于高斯模糊,大概(并不)是高斯小时候分糖果使用的模糊方法吧。

回到图形学上来

  想感受图形图像上关于高斯模糊的应用非常简单,打开Photoshop,滤镜->模糊->高斯模糊。下面是投毒环节:

这里写图片描述

  可以很直观地看到经过模糊处理后的右图细节严重缺失,这也是模糊最大的特点,牺牲细节来换取数据上的平滑。仔细观察两幅图中的筷子,可以看到模糊后的筷子似乎变粗了一些,而且颜色变浅了一些,这就一点像我们之前说的小朋友分糖,糖最多的小朋友(像素)把自己的糖(颜色细节)分给了其他小朋友(其他像素),让数据看起来更加平滑,如果他选择第二种分糖方式还会保留自己的一部分细节。高斯模糊更接近第二种分糖方式。

  高斯模糊实际上是对周围像素进行加权平均的结果,所谓加权,就是有所偏向,就像第二种分糖方式,小朋友选择给离自己近(关系好)的小朋友多分一些,给离自己远(关系一般)的小朋友少分一切,当然自己分到的一定得是最多的。这样做既平滑了数据(自己不那么特殊)又保留了细节(自己拿到了更多的糖),这位小朋友不学图形学可惜了。

  对于图像来说,我们已经知道了要进行高斯模糊就要把每个像素和周围的像素进行加权平均,那么这个加权要加多少呢,这就要涉及正太分布了。

正太分布

  正太分布,又叫高斯分布。哈,终于真相了,高斯模糊就是利用高斯分布的方式对于图像上的每一点与其周围像素进行加权平均嘛。那是不是正太分布就是专门为图像模糊设计的呢,答案是否定的。事实上,正态分布是自然界中一种普遍存在的规律,主要用来描述随机变量的概率分布。举个简单的例子,比如一名运动员的百米成绩是10秒上下,那么我们取他多次训练成绩画出成绩-次数映射图像大概是这样:

这里写图片描述

  而且随着我们取样次数的增多统计结果会越来越趋近正太分布的曲线。把来源于自然界的数学规律应用到用于描述自然界的图像上,这大概也是高斯模糊的设计初衷吧。

  那么如果计算高斯模糊的具体权重呢,我们先来看一下高斯分布的密度函数,也称作高斯函数:

            f(x)=1σ2πe(xμ)22σ2

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值