Unity Shader学习:水波纹效果
依旧是借鉴(抄袭)puppet_master大神的实现,详细理论可以看作者的原文,这里稍微魔改了一下,让玩家可以同时触发多个水波纹效果。
水波纹效果主要思路:获取鼠标点到uv点的向量作为水波纹扩散的方向和大小,在sin函数中输入向量的长度模拟出起伏的值(实际就是uv采样距离鼠标点多少的偏移值)。再增加一个能量削弱的值就能有水波纹渐渐消失的效果。最后采用叠加后处理的方式允许多个水波纹同时产生。
C#部分:
//屏幕后处理基类
using UnityEngine;
using System.Collections;
//非运行时也触发效果
[ExecuteInEditMode]
//屏幕后处理特效一般都需要绑定在摄像机上
[RequireComponent(typeof(Camera))]
//提供一个后处理的基类,主要功能在于直接通过Inspector面板拖入shader,生成shader对应的材质
public class PostEffectBase : MonoBehaviour
{
//Inspector面板上直接拖入
public Shader shader = null;
private Material _material = null;
public Material _Material
{
get
{
if (_material == null)
_material = GenerateMaterial(shader);
return _material;
}
}
//根据shader创建用于屏幕特效的材质
protected Material GenerateMaterial(Shader shader)
{
if (shader == null)
return null;
//需要判断shader是否支持
if (shader.isSupported == false)
return null;
Material material = new Material(shader);
material.hideFlags = HideFlags.DontSave;
if (material)
return material;
return null;
}
}
//水波纹屏幕后处理
using System.Collect