今天我们来实现下光晕效果

主要是利用顶点的view direction 和 normal direction 的点积 来做为光晕颜色的alpha值,越靠近边缘的顶点,abs(dot(viewDirection, normalDirection) )的值越小, 将 float opacity = pow(strength, _Strength); 作为颜色的alpha值,那么越靠近边缘就越透明。

view direction : 世界空间中 顶点到 相机的向量

normal direction: 世界空间中 顶点法线向量

Shader 代码:

Shader "Custom/Glow" {Properties {_Color ("Color", Color) = (1,0.6,0,1)_GlowColor("Glow Color", Color) = (1,1,0,1)_Strength("Glow Strength", Range(5.0, 1.0)) = 2.0_GlowRange("Glow Range", Range(0.1,1)) = 0.6}SubShader {Pass {Tags { "LightMode"="ForwardBase" }CGPROGRAM#pragma vertex vert#pragma fragment fragfloat4 _Color;float4 vert(float4 vertexPos : POSITION) : SV_POSITION {return UnityObjectToClipPos(vertexPos);}float4 frag(void) : COLOR {return _Color;}ENDCG}Pass {Tags { "LightMode"="ForwardBase" "Queue"="Transparent" "RenderType"="Transparent" }// Cull FrontZWrite OffBlend SrcAlpha OneMinusSrcAlphaCGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"float4 _GlowColor;float _Strength;float _GlowRange;struct a2v {float4 vertex : POSITION;float4 normal : NORMAL;};struct v2f {float4 position : SV_POSITION;float4 col : COLOR;};v2f vert(a2v a) {v2f o;float3 normalDirection = normalize(UnityObjectToWorldNormal(a.normal));float3 worldPos = mul(unity_ObjectToWorld, a.vertex).xyz;float3 viewDirection = normalize(UnityWorldSpaceViewDir(worldPos));float4 pos = a.vertex + (a.normal * _GlowRange);o.position = UnityObjectToClipPos(pos);float strength = abs(dot(viewDirection, normalDirection));float opacity = pow(strength, _Strength);float4 col = float4(_GlowColor.xyz, opacity);o.col = col;return o;}float4 frag(v2f i) : COLOR {return i.col;}ENDCG}}FallBack "Diffuse"
}

第一个pass 直接渲染所有顶点的颜色为_Color设置的值。
第二个pass 通过 float4 pos = a.vertex + (a.normal * _GlowRange); 将顶点沿着法线方向向外延伸。然后渲染_GlowColor设置的颜色。通过顶点法线和顶点view direction 的点乘来达到越往边缘约淡的效果。
Unity完整工程源码:请搜索微信公众号UnityAsk,或者 加QQ群:891920228 获取

Unity3D Shader之光晕Glow相关推荐

  1. 【浅墨Unity3D Shader编程】之一 夏威夷篇:游戏场景的创建 第一个Shader的书写

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/40723789 作者:毛星云(浅墨) ...

  2. 【游戏渲染】【译】Unity3D Shader 新手教程(1/6)

    http://gad.qq.com/article/detail/7175490 该文章来自用户转载 点击阅读原文 刚开始接触Unity3D Shader编程时,你会发现有关shader的文档相当散, ...

  3. Unity3D Shader 新手教程(1/6)

    刚开始接触Unity3D Shader编程时,你会发现有关shader的文档相当散,这也造成初学者对Unity3D Shader编程望而却步.该系列教程的第一篇文章(译者注:即本文,后续还有5篇文章) ...

  4. 【译】Unity3D Shader 新手教程(1/6)

    刚开始接触Unity3D Shader编程时,你会发现有关shader的文档相当散,这也造成初学者对Unity3D Shader编程望而却步.该系列教程的第一篇文章(译者注:即本文,后续还有5篇文章) ...

  5. 【Unity3D Shader编程】之一 夏威夷篇:游戏场景的创建 第一个Shader的书写

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/40723789 作者:毛星云(浅墨) ...

  6. 【浅墨Unity3D Shader编程】之中的一个 夏威夷篇:游戏场景的创建 amp; 第一个Shader的书写...

    本系列文章由@浅墨_毛星云 出品.转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/40723789 作者:毛星云(浅墨) ...

  7. 【Unity3D Shader编程】之一 夏威夷篇 游戏场景的创建 第一个Shader的书写

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...

  8. 【浅墨Unity3D Shader编程】之一 夏威夷篇:游戏场景的创建 第一个Shader的书写...

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/40723789 作者:毛星云(浅墨) ...

  9. Unity3D Shader系列之全息投影

    1 效果展示 2 实现原理 全息投影其实是几个效果的叠加:①半透明效果②上下条纹的扫描效果③边缘光效果④模拟信号传输不稳定的顶点偏移效果. 咱们依次来看看这几个效果背后的原理. ①半透明效果 在Uni ...

最新文章

  1. 将子目录分离(移动)到单独的Git存储库中
  2. APM - 零侵入监控Service服务
  3. olcd12864的u8g2库_U8G2 软件包单色1.3寸OLED屏驱动在 RT-Thread 移植问题
  4. 花书+吴恩达深度学习(十五)序列模型之循环神经网络 RNN
  5. IIS7程序发布后 之 报图表处理程序配置 [c:\TempImageFiles\] 中的临时目录无效
  6. Atitit 时间的展示格式与存储格式 目录 1.1. 赛事时间的格式起源 1 1.1.1. 六十[编辑] 1 1.2. 1h 12m 23s 模式 (可读性最好 2 1.3. 日常模式 1:45:
  7. GJB9001-2017质量管理体系
  8. 从0到1打造自己的网络电话系统
  9. html手机端最小字体,移动端最小字体限制测试
  10. Infoq专访:Maven中文用户组创始人许晓斌
  11. 机器学习实战——xgboost股票close预测
  12. 数学建模——相关系数
  13. unity广告投放技巧_是否需要快速投放动画广告系列? 只要在Unity中做到
  14. 商用字体网站,再也不用怕侵权
  15. SAP SM30隐藏部分字段以及自动带出某些值
  16. openCV 自学笔记
  17. HDU 1043 Eight(八数码第七境界|A*+哈希+曼哈顿距离)
  18. PPT技能速成班学习笔记
  19. 经常用的命令一(linux)
  20. 关于我求是不是质数的一个错误,输入9判断是质数的原因

热门文章

  1. IDEA 2018注册码(激活码)
  2. SOLID Design Principle
  3. 如何分析Android的Log
  4. 删除chrome中特定的搜索记录
  5. 基于阿里云物联网平台,用20元体验物联网开发( 自制 Arduino 环境监测仪)——实践类
  6. C# 数组转换成以指定字符连接的字符串
  7. Java解压RAR文件的几种方式
  8. 【youcans 的图像处理学习课】1. 安装与环境配置
  9. SNN介绍-来自脉冲神经网络原理
  10. c语言fscanf参数,C语言关于fscanf的有关问题