声明
本文是读冯乐乐大佬的《Unity Shader 入门精要》的笔记,也是刚刚学Shader,对书本的代码做了些解释,如有问题欢迎指正。
实现原理
高斯模糊实现的原理是使用高斯核进行滤波
可参考【图像处理】之高斯滤波:原理、代码实现和优化加速_三维高斯过滤-优快云博客
C#脚本
PostEffecsBase是一个基类,它的作用是子类可以用于检测平台是否支持和创建材质
using UnityEngine;
//编辑模式下执行该脚本,这通常用于需要在编辑时实时更新的脚本
[ExecuteInEditMode]
/*
这个属性用于确保附加了此脚本的游戏对象必须拥有指定类型的组件。在这种情况下,
它要求游戏对象必须有一个Camera组件。如果游戏对象上没有Camera组件,
Unity会自动添加一个。这在需要访问相机功能,比如自定义渲染、后处理效果等场景中非常有用。
*/
[RequireComponent(typeof(Camera))]
public class PostEffectsBase : MonoBehaviour
{
private void Start()
{
CheckRecources();
}
/// <summary>
/// 检查资源
/// </summary>
protected void CheckRecources()
{
bool isSupport = CheckSuppor();
if (isSupport.Equals(false))
{
enabled = false;
}
}
/// <summary>
/// 检查硬件是否支持后期渲染和渲染纹理
/// </summary>
/// <returns></returns>
protected bool CheckSuppor()
{
if (SystemInfo.supportsImageEffects && SystemInfo.supportsRenderTextures)
{
return true;
}
Debug.LogWarning("This platform does not support image effects or render textures.");
return false;
}
/// <summary>
/// 检查Shader并且创建材质
/// </summary>
/// <returns></returns>
protected Material CheckShaderAndCreateMaterial(Shader shader, Material material)
{
if (shader == null) return null;
if (shader.isSupported && material && material.shader == shader)
{
return material;
}
material = new Material(shader);
material.hideFlags = HideFlags.D