unity沙子堆积_Unity Shader 之 简单实现沙漠干旱热浪的效果
CameraHotWave 脚本具体代码和代码说明如下:
using UnityEngine;
///
/// 实现相机热浪效果
///
[ExecuteInEditMode] // 编辑状态下执行该类
[RequireComponent(typeof(Camera))] // 要求有相机
public class CameraHotWave : MonoBehaviour {
public Shader curShader; // shader变量参数
public Texture noise; // 噪点图片
[Range(0.0f, 1.0f)]
public float grayScaleAmount = 0.1f; // 主图扭曲范围参数
[Range(0.0f, 1.0f)]
public float DistortTimeFactor = 0.15f; // 主图扭曲热浪动态变化速度参数
private Material curMaterial; // 材质参数
public Material material // 材质参数属性
{
get
{
// 材质为空,新建材质,并赋予热浪 shader
if (curMaterial == null)
{
curMaterial = new Material(curShader);
curMaterial.hideFlags = HideFlags.HideAndDontSave;
}
return curMaterial;
}
}
void Start()
{
// 判断系统是否支持图像特效
if (SystemInfo.supportsImageEffects == false)
{
enabled = false;
return;
}
// 判断当前shader 是否为空,是否支持
if (curShader != null && curShader.isSupported == false)
{
enabled = false;
}
}
///
/// 图片渲染函数
/// Camera的一个回调(message),他会在camera执行渲染时候被调用
///
/// 原图片
/// 目标图片
void OnRenderImage(RenderTexture sourceTexture, RenderTexture destTexture)
{
// 判断当前shader是否为空
// 不为空则设置控制赋值对用的shader参数,进行渲染
// 为空则不带 Material 渲染
if (curShader != null)
{
material.SetFloat("_LuminosityAmount", grayScaleAmount);
material.SetFloat("_DistortTimeFactor", DistortTimeFactor);
material.SetTexture("_NoiseTex", noise);
Graphics.Blit(sourceTexture, destTexture, material);
}
else
{
Graphics.Blit(sourceTexture, destTexture);
}
}
void Update()
{
// 保证值不越界在[0,1]范围
grayScaleAmount = Mathf.Clamp(grayScaleAmount, 0.0f, 1.0f);
}
void OnDisable()
{
// 失效时销毁新建的材质
if (curMaterial != null)
{
DestroyImmediate(curMaterial);
}
}
}
总结
以上是生活随笔为你收集整理的unity沙子堆积_Unity Shader 之 简单实现沙漠干旱热浪的效果的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: github上实用、常用的插件和库
- 下一篇: 相机标定与三维重建原理