本文参考《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)相关推荐

  1. 《Unity着色器和屏幕特效》——2.2 进阶的透明效果

    本节书摘来自华章计算机<Unity着色器和屏幕特效>一书中的第2章,第2.2节,作者[美]杰米·迪恩(Jamie Dean),译 周翀,张薇,更多章节内容可以访问云栖社区"华章计 ...

  2. 《Unity着色器和屏幕特效开发秘笈》—— 2.1 引言

    本节书摘来自华章出版社<Unity着色器和屏幕特效开发秘笈>一 书中的第2章,第2.1节,作者:(美)Kenny Lammers,更多章节内容可以访问云栖社区"华章计算机&quo ...

  3. 《Unity着色器和屏幕特效开发秘笈》—— 2.5 法线贴图

    本节书摘来自华章出版社<Unity着色器和屏幕特效开发秘笈>一 书中的第2章,第2.5节,作者:(美)Kenny Lammers,更多章节内容可以访问云栖社区"华章计算机&quo ...

  4. 《Unity着色器和屏幕特效开发秘笈》—— 3.4 创建BlinnPhong高光类型

    本节书摘来自华章出版社<Unity着色器和屏幕特效开发秘笈>一 书中的第3章,第3.4节,作者:(美)Kenny Lammers,更多章节内容可以访问云栖社区"华章计算机&quo ...

  5. 《Unity着色器和屏幕特效开发秘笈(原书第2版)》一2.9 打包和混合纹理

    本节书摘来自华章出版社<Unity着色器和屏幕特效开发秘笈(原书第2版)>一书中的第2章,第2.9节,作者 [英]艾伦朱科尼(Alan Zucconi) [美]肯尼斯拉默斯(Kenneth ...

  6. 《Unity着色器和屏幕特效开发秘笈》—— 1.7 创建渐变纹理来控制漫反射着色...

    本节书摘来自华章出版社<Unity着色器和屏幕特效开发秘笈>一 书中的第1章,第1.7节,作者:(美)Kenny Lammers,更多章节内容可以访问云栖社区"华章计算机&quo ...

  7. 《Unity着色器和屏幕特效开发秘笈》—— 第3章 利用镜面反射让游戏闪耀起来...

    本节书摘来自华章出版社<Unity着色器和屏幕特效开发秘笈>一 书中的第3章,第3.1节,作者:(美)Kenny Lammers,更多章节内容可以访问云栖社区"华章计算机&quo ...

  8. 《Unity着色器和屏幕特效开发秘笈》—— 1.1 引言

    本节书摘来自华章出版社<Unity着色器和屏幕特效开发秘笈>一 书中的第1章,第1.1节,作者:(美)Kenny Lammers,更多章节内容可以访问云栖社区"华章计算机&quo ...

  9. 《Unity着色器和屏幕特效开发秘笈(原书第2版)》——2.6 法线映射

    本节书摘来自华章计算机<Unity着色器和屏幕特效开发秘笈(原书第2版)>一书中的第2章,第2.6节,作者 [英]艾伦朱科尼(Alan Zucconi)[美]肯尼斯拉默斯(Kenneth ...

最新文章

  1. 深入“肠-脑”神经高速通道,揭开“第六感觉”面纱
  2. mybatis 联查
  3. 爬虫笔记10Scrapy-框架
  4. jquery父元素和子元素点击事件传递问题_不可把父元素的事件传递给子元素_事件无限循环传递...
  5. 在SLS中快速实现异常巡检
  6. sql语句截断_SQL Server中SQL截断和SQL删除语句之间的区别
  7. C++学习日记1:VS2015环境下,创建基于对话框的MFC工程
  8. kindeditor 文件上传在 spring mvc下的使用
  9. java jre 配置_JRE的安装及环境变量配置
  10. ZipEntry压缩时中文文件名乱码解决办法
  11. 2081.09.22 Kuma(非旋treap)
  12. 关于引用的介绍和使用
  13. Win10使用Ctrl+Space切换输入法
  14. C语言编程Amn,amn(cmn和amn的公式)
  15. 2023年3月华为认证HCIP新增题库(考试编号H12-821)
  16. 最小费用最大流 【模板】
  17. 什么表示计算机存储信息的能力以字节为单位,大学计算机基础考试判断.doc
  18. maya轮廓光材质快速创建插件 下载及教程
  19. Ubuntu文件查找命令集合
  20. 2013广东公务员行测答案(三)

热门文章

  1. win10企业版2016长期服务版激活
  2. 票据识别android代码,深度学习开源ocr识别票据
  3. Python开发自定义Web框架
  4. BaoCms短信发送失败问题解答
  5. 计算机的aero界面是一种,win7系统Aero特效是什么
  6. 学会BLDC电机控制必须搞懂的状态
  7. 通过S7协议或opc协议远程连接西门子模拟器
  8. 普通人在互联网上还有哪些赚钱的机会?
  9. 193页5万字智慧物流园解决方案
  10. 提高php性能的介意,ThinkPHP5提升性能的办法_浙江PHP博客