UnityShader开发之径向模糊(可调节中心点 、 可调整中心点周围有一圈不模糊)
原图:
1. 无模糊开始半径
1.1 算法
(1)求得当前像素坐标与模糊中心点的坐标相减求得的带有大小的方向向量
(2)取得方向向量上的值,将方向向量切分为整数倍份(例如10份),分别取得当模糊中心点加上每份方向向量后取得的坐标所对应的颜色值,累加起来。(取小于方向向量的等分是为了将内部的颜色发散出去,如果需要聚焦,即缩小,则取倍数于其方向向量上的颜色值)
(3)除于切分成的数量,取到的就是当前像素点的值
1.2 代码
1.2.1 C#端
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[ExecuteInEditMode]//在编辑器模式下也运行
[RequireComponent(typeof(Camera))]//必须有Camera组件
public class RadiaBlur :MonoBehaviour{
public Shader RadiaBlurShader;
public Material RadiaBlurMaterial;
[Range(1,100)]
public float Level = 10;
[Range(0, 1)]
public float CenterX = 0.5f;
[Range(0, 1)]
public float CenterY = 0.5f;
private void Awake()
{
RadiaBlurMaterial = new Material(RadiaBlurShader);
}
void OnRenderImage(RenderTexture src, RenderTexture dest)
{
if (RadiaBlurMaterial != null)
{
RadiaBlurMaterial.SetFloat("_Level", Level);
RadiaBlurMaterial.SetFloat("_CenterX", CenterX);
RadiaBlurMaterial.SetFloat("_CenterY", Cen