Unity Shader-后处理:高斯模糊

unity 实现 GaussianBlur高斯模糊) shader Shader中实现高斯模糊,我们主要对图像进行采样,并使用高斯权重对采样结果进行加权平均。此外,为了获得更好的性能,你可以考虑使用多重采样技术,或者在GPU上并行处理多个像素。在Unity中使用这个Shader时,你需要创建一个材质(Material),并将这个Shader分配给它。这个Shader示例中,我们在片元着色器(fragment shader)中对纹理进行采样,并使用了简单的3x3高斯模糊核。在实际应用中,你可能想要使用更大的模糊核以获得更平滑的模糊效果,但这会增加计算成本。 阅读详情

一.简介


上一篇文章学习了模糊的原理以及基本的模糊实现,对于清晰和模糊这个定义感觉还是比较说明问题,这里再贴出一下:“ 清晰的图片,各个像素之间会有明显的过渡,而如果各个像素之间的差距不是很大,那么图像就会模糊了”。鉴于这个定义,我们就可以通过代码来实现模糊的效果。上一篇 Unity Shader-后处理:均值模糊中实现了一个基本的均值模糊,也就是将一个像素和其周围的像素取平均值从而进行模糊,并且通过迭代处理的方式,增强了模糊的效果。但是,均值模糊由于采样次数较少,每个像素以及其周围像素的权值是相同的,模糊出来的效果不佳,而多次迭代处理虽然可以增强模糊效果,但是迭代大大地增加了性能的消耗,虽然在学习时可以用迭代来达到效果,但是要实际使用的时候,效率就不得不成为我们考虑的重要因素。所以,这一次,我们来学习一下更加高级的模糊效果-高斯模糊。

高斯模糊(Gaussian Blur),又叫做高斯平滑。高斯模糊主要的功能是对图片进行加权平均的过程,与均值模糊中周围像素取平均值不同,高斯模糊进行的是一个加权平均操作,每个像素的颜色值都是由其本身和相邻像素的颜色值进行加权平均得到的, 越靠近像素本身,权值越高,越偏离像素的,权值越低。而这种权值符合我们比较熟悉的一种数学分布-正态分布,又叫高斯分布,所以这种模糊就是高斯模糊啦。

二.概念介绍


1.正态分布


先来复习一下正太分布,上一次听说这个词儿应该还是大二时的《概率与数理统计》课上。正太分布,又名高斯分布,这个分布函数具有很多非常漂亮的性质,使得其在诸多领域都有非常重要的影响力。而且,正态分布是一个比较自然的分布,在特定条件下,大量统计独立的随机变量的平局值的分布趋近于正态分布,这也就是传说中的中心极限定理。说了这么多,归结起来就是一句话,高斯分布比较好看,所以我们就用高斯分布作为我们进行加权计算时的权值参考。

高斯分布的定义如下:


其中μ是正态分布随机变量的均值,也就是期望值,也就是下图中x轴上最中间的位置,随机变量在μ两侧对称分布,而第二个参数σ^2是这个随机变量的方差,因而正态分布记为N(μ,σ2 ),符合正态分布的随机变量越靠近μ则概率越大,而越远离μ概率越小,σ越小,分布越集中在μ附近,σ越大,分布越分散。而当μ=0,σ^2=1时,称为标准正态分布,记为N(0,1)。正态分布的图像如下图所示:
                                                       

那么,这个分布和我们的高斯模糊有什么关系呢?简单来说, 我们需要让我们的采样符合高斯分布。那么,我们处理每个像素的时候,像素本身的点就对应着μ对应的权值,而我们要在像素周围采样,这个采样的范围就可以用σ表示,比如我们的方差为1,那么我们直接向外采一个像素的值,基本就可以达到模糊的效果了;而如果方差为0,那么μ点的权值最大,加权平均后仍然为原像素值,等于没模糊;而方差很大,那么采样的范围就很广,就会更加模糊。

关于高斯模糊,还有一点,就是采样的个数,也就是传说中的高斯模板(高斯核)的大小。也就是我们要取几个采样点的问题,μ对应像素点本身,μ±1σ,μ±2σ分别代表向外1个采样点,两个采样点,当然由于越向外,对应的权值越小,所以后面的我们基本可以不予考虑,这里我们就采用一个μ,μ±1σ,μ±2σ,μ±3σ一共7个采样点作为高斯高斯核。

关于高斯核的权值设定,本人看了好几篇文章以及书籍,然而每个高斯模糊用的高斯核都不同,这里也没有什么标准。正如某图形学大牛说的
Unity Shader 入门精要》笔记之高斯模糊 在单个Pass中实现高斯模糊可能需要较大的计算量,特别是当高斯核(kernel)较大时。这可能导致性能下降,尤其是在移动设备或性能受限的平台上。 阅读详情

相关推荐

UnityShader入门精要——高斯模糊

均值模糊:它使用的卷积核中的各个元素值都相等,且相加等于1,即卷积后得到的像素值是其邻域内各个像素值的平均值。 中值模糊:选择邻域内对所有像素排序后的中值替换掉原颜色。 高斯模糊:使用的卷积核名为高斯核,是一个正方形大小的滤波核,其中每个元素的计算都是基于下面的高斯方程: 其中,σ是标准方差(一般取值为1),x和y分别对应了当前位置到卷积核中心的整数距离。 高斯方程很好地模拟了邻域每个像素对当前处理像素的影响程度一距离越近,影响越大。高斯核的维数越高,模糊程度越大。 使用一个NxN的高..

weixin_51327051的博客 4489

unity高斯模糊Shader

基于Unity引擎编写的高斯模糊效果的Shader,真实可用,仅供学习参考

Unity Shader屏幕后处理高斯模糊

原理 利用卷积计算,使用的卷积核叫高斯核 使用一个N x N的高斯核对图像进行卷积滤波,就需要N x N x W x H次纹理采样,当N的大小不断增加时,采样次数会变得非常巨大,不过我们可以把这个二维高斯函数拆分成两个一维函数. 得到的结果是一样的。 实现 我们会先后调用两个Pass,第一个Pass使用竖直方向的一维高斯核进行滤波,第二个Pass使用水平方向的一维高斯核,得到最终的目标图像. 首先...

qq_44800780的博客 502

Unity3D】高斯模糊特效

我们将用于模糊处理的卷积核称为模糊算子,它一般满足以下条件: 卷积核中权值上下对称、左右对称; 卷积核中每个权值大于或等于 0,小于 1; 卷积核中所有权值之和为 1。 我们将所有权值都为 1 / n(n 为权值个数)的卷积核称为平均模糊算子;将权值随位置变化且符合高斯分布(或正太分布)的卷积核称为高斯模糊算子(或高斯核),它较好地模拟了邻域中每个像素对当前处理像素的影响程度(距离越近,影响越大)。σ是标准差,其值越大,高斯分布函数的图像越矮胖,一般取值为 1,x、y为当前位置到卷积核

little_fat_sheep 3010

Unity3d Shader高斯模糊效果

高斯模糊可以实现模糊效果,可用于眩晕,场景动画等效果 高斯模糊利用了卷积计算,把每个像素和周围的像素混合 见代码实现 c#代码ImageEffectBase using UnityEngine; namespace GameBase.Effect { [RequireComponent(typeof (Camera))] [AddComponentMenu(...

PangNanGua的专栏 3300

Unity Shader 学习13:屏幕后处理 - 使用高斯模糊的Bloom辉光效果

luminaceThreshold:模糊阈值,它能决定提取亮部的区域范围 iterations:迭代次数,可以对图片进行多次的模糊 blurSpread:每次迭代模糊后,都要对模糊范围 (BlurSize) 进行扩大,其控制每次扩大的速度 blurSize:就是上述的blurSize,其与blurSpread的关系为 1.0f + 迭代次数i * blurSpeed ,加一是为了保证值最小能为1 downSample:对原图进行降采样,也就是降低图片的像素,这样既能优化性能,又能获得更平滑的模糊效果

weixin_63623077的博客 1451

(十一)unity Shader之——————屏幕后处理效果(高斯模糊)

前一篇文章中讲了卷积的概念,并利用卷积实现了一个简单的边缘检测效果。下面将学习卷积的另一个常见应用——高斯模糊。模糊的实现方法有很多,例如均值模糊和中值模糊,均值模糊同样使用了卷积操作,它使用的卷积核中的各个元素值都相等,且相加等于1,也就是说,卷积后得到的像素值是其领域内各个像素值的平均值。而中值模糊则是选择领域内的所有像素排序后的中值替换掉原颜色。一个更高级的模糊方法是高斯模糊。 下图是原效...

cgy56191948的博客 1848

Unity Shader】屏幕后处理4.0:基于高斯模糊的Bloom

介绍高斯模糊实现Bloom的过程,以及这个方法的优缺点。

qq_41835314的博客 3049

Unity高斯模糊后处理:从数学原理到Shader实现与性能优化

图像处理中的模糊技术是提升视觉表现力的基础手段,其核心原理是通过卷积操作对像素进行加权平均,以平滑图像细节并营造特定氛围。高斯模糊作为一种经典算法,利用高斯核函数为不同距离的像素分配不同权重,相比均值模糊能产生更自然的过渡效果,避免了块状瑕疵。在实时渲染领域,该技术的价值在于能以可控的性能开销实现丰富的屏幕空间特效,如景深、泛光、UI朦胧感等。针对游戏开发中常见的性能瓶颈,通过可分离卷积将二维计算降为一维、结合降采样减少像素处理量、在顶点着色器预计算采样坐标等工程优化手段,能显著提升运行效率。本文以Unit

cuililai5127的博客 378

Unity屏幕后处理Shader实战:从高斯模糊到LUT色彩分级

屏幕后处理是实时渲染中的关键技术,它通过对渲染完成的图像进行像素级二次加工,在不修改原始场景的前提下实现丰富的视觉效果。其核心原理是在渲染管线的最后阶段,将屏幕图像作为纹理输入,通过自定义Shader在GPU上并行处理。这项技术的价值在于能以较低成本显著提升画面表现力,广泛应用于游戏、影视等实时图形领域。在具体实现中,高斯模糊通过卷积运算实现图像平滑,是Bloom泛光等效果的基础;而LUT(查找表)技术则通过预计算的颜色映射实现高效专业的色彩分级。本文将以Unity引擎为例,深入解析这些核心后处理效果的Sh

weixin_29009971的博客 309

Unity Shader】屏幕后处理3.0:均值模糊和高斯模糊

Unity中尝试了基于屏幕的均值模糊和高斯模糊效果。

qq_41835314的博客 3127

Unity Shader 屏幕后处理效果 高斯模糊

高斯高斯后 代码 using UnityEngine; public class GaussianBlur : PostEffectsBase { public Shader gaussianBlurShader; private Material gaussianBlurMaterial = null; public Material mater...

songhuanfei2017的博客 411

unity shader】用数字图像处理的知识写屏幕后处理效果(bloom、高斯模糊、反色、曝光、黑白图像、灰度图像)

用数字图像处理的知识写shader

weixin_43740653的博客 3529

Unity Shader unity文档学习笔记(七):后处理高斯模糊

比起均值模糊 就是效果要好一点 说性能会好也好不到哪里去 效果 shader using UnityEngine; using System.Collections; //编辑状态下也运行 [ExecuteInEditMode] //继承自PostEffectBase public class GaussianBlur : PostEffectBase { //模糊半径 ...

qq_43204246的博客 290
上一篇: Unity Shader-后处理:简单均值模糊
下一篇: 如何学好3D引擎编程
puppet_master
puppet_master 领域专家: C/C++技术领域 领域专家: C/C++技术领域
博客等级 码龄12年 2692粉丝 161原创
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值