屏幕后处理----模糊算法

**

unity shader:屏幕后处理技术

屏幕后处理定义:就是渲染完整个场景得到屏幕图像后,再对这个图像进行一系列操作,实现各种屏幕特效。
屏幕后处理实现过程:首先需要在摄像机上添加一个用于屏幕后处理的脚本。在这个脚本中,我们会实现MonoBehaviour.OnRenderImage函数来获取当前屏幕的渲染纹理。然后再调用Graphics.Blit函数使用特定的Unity Shader对当前的图像进行处理,再把返回的渲染纹理显示到屏幕上。
详情参考:https://zhuanlan.zhihu.com/p/125744132
添加链接描述

图像模糊算法在后处理渲染领域中占据着重要的地位。很多产品级后处理的实现,都会直接或间接依赖于图像模糊算法中的一种或多种。无论是基于高斯模糊(Gaussian Blur)或其改进算法的Bloom特效,还是基于径向模糊(Radial Blur)的Sun Shaft(God Ray),或是基于方向模糊(Directional Blur)的镜头眩光光晕(Glare Lens Flare),抑或是景深(Depth of Field)特效中摄影级失焦感的散景模糊(Bokeh Blur),都以模糊算法作为重要的支撑。所以说,后处理中所采用模糊算法的优劣,决定了后处理管线最终的渲染品质和消耗性能的多少。

处理管线中会使用到的如下十种模糊算法:
高斯模糊(Gaussian Blur)
方框模糊(Box Blur)
Kawase模糊(Kawase Blur)
双重模糊(Dual Blur)
散景模糊(Bokeh Blur)
移轴模糊(Tilt Shift Blur)
光圈模糊(Iris Blur)
粒状模糊(Grainy Blur)
径向模糊(Radial Blur)
方向模糊(Directional Blur)

在展开全文,对这十种图像模糊算法进行分别介绍之前,这一节中先做一个总览,即一个横向的对比。要评判一种模糊算法的好坏,主要有三个标准:
模糊品质(Quality) 。模糊品质的好坏是模糊算法是否优秀的主要指标。
模糊稳定性(Stability) 。模糊的稳定性决定了在画面变化过程中,模糊是否稳定,不会出现跳变或者闪烁。
性能(Performance) 。性能的好坏是模糊算法是否能被广泛使用的关键所在。
以下是本文涉及的十种模糊算法在标准情况下以上述三个指标作为评判标准的横向对比:

在展开全文,对这十种图像模糊算法进行分别介绍之前,这一节中先做一个总览,即一个横向的对比。要评判一种模糊算法的好坏,主要有三个标准:

模糊品质(Quality) 。模糊品质的好坏是模糊算法是否优秀的主要指标。
模糊稳定性(Stability) 。模糊的稳定性决定了在画面变化过程中,模糊是否稳定,不会出现跳变或者闪烁。
性能(Performance) 。性能的好坏是模糊算法是否能被广泛使用的关键所在。
以下是本文涉及的十种模糊算法在标准情况下以上述三个指标作为评判标准的横向对比:
在这里插入图片描述

  1. 高斯模糊
    高斯模糊在图像处理领域,通常用于减少图像噪声以及降低细节层次,以及对图像进行模糊,其视觉效果就像是经过一个半透明屏幕在观察图像。
    从数字信号处理的角度看,图像模糊的本质一个过滤高频信号,保留低频信号的过程。过滤高频的信号的一个常见可选方法是卷积滤波。从这个角度来说,图像的高斯模糊过程即图像与正态分布做卷积。由于正态分布又叫作“高斯分布”,所以这项技术就叫作高斯模糊。而由于高斯函数的傅立叶变换是另外一个高斯函数,所以高斯模糊对于图像来说就是一个低通滤波器。
    代码实现:
    高斯模糊的具体实现
Shader "Unlit/Blur"
{
   
	Properties{
   
		 _MainTex("Base (RGB)", 2D) = "white" {
   }
		 _BlurSize("Blur Size", Float) = 1.0 //模糊大小
	}
		SubShader{
   
			CGINCLUDE

			#include "UnityCG.cginc"

			sampler2D _MainTex;
			float4 _MainTex_TexelSize;//主贴图 _MainTex 的像素尺寸大小
			float _BlurSize;

			struct v2f {
   
				float4 pos : SV_POSITION;
				half2 uv[5]: TEXCOORD0;//利用5X5積卷濾波
			};

			v2f vertBlurVertical(appdata_img v) {
   
				v2f o;
				o.pos = UnityObjectToClipPos(v.vertex);

				half2 uv = v.texcoord;

				o.uv[0] = uv;
				o.uv[1] = uv + float2(0.0, _MainTex_TexelSize.y * 1.0) * _BlurSize;
				o.uv[2] = uv - float2(<
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Lua并没有内置的图形处理库,但你可以使用一些外部库来实现高斯模糊后期特效。下面是一种基于Lua和LÖVE游戏引擎的实现方法: 1. 首先,在你的Lua脚本中引入LÖVE游戏引擎的库: ```lua local love = require("love") ``` 2. 创建一个新的LÖVE游戏窗口并设置其渲染函数: ```lua function love.load() love.window.setMode(800, 600) end function love.draw() -- 在这里绘制你的场景 end ``` 3. 在渲染函数中,使用LÖVE的`love.graphics`模块来进行高斯模糊后期特效的处理。你可以使用`love.graphics.captureScreenshot()`函数来获取当前屏幕的截图,然后使用滤波算法对图像进行高斯模糊处理,最后再将处理后的图像绘制到屏幕上。 ```lua function love.draw() -- 获取屏幕截图 local screenshot = love.graphics.captureScreenshot() -- 对截图进行高斯模糊处理 local blurryScreenshot = applyGaussianBlur(screenshot) -- 绘制模糊后的截图 love.graphics.draw(blurryScreenshot, 0, 0) end ``` 4. 实现`applyGaussianBlur()`函数来执行高斯模糊算法。你可以使用一些图像处理库,比如`lua-gd`或者`LuaJIT-FFI-Image`来进行图像处理。以下是一个使用`lua-gd`库的示例: ```lua function applyGaussianBlur(image) local gd = require("gd") -- 将截图转换为gd库中的图像对象 local imageData = gd.createFromPngStr(image:encode("png"):getString()) -- 对图像应用高斯模糊滤波器 imageData:gaussianBlur(5) -- 调整模糊程度,这里使用半径为5的高斯模糊 -- 将处理后的图像转换回LÖVE的图像对象 local blurryImage = love.graphics.newImage(love.image.newImageData(imageData:string())) return blurryImage end ``` 请注意,以上代码只是一个示例,具体的实现方式和库可能会因你的项目环境和需求而有所不同。你可以根据自己的需要选择适合的图像处理库和参数来实现高斯模糊后期特效。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值