一、全屏的模糊。
1、高斯模糊
这个很常见,在后处理一章中有实现,这里不再赘述。还有基于整体的局部模糊,就是屏幕上某一块地方不受模糊处理。
2、径向模糊,含模糊半径
沿纹理采样坐标和模糊中心点的方向采样,每隔几个采样点采一次样,最后取个平均值
脚本:
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[ExecuteInEditMode]
public class RenderImage : MonoBehaviour
{
public Shader shader;
[Header("径向模糊迭代次数")] [Range(1, 10)]public int _BlurIteration = 1;
[Header("径向模糊强度")] [Range(0, 1)] public float _BlurStrength = 0.2f;
[Header("径向模糊半径")] [Range(0,0.2f)]public float _BlurArea = 0.1f;
private Material _material;
// Start is called before the first frame update
void Awake()
{
if (shader == null)
{
Debug.Log("Shader为空");
}
_material = new Material(shader);
}
private void OnRenderImage(RenderTexture src, RenderTexture dest)
{
if (_material != null)
{
_material.SetFloat("_BlurIteration", _BlurIteration);
_material.SetFloat("_BlurStrength", _BlurStrength);
_material.SetFloat("_BlurArea", _BlurArea);
Graphics.Blit(src, dest, _material);
}
else
{
Graphics.Blit(src, dest, _material);
}
}
}
Shader:
Shader "Custom/Test0"
{
Properties
{
_MainTex("渲染纹理",2D)="white"{}
_BlurCenter("径向模糊中心",Vector)=(0.5,0.5,0,0)
_BlurIteration("径向模糊迭代次数",Float)=1.0
_BlurStrength("径向模糊强度",Float)=1.0
_BlurArea("径向模糊半径",Float)=0.2
}
SubShader
{
Pass
{
Tags
{
"LightMode"="ForwardBase"
}
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
sampler2D _MainTex;
float4 _BlurCenter;
float _BlurIteration;
float _BlurStrength;
float _BlurArea;
struct a2v
{
float4 vertex:POSITION;
float2 texcoord:TEXCOORD0;
};
struct v2f
{
float4 pos:SV_POSITION;
float2 uv:TEXCOORD0;
};
v2f vert(a2v v)
{
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
o.uv=v.texcoord;
return o;
}
fixed4 frag(v2f i):SV_Target
{
float2 dir=_BlurCenter.xy-i.uv.xy;
float area=saturate(distance(_BlurCenter.xy,i.uv.xy)-_BlurArea);
fixed3 color=0;
for (int j = 0; j < _BlurIteration; ++j)
{
float2 uv=i.uv+dir*_BlurStrength*j*area*0.2;
color+=tex2D(_MainTex,uv);
}
color/=_BlurIteration;
return fixed4(color,1);
}
ENDCG
}
}
}
结果还行只能说,毕竟这也不是啥大场景,效果具体怎么样也看不出
3. 不同模糊用到了不同的公式,模糊效果也各不相同,看需求,网上大佬有文章写的很全。
二、单个物体的模糊。
针对于某些物体的模糊,虽然上面已经提到了基于模糊半径的模糊,但是那种仍然属于整体上的范畴,要做的针对某一物体要用到分层模糊。文章来源:https://www.toymoban.com/news/detail-453435.html
在物体描边一章中有应用。效果在文章末尾,描边效果是使用高斯模糊叠加出来的。 (65条消息) UnityShader基础案例(五)——物体描边_implosion98的博客-CSDN博客_unity 描边 文章来源地址https://www.toymoban.com/news/detail-453435.html
到了这里,关于UnityShader基础案例(四)——模糊效果的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!