Unity Shader——夜晚视觉屏幕特效(night vision Screen Effect)
本文参考《Unity Shaders and Effects CookBook》。
这一篇夜晚视觉的效果跟上篇的老电影特效效果很类似,首先看下什么是夜晚视觉的效果:
分析下操作思路:
需要的图片素材如下:
下面的脚本处理跟前面的几篇一样的模式,一个shader一个cs脚本:
Shader脚本:
Shader "MyShaders/NightVisionEffectShader"
{Properties {_MainTex ("Base (RGB)", 2D) = "white" {}_VignetteTex ("Vignette Texture", 2D) = "white"{}_ScanLineTex ("Scan Line Texture", 2D) = "white"{}_NoiseTex ("Noise Texture", 2D) = "white"{}_NoiseXSpeed ("Noise X Speed", Float) = 100.0_NoiseYSpeed ("Noise Y Speed", Float) = 100.0_ScanLineTileAmount ("Scan Line Tile Amount", Float) = 4.0_NightVisionColor ("Night Vision Color", Color) = (1,1,1,1)_Contrast ("Contrast", Range(0,4)) = 2_Brightness ("Brightness", Range(0,2)) = 1_RandomValue ("Random Value", Float) = 0_distortion ("Distortion", Float) = 0.2_scale ("Scale (Zoom)", Float) = 0.8}SubShader {Pass{CGPROGRAM#pragma vertex vert_img#pragma fragment frag#pragma fragmentoption ARB_precision_hint_fastest#include "UnityCG.cginc"uniform sampler2D _MainTex;uniform sampler2D _VignetteTex;uniform sampler2D _ScanLineTex;uniform sampler2D _NoiseTex;fixed4 _NightVisionColor;fixed _Contrast;fixed _ScanLineTileAmount;fixed _Brightness;fixed _RandomValue;fixed _NoiseXSpeed;fixed _NoiseYSpeed;fixed _distortion;fixed _scale;float2 barrelDistortion(float2 coord) {float2 h = coord.xy - float2(0.5, 0.5);float r2 = h.x * h.x + h.y * h.y;float f = 1.0 + r2 * (_distortion * sqrt(r2));return f * _scale * h + 0.5;}fixed4 frag(v2f_img i) : COLOR{//Get the colors from the RenderTexture and the uv's//from the v2f_img structhalf2 distortedUV = barrelDistortion(i.uv);fixed4 renderTex = tex2D(_MainTex, distortedUV);fixed4 vignetteTex = tex2D(_VignetteTex, i.uv);//Process scan lines and noisehalf2 scanLinesUV = half2(i.uv.x * _ScanLineTileAmount, i.uv.y * _ScanLineTileAmount);fixed4 scanLineTex = tex2D(_ScanLineTex, scanLinesUV);half2 noiseUV = half2(i.uv.x + (_RandomValue * _SinTime.z * _NoiseXSpeed),i.uv.y + (_Time.x * _NoiseYSpeed));fixed4 noiseTex = tex2D(_NoiseTex, noiseUV);// get the luminosity values from the render texture using the YIQ values.fixed lum = dot (fixed3(0.299, 0.587, 0.114), renderTex.rgb);lum += _Brightness;fixed4 finalColor = (lum *2) + _NightVisionColor;//Final outputfinalColor = pow(finalColor, _Contrast);finalColor *= vignetteTex;finalColor *= scanLineTex * noiseTex;return finalColor;}ENDCG}} FallBack off
}
Cs脚本:
using UnityEngine;
using System.Collections;[ExecuteInEditMode]
public class NightVisionEffect : MonoBehaviour
{#region Variablespublic Shader nightVisionShader;public float contrast = 2.0f;public float brightness = 1.0f;public Color nightVisionColor = Color.white;public Texture2D vignetteTexture;public Texture2D scanLineTexture;public float scanLineTileAmount = 4.0f;public Texture2D nightVisionNoise;public float noiseXSpeed = 100.0f;public float noiseYSpeed = 100.0f;public float distortion = 0.2f;public float scale = 0.8f;private float randomValue = 0.0f;private Material curMaterial;#endregion#region PropertiesMaterial material{get{if(curMaterial == null){curMaterial = new Material(nightVisionShader);curMaterial.hideFlags = HideFlags.HideAndDontSave;}return curMaterial;}}#endregionvoid Start(){if(!SystemInfo.supportsImageEffects){enabled = false;return;}if(!nightVisionShader && !nightVisionShader.isSupported){enabled = false;}}void OnRenderImage(RenderTexture sourceTexture, RenderTexture destTexture){if(nightVisionShader != null){ material.SetFloat("_Contrast", contrast);material.SetFloat("_Brightness", brightness);material.SetColor("_NightVisionColor", nightVisionColor);material.SetFloat("_RandomValue", randomValue);material.SetFloat("_distortion", distortion);material.SetFloat("_scale",scale);if(vignetteTexture){material.SetTexture("_VignetteTex", vignetteTexture);}if(scanLineTexture){material.SetTexture("_ScanLineTex", scanLineTexture);material.SetFloat("_ScanLineTileAmount", scanLineTileAmount);}if(nightVisionNoise){material.SetTexture("_NoiseTex", nightVisionNoise);material.SetFloat("_NoiseXSpeed", noiseXSpeed);material.SetFloat("_NoiseYSpeed", noiseYSpeed);}Graphics.Blit(sourceTexture, destTexture, material);}else{Graphics.Blit(sourceTexture, destTexture);}}void Update(){contrast = Mathf.Clamp(contrast, 0f,4f);brightness = Mathf.Clamp(brightness, 0f, 2f);randomValue = Random.Range(-1f,1f);distortion = Mathf.Clamp(distortion, -1f,1f);scale = Mathf.Clamp(scale, 0f, 3f);}void OnDisable(){if(curMaterial){DestroyImmediate(curMaterial);}}
}
最终调控的面板参数如图:
最终的效果如图:
贴图素材下载
Unity Shader——夜晚视觉屏幕特效(night vision Screen Effect)相关推荐
- 《Unity着色器和屏幕特效》——2.2 进阶的透明效果
本节书摘来自华章计算机<Unity着色器和屏幕特效>一书中的第2章,第2.2节,作者[美]杰米·迪恩(Jamie Dean),译 周翀,张薇,更多章节内容可以访问云栖社区"华章计 ...
- 《Unity着色器和屏幕特效开发秘笈》—— 2.1 引言
本节书摘来自华章出版社<Unity着色器和屏幕特效开发秘笈>一 书中的第2章,第2.1节,作者:(美)Kenny Lammers,更多章节内容可以访问云栖社区"华章计算机&quo ...
- 《Unity着色器和屏幕特效开发秘笈》—— 2.5 法线贴图
本节书摘来自华章出版社<Unity着色器和屏幕特效开发秘笈>一 书中的第2章,第2.5节,作者:(美)Kenny Lammers,更多章节内容可以访问云栖社区"华章计算机&quo ...
- 《Unity着色器和屏幕特效开发秘笈》—— 3.4 创建BlinnPhong高光类型
本节书摘来自华章出版社<Unity着色器和屏幕特效开发秘笈>一 书中的第3章,第3.4节,作者:(美)Kenny Lammers,更多章节内容可以访问云栖社区"华章计算机&quo ...
- 《Unity着色器和屏幕特效开发秘笈(原书第2版)》一2.9 打包和混合纹理
本节书摘来自华章出版社<Unity着色器和屏幕特效开发秘笈(原书第2版)>一书中的第2章,第2.9节,作者 [英]艾伦朱科尼(Alan Zucconi) [美]肯尼斯拉默斯(Kenneth ...
- 《Unity着色器和屏幕特效开发秘笈》—— 1.7 创建渐变纹理来控制漫反射着色...
本节书摘来自华章出版社<Unity着色器和屏幕特效开发秘笈>一 书中的第1章,第1.7节,作者:(美)Kenny Lammers,更多章节内容可以访问云栖社区"华章计算机&quo ...
- 《Unity着色器和屏幕特效开发秘笈》—— 第3章 利用镜面反射让游戏闪耀起来...
本节书摘来自华章出版社<Unity着色器和屏幕特效开发秘笈>一 书中的第3章,第3.1节,作者:(美)Kenny Lammers,更多章节内容可以访问云栖社区"华章计算机&quo ...
- 《Unity着色器和屏幕特效开发秘笈》—— 1.1 引言
本节书摘来自华章出版社<Unity着色器和屏幕特效开发秘笈>一 书中的第1章,第1.1节,作者:(美)Kenny Lammers,更多章节内容可以访问云栖社区"华章计算机&quo ...
- 《Unity着色器和屏幕特效开发秘笈(原书第2版)》——2.6 法线映射
本节书摘来自华章计算机<Unity着色器和屏幕特效开发秘笈(原书第2版)>一书中的第2章,第2.6节,作者 [英]艾伦朱科尼(Alan Zucconi)[美]肯尼斯拉默斯(Kenneth ...
最新文章
- 深入“肠-脑”神经高速通道,揭开“第六感觉”面纱
- mybatis 联查
- 爬虫笔记10Scrapy-框架
- jquery父元素和子元素点击事件传递问题_不可把父元素的事件传递给子元素_事件无限循环传递...
- 在SLS中快速实现异常巡检
- sql语句截断_SQL Server中SQL截断和SQL删除语句之间的区别
- C++学习日记1:VS2015环境下,创建基于对话框的MFC工程
- kindeditor 文件上传在 spring mvc下的使用
- java jre 配置_JRE的安装及环境变量配置
- ZipEntry压缩时中文文件名乱码解决办法
- 2081.09.22 Kuma(非旋treap)
- 关于引用的介绍和使用
- Win10使用Ctrl+Space切换输入法
- C语言编程Amn,amn(cmn和amn的公式)
- 2023年3月华为认证HCIP新增题库(考试编号H12-821)
- 最小费用最大流 【模板】
- 什么表示计算机存储信息的能力以字节为单位,大学计算机基础考试判断.doc
- maya轮廓光材质快速创建插件 下载及教程
- Ubuntu文件查找命令集合
- 2013广东公务员行测答案(三)