时间:2014-12-23 来源:

unity3d实现夜视仪效果 【架构设计】

说起夜视仪承接网页制作,肯定都会想到屏幕上发绿的游戏特效 夜视仪效果经常用在FPS(第一人称射击)游戏中,承接网页制作 i.uv.y * _ScanLineTileAmount); 获取扫描线贴图像素信息 scanLineTex = tex2D(_ScanLineTileTex,i.uv.y + (_Time.x * _NoiseYSpeed)); 获取噪波贴图像素信息 fixed4 noiseTex = tex2D(_NoiseTex, 0.587, renderTex.rgb); lum += _Brightness;//加上可自控的亮度 使饱和度调为零承接网页制作,变成黑白效果,承接网页制作再与夜视镜颜色混合 fixed4 finalColor = (lum *2) + _NightVisionColor; 再与三种贴图颜色混合得到最终颜色值 finalColor = pow(finalColor, RenderTexture destTexture) { if(nightVisionShader != null) { material.SetFloat("_Contrast", brightness); material.SetColor("_NightVisionColor", randomValue); material.SetFloat("_distortion",scale); if(vignetteTexture) { material.SetTexture("_VignetteTex", scanLineTexture); material.SetFloat("_ScanLineTileAmount", nightVisionNoise); material.SetFloat("_NoiseXSpeed", noiseYSpeed); } Graphics.Blit(sourceTexture, material); } else { Graphics.Blit(sourceTexture, destTexture); } }</span> 一切ok之后,web前端制作在脚本调好各种值之后 让我们来看看效果 立马FPS了的感觉= =;

                                                                                                                                               ------------- by wolf96

#pragma fragmentoption ARB_precision_hint_fastest 

感觉还不错

先建立一个shader 先浏览一下变量: _ScanLineTileTex; 扫描线效果的贴图     噪波贴图: 基于两种颜色或材质的交互创建曲面的随机扰动      通过对两种颜色随机混合承接网页制作,用在噪波贴图随机uv扰动     _distortion;桶形畸变的扭曲程度          _scale;屏幕放缩比例              _ScanLineTileAmount;扫描线数量(不是确切数量web切图报价, 2D) = "white" {} _Contrast("Contrast", 4)) = 2 _Brightness ("Brightness", 2)) = 1 _NightVisionColor ("Night Vision Color", 1, 1) _RandomValue ("RandomValue", Float) = 0.2 _scale("scale", 2D) = "white" {} _ScanLineTileTex("Scan Line Tile Texture", Float) = 4.0 _NoiseTex("Noise Texture", Float) = 100.0 _NoiseYSpeed("Noise Y Speed", Float) = 100.0 } SubSha

我们还要声明一下:

本次shader需要用到三种贴图: 1.晕影贴图: 给人一种正带着夜视仪的感觉 2.噪波贴图: 产生雪花状噪波 3.扫描线贴图: 增加夜视仪的真实感

动态建立一个纹理

#pragma fragment frag     片元着色函数为frag

依旧需要 OnRenderImage()这个函数抓取摄像机的图像 然后我们把各种变量传入shader 通过 Graphics.Blit() 这个函数 可以经过shader的变换处理在输出到我们的显示器中

c#:

接下来看看放入摄像头中的c#脚本 建立一个c#脚本 先赋予变量,div前端切图与上面的shader的变量都差不多web切图报价, RenderTexture destTexture) { if(nightVisionShader != null) { material.SetFloat("_Contrast", brightness); material.SetColor("_NightVisionColor", randomValue); material.SetFloat("_distortion",scale); if(vignetteTexture) { material.SetTexture("_VignetteTex", scanLineTexture); material.SetFloat("_ScanLineTileAmount", nightVisionNoise); material.SetFloat("_NoiseXSpeed", noiseYSpeed); } Graphics.Blit(sourceTexture, material); } else { Graphics.Blit(sourceTexture, 0f, 0f,1f); distortion = Mathf.Clamp(distortion,1f); scale = Mathf.Clamp(scale, 3f); } void OnDisable() { if(curMaterial) { DestroyImmediate(curMaterial); } } }</span> shader:

#pragma vertex vert_img    传入的像素信息为vert_img

<span style="font-size:12px;"> #region Properties Material material { get { if(curMaterial == null) { curMaterial = new Material(nightVisionShader); curMaterial.hideFlags = HideFlags.HideAndDontSave; } return curMaterial; } } #endregion</span>

_NoiseXSpeed;噪波x方向速度 _NoiseYSpeed;噪波y方向速度          _NightVisionColor;夜视仪颜色

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; }

#pragma vertex vert_img #pragma fragment frag #pragma fragmentoption ARB_precision_hint_fastest 镜头桶形失真校正算法,web前端制作产生桶形畸变效果 将矩形物体拍摄成四边向外凸形成桶形的影像承接网页制作,就称镜头具有负畸变,div前端切图或桶形畸变 一会需要用此对uv进行变换 传入uv值float2 coord 传出扭曲的uv值 产生了镜头的感觉web切图报价, distortedUV); fixed4 vignetteTex = tex2D(_VignetteTex, i.uv.y * _ScanLineTileAmount);//_ScanLineTileAmount大小无限制 fixed4 scanLineTex = tex2D(_ScanLineTileTex,i.uv.y + (_Time.x * _NoiseYSpeed)); fixed4 noiseTex = tex2D(_NoiseTex, 0.587, renderTex.rgb); lum += _Brightness;//加上可自控的亮度 //饱和度调为零web切图报价,变成黑白效果,网站div+css再与夜视镜颜色混合 fixed4 finalColor = (lum *2) + _NightVisionColor;// finalColor = pow(finalColor, 2D) = "white" {} _Contrast("Contrast", 4)) = 2 _Brightness ("Brightness", 2)) = 1 _NightVisionColor ("Night Vision Color", 1, 1) _RandomValue ("RandomValue", Float) = 0.2 _scale("scale", 2D) = "white" {} _ScanLineTileTex("Scan Line Tile Texture", Float) = 4.0 _NoiseTex("Noise Texture", Float) = 100.0 _NoiseYSpeed("Noise Y Speed", Float) = 100.0 } SubShader { Pass { Tags { "RenderType"="Opaque" } LOD 200 CGPROGRAM #pragma vertex vert_img #pragma fragment frag #pragma fragmentoption ARB_precision_hint_fastest//使用这个标志可以fp16的对像素进行运算 #include "UnityCG.cginc" uniform sampler2D _MainTex; uniform sampler2D _ScanLineTileTex;//扫描线效果的贴图 //噪波贴图基于两种颜色或材质的交互创建曲面的随机扰动 //通过对两种颜色随机混合,web切图报价生成噪波效果 uniform sampler2D _NoiseTex;//噪波贴图 uniform sampler2D _VignetteTex;//装饰图案符合w3c标准,小插图,手机html制作此处为晕影贴图 fixed _Contrast;//对比度 fixed _Brightness;//亮度 fixed _RandomValue;//随机值网页外包接活, 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// 片元着色函数 { half2 distortedUV = barrelDistortion(i.uv); //桶形畸变uv fixed4 renderTex = tex2D(_MainTex, distortedUV); //晕影贴图 //扫描线uv 可控扫描线数量 half2 scanLinesUV = half2(i.uv.x * _ScanLineTileAmount, scanLinesUV); //噪波贴图uv half2 noiseUV = half2(i.uv.x + (_RandomValue * _SinTime.z * _NoiseXSpeed), noiseUV); //lum = luminosity 亮度 fixed lum = dot (fixed3(0.299, 0.114), renderTex.rgb); lum += _Brightness;//加上可自控的亮度 //饱和度调为零,网页外包接活变成黑白效果web前端制作, _Contrast);//对比度 finalColor *= vignetteTex;//与晕影贴图混合 finalColor *= scanLineTex * noiseTex; return finalColor; } ENDCG } } FallBack "Diffuse" } </span>

片元着色选项.ARB_precision_hint_fastest使用这个标志可以fp16的对像素进行运算承接网页制作,加快渲染

以下全部代码:

点击次数:13558
作者:
web前端行业资讯
Web new NewsList
谷歌安全博客披露“英特尔内核漏洞”更多细节 ,,2018年01月04日Postgres10开发者新特性 ,,2017年12月28日阿里巴巴、狗尾草、苏大联合论文:基于对抗学习的众包标注用于中文命名实体识别 ,,2017年12月28日柯洁的2017:20岁,与AI斗与人类斗,其乐无穷 ,,2017年12月28日如果机器人拥有痛觉,这个世界会有哪些不一样? ,,2017年12月28日苹果经典电脑Lisa源代码修复完成将于2018年开源 ,,2017年12月28日腾讯浏览指数发布年终榜单2017年人们都关注哪些AI话题? ,,2017年12月28日除了发现开普勒90,NASA还靠AI做了什么? ,,2017年12月28日柯洁宣布:明年4月,将再次与围棋AI交锋 ,,2017年12月28日百度无人车美国首秀CES将发布Apollo2.0 ,,2017年12月28日这四种技术发展趋势将在2018年改变世界 ,,2017年12月28日2017:谷歌DeepMind团队的年度回顾 ,,2017年12月28日封杀这个公式,AI智商将为零 ,,2017年12月28日微软AI高管:要让所有人、所有机构都用上人工智能 ,,2017年12月28日为什么Linux桌面年一直未到来 ,,2017年12月28日AppleLisa操作系统将开源 ,,2017年12月28日2018年9大技术趋势预测 ,,2017年12月28日谷歌研究院发布NIMA:能评价图像有多美,还能让图像变得更美 ,,2017年12月28日苹果为2019年iPhone开发大容量电池新技术 ,,2017年12月28日谷歌发布Tacotron2:能更简单地训练AI学习演讲 ,,2017年12月21日TensorFlow漏洞爆发背后:关于AI安全我们的傻与天真 ,,2017年12月21日Android端Edge浏览器新版发布:常规性能优化和BUG修复 ,,2017年12月21日三星开发出全球最小的DRAM芯片技术领先优势扩大 ,,2017年12月21日腾讯绝艺AI下一步将学习AlphaGozero自对弈训练 ,,2017年12月21日Facebook社交VR应用Spaces扩大覆盖面:入驻HTCVive ,,2017年12月21日设计图曝光:三星双屏折叠手机原来是这样的 ,,2017年12月21日微信支付和支付宝已成为世界移动支付的"老师" ,,2017年12月21日新专利表明FaceID未来有望装备在iPad、MacBook和iMac等设备 ,,2017年12月21日首批九个建议加入EE4J的项目 ,,2017年12月21日这就是SurfacePhone?微软可折叠手机概念图曝光 ,,2017年12月21日objective-c快速入门教程(四) 【编程语言】2014年12月25日java(25)-IO操作 【编程语言】2015年03月24日oracle获取上一旬的开始时间和结束时间的实现函数2014年01月30日【VMware】VMwarelinux虚拟机无法获取uuid 【编程语言】2015年08月26日博客百万浏览量之后的扯淡【Web前端】2015年04月01日POJ1007DNASorting 【研发管理】2015年01月09日linux源码编译安装OpenCV【移动开发】2014年11月20日VimworkingnativelyonAndroidphones【编程语言】2015年01月19日Android获取应用自身相关签名信息 【Web前端】2015年08月27日制作真实的景深效果2014年01月28日NHibernate之旅(17):探索NHibernate中使用存储过程(下)【综合】2015年08月16日游戏引擎架构读书心得(一) 【编程语言】2015年07月24日hdu3400Linebelt【编程语言】2015年03月18日解题报告之SOJ1678Mountains 【架构设计】2015年05月12日Linux网络编程——原始套接字能干什么?2015年03月27日ApacheThriftwithJavaQuickstart(thrift入门及Java实例) 【编程语言】2015年02月11日数塔【编程语言】2014年12月18日JAVA多态学习2 【编程语言】2015年07月08日N-QueensII--leetcode 【移动开发】2015年02月09日深入浅出设计模式------AbstractFactory(抽象工厂) 【综合】2015年01月30日Python点滴II 【编程语言】2014年11月04日数据结构之顺序表2015年04月17日FireBreath设置SDL窗体停靠在网页上面【编程语言】2014年11月24日htmlDOMdocument对象getElementByTagName()方法【Web前端】2015年01月19日【LeetCode】ContainsDuplicateII 【综合】2015年06月01日MapReduce编程之倒排索引 【架构设计】2015年06月17日ftp命令行操作常用命令【编程语言】2014年11月12日HDU2061Treasurethenewstart,freshmen!【水题】【编程语言】2015年01月12日IOS控件UITextView实现placeholder效果和解决UITableView键盘遮挡【移动开发】2015年07月07日Google官方提供的有用的Android范例程序,值得学习的新技术 【架构设计】2015年04月29日
我们保证
We guarantee
> psd效果文件手工切图,保证图片效果最好体积最小利于传输
> 100%手写的HTML(DIV+CSS)编码,绝对符合W3C标准
> 代码精简、css沉余量小、搜索引擎扫描迅速,网页打开快捷
> 应用Css Sprite能够减少HTTP请求数,提高网页性能
> 跨浏览器兼容(IE6、7、8、9,Firefox火狐,Chrome谷歌)