前言

公司需要做个建筑结构演示。看了产品经理的方案感觉实在太low,真的看不下去了。这样下去客户也不会满意又要耗费资源去磨这个事。于是我就极不情愿的修改了方案做了这个玩意。
我国产品经理真的质量堪忧,如果没有抄袭的目标就一点idea没有。他们真正的价值大概只有牧羊犬了吧。听听别人的经验好像能死一样

  • 先贴出最终笑狗图~

实现思路

其实不少科幻或动作电影中都有类似特效,实现起来并不复杂,只需要将三个小特效结合起来就能实现:

  1. 建筑结构透视
  2. 毛玻璃特效
  3. 贴近显示
1 结构透视的shader

其实就是半透明嘛,根据需求调整cull的面。这个过于初级我就不贴了。

2 毛玻璃

毛玻璃是根据法线做颜色变化
之前我有写过相关的文章,请无情的点击这里https://blog.csdn.net/lengyoumo/article/details/105343400

3 贴近显示

像素远近是根据像素和摄像机的距离来做适当变化。
废话不多说直接上shader,各处都有详细注释

Shader "Custom/FadeDistance" {Properties{_Inverse("Inverse", int) = 0  /// 如果不等于0 就使用相反的效果_MainTex("Texture", 2D) = "white" { }  // 贴图_MainColor("MainColor", Color) = (1,1,1,1)  //主颜色_FadeNear("fade near distance", float) = 10  //贴近显示的最近距离_FadeFar("fade far", float) = 20 // 贴近显示的最远距离_FadeRate("Fade Rate", Range(0.001, 2)) = 0.1  // 整体受影响比例}SubShader{// 设置显示类型和队列,由于需要使用像素透明度的fade 所以需要在transparent队列Tags { "Queue" = "Transparent" "RenderType" = "Transparent"}// 设置剔除面。至少在我这个例子中,cull back的效果好一点,cull off 显得有点杂。Cull back// 透明混合方式。  最普通的处理方式,不用多说Blend SrcAlpha OneMinusSrcAlphapass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"sampler2D _MainTex;float4 _MainTex_ST;struct v2f {float4  pos : SV_POSITION;float2  uv : TEXCOORD0;float fade : TEXCOORD1;};int _Inverse;float4 _MainColor;float _FadeRate;float _FadeNear;float _FadeFar;// 顶点着色器v2f vert(appdata_base v){v2f o;// 将顶点从模型空间转换到裁剪空间o.pos = UnityObjectToClipPos(v.vertex);// 获取正确的uv坐标o.uv = TRANSFORM_TEX(v.texcoord,_MainTex);// 将坐标转换到观察空间float4 posView = mul(UNITY_MATRIX_MV,v.vertex);// 物体与镜头距离float distance = length(posView);// 是否翻转fade方向if(_Inverse==0){// 靠近消失o.fade = saturate((distance - _FadeNear) / (_FadeFar - _FadeNear)) * _FadeRate;}else{// 远离消失o.fade = 1 - saturate((distance + _FadeNear) / (_FadeFar + _FadeNear));}return o;}// 片元着色器float4 frag(v2f i) : COLOR{// 合并贴图、主颜色、uv取得像素的颜色信息float4 col = tex2D(_MainTex,i.uv) * _MainColor;// 计算镜头fade 获取最终像素颜色透明度return float4(col.rgb, col.a * i.fade);}ENDCG}}
结合1,2,3得到最终的shader代码
Shader "Custom/FadeInOut" {Properties{_Inverse("Inverse", int) = 0_MainTex("Texture", 2D) = "white" { }_MainColor("MainColor", Color) = (1,1,1,1)_FadeNear("fade near distance", float) = 10_FadeFar("fade far", float) = 20_FadeRate("Fade Rate", Range(0.001, 2)) = 0.1_AlphaValue("_AlphaValue",Range(0.01,1)) = 1}SubShader{Tags { "Queue" = "Transparent" "RenderType" = "Transparent"}Cull backZWrite OffBlend SrcAlpha OneMinusSrcAlphapass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"sampler2D _MainTex;float4 _MainTex_ST;struct v2f {float4  pos : SV_POSITION;float2  uv : TEXCOORD0;float fade : TEXCOORD1;float3 viewDir:TEXCOORD2;float3 worldNormal:NORMAL;  };float _AlphaValue;int _Inverse;float4 _MainColor;float _FadeRate;float _FadeNear;float _FadeFar;v2f vert(appdata_base v){v2f o;o.worldNormal =  UnityObjectToWorldNormal(v.normal);float4 worldPos = mul(unity_ObjectToWorld, v.vertex);o.viewDir = normalize(UnityWorldSpaceViewDir(worldPos));o.pos = UnityObjectToClipPos(v.vertex);o.uv = TRANSFORM_TEX(v.texcoord,_MainTex);float4 posView = mul(UNITY_MATRIX_MV,v.vertex);float distance = length(posView);if(_Inverse==0){o.fade = saturate((distance - _FadeNear) / (_FadeFar - _FadeNear)) * _FadeRate;}else{o.fade = 1 - saturate((distance + _FadeNear) / (_FadeFar + _FadeNear));}return o;}float4 frag(v2f i) : COLOR{float4 col = tex2D(_MainTex,i.uv)* _MainColor;half normalAngle = 1 - abs(dot(i.worldNormal, i.viewDir));return float4(col.rgb, col.a * i.fade)  * normalAngle;}ENDCG}}
}

请留下你的赞再走~~~

unity shaderlab特效之 建筑结构科技透视效果 贴近消失远离显示相关推荐

  1. Unity ShaderLab特效教程 适用于贴图、sprite和ugui的2d着色器实例 代码+详解注释 【锐化效果】

    如果代码中有什么不清楚请查看以下基础知识 Shader基础知识 unity3d 中 七种坐标知识详解 锐化效果 笑狗图 代码 Shader "Custom/BlurBox" {Pr ...

  2. Unity ShaderLab特效教程 适用于贴图、sprite和ugui的2d着色器实例 代码+详解注释 【将贴图转为马赛克效果】

    如果代码中有什么不清楚请查看以下基础知识 Shader基础知识 unity3d 中 七种坐标知识详解 一个将贴图转为马赛克效果的shader: 万恶的马赛克其实也是一种艺术风格,如果你在开发2d游戏不 ...

  3. Unity ShaderLab特效教程 适用于贴图、sprite和ugui的2d着色器实例 代码+详解注释 【2d流光边框效果】

    如果代码中有什么不清楚请查看以下基础知识 Shader基础知识 unity3d 中 七种坐标知识详解 2d流光边框效果 可以自定义边框的高和宽,流光尺寸和速度以及中心点 笑狗图: 代码 Shader ...

  4. Unity ShaderLab特效教程 适用于sprite和ugui的2d着色器实例 代码+详解注释 【波浪起伏的扭曲动画效果】

    如果代码中有什么不清楚请查看以下基础知识 Shader基础知识 unity3d 中 七种坐标知识详解 适用于sprite和ugui的波浪动画shader Shader "Custom/wav ...

  5. Unity ShaderLab学习总结

    http://www.jianshu.com/p/7b9498e58659 Unity ShaderLab学习总结 作者 DonaldW 关注 2014.07.20 17:17* 字数 4891 阅读 ...

  6. Unity项目如何组织目录结构

    前言 组织好项目的目录结构,是维护项目的很重要的一个点,我们学习别人源码,了解别人的设计思路都是从目录结构开始,一个清晰的目录结构,对项目开发维护,项目管理来说非常的重要,目录维护的好,大家在一起工作 ...

  7. Unity项目如何组织目录结构,有几个习惯与你相同

    前言 组织好项目的目录结构,是维护项目的很重要的一个点,我们学习别人源码,了解别人的设计思路都是从目录结构开始,一个清晰的目录结构,对项目开发维护,项目管理来说非常的重要,目录维护的好,大家在一起工作 ...

  8. 【渝粤教育】国家开放大学2018年春季 建筑结构基础 参考试题

    科目编号:8 -6-6- 6 座位号 2017-2018学年度第二学期期末考试 建筑结构基础 试题 2018年 7 月 一.单选题(本大题共10小题,每小题4分,共计40分) (★请考生务必将答案填入 ...

  9. 说说中国的图书出版业者-读《小学奥数举一反三(5年级A版)》和《2010注册建筑师建筑结构考试强化模拟试题集》有感...

    最近看了两本书,对中国当下的图书出版业者有了些认识. 图书1:<小学奥数举一反三(5年级A版)> (全国优秀畅销书) 作者:蒋顺.李济元,陕西人民教育出版社 ISBN: 978754198 ...

最新文章

  1. 3.IT-解决方案-3-Backup-Sql
  2. ubuntu中安装kDevelop
  3. [原创]java获取word里面的文本
  4. [css] 你们团队中css的class命名采用的是什么方式呢?下划线还是横线还是驼峰?
  5. PresentViewController切换界面
  6. 优秀的前端工程师任务目标和实践
  7. 抽象类实现接口,子类继承抽象类,这三个之间的关系?
  8. 新疆财大计算机科学,新疆财经大学计算机科学与工程学院学生参加了多项专业赛事...
  9. 【基于JXTA的P2P应用开发】
  10. 《码出高效---java》PDF,有学习java的小伙伴可以看看,阿里巴巴出版的书籍
  11. wechart image标签
  12. 泰迪杯数据挖掘挑战赛—机器学习(三)
  13. SQL Server 2008 R2的完全卸载
  14. Adaptive Supply Chain: Demand–Supply Synchronization Using Deep Reinforcement Learning翻译
  15. 利用LM317的LED恒流源电路图
  16. 逻辑强化(03)真假推理 知识练习
  17. mysql 引擎 切换_Mysql表引擎的切换
  18. 用于针对DNN中后门攻击的蒸馏对策和中毒数据的去除
  19. 计算机系统保护怎么打开,如何开启系统还原 开启系统还原方法有哪些
  20. 有限差分法-一维波动方程及其Matlab程序实现

热门文章

  1. 最短时间搞定算法:字节跳动Android岗算法题考前突击宝典
  2. python多大孩子可以学_少儿python教材适合多大的孩子
  3. 2019年赣州市赛任务四利用python脚本进行web渗透测试
  4. FOFA Java程序集成fofa
  5. 如何编辑受保护的PDF文件
  6. 如何使用NumPy计算欧几里得距离?
  7. Oracle数据库:oracle启动,oracle客户端工具plsql安装教程和使用方法
  8. 数字孪生技术:WebGL vs. 游戏引擎
  9. SoftTriple Loss: Deep Metric Learning Without Triplet Sampling
  10. Goland快捷键设置记录