unity沙子堆积_Unity Shader 之 简单实现沙漠干旱热浪的效果
CameraHotWave 腳本具體代碼和代碼說明如下:
using UnityEngine;
///
/// 實現(xiàn)相機熱浪效果
///
[ExecuteInEditMode] ? ? // 編輯狀態(tài)下執(zhí)行該類
[RequireComponent(typeof(Camera))] ?// 要求有相機
public class CameraHotWave : MonoBehaviour {
public Shader curShader; ? ? ? ? ? ? ? ?// shader變量參數(shù)
public Texture noise; ? ? ? ? ? ? ? ? ? // 噪點圖片
[Range(0.0f, 1.0f)]
public float grayScaleAmount = 0.1f; ? ?// 主圖扭曲范圍參數(shù)
[Range(0.0f, 1.0f)]
public float DistortTimeFactor = 0.15f; // 主圖扭曲熱浪動態(tài)變化速度參數(shù)
private Material curMaterial; ? ? ? ? ? // 材質(zhì)參數(shù)
public Material material ? ? ? ? ? ? ? ?// 材質(zhì)參數(shù)屬性
{
get
{
// 材質(zhì)為空,新建材質(zhì),并賦予熱浪 shader
if (curMaterial == null)
{
curMaterial = new Material(curShader);
curMaterial.hideFlags = HideFlags.HideAndDontSave;
}
return curMaterial;
}
}
void Start()
{
// 判斷系統(tǒng)是否支持圖像特效
if (SystemInfo.supportsImageEffects == false)
{
enabled = false;
return;
}
// 判斷當前shader 是否為空,是否支持
if (curShader != null && curShader.isSupported == false)
{
enabled = false;
}
}
///
/// 圖片渲染函數(shù)
/// Camera的一個回調(diào)(message),他會在camera執(zhí)行渲染時候被調(diào)用
///
/// 原圖片
/// 目標圖片
void OnRenderImage(RenderTexture sourceTexture, RenderTexture destTexture)
{
// 判斷當前shader是否為空
// 不為空則設(shè)置控制賦值對用的shader參數(shù),進行渲染
// 為空則不帶 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()
{
// 失效時銷毀新建的材質(zhì)
if (curMaterial != null)
{
DestroyImmediate(curMaterial);
}
}
}
總結(jié)
以上是生活随笔為你收集整理的unity沙子堆积_Unity Shader 之 简单实现沙漠干旱热浪的效果的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: github上实用、常用的插件和库
- 下一篇: 相机标定与三维重建原理