先上一张图片,看下实际效果
1:黑色为模型主color
2:白色为内发光,轮廓内边缘光
3:红色为外发光,轮廓外边缘光

Shader "Unlit/边缘光"
{Properties{_MainColor ("MainColor", Color) = (0,0,0,1) //模型主颜色_InSideRimColor ("InSideRimColor", Color) = (1,1,1,1)//内边缘光颜色_InSideRimPower("InSideRimPower", Range(0.0,5)) = 0 //边缘光强度  ,这个值可以控制菲涅尔影响范围的大小,这个值越大,效果上越边缘化_InSideRimIntensity("InSideRimIntensity", Range(0.0, 10)) = 0  //边缘光强度系数 这个值是反射的强度, 值越大,返回的强度越大,导致边缘的颜色不那么明显  _OutSideRimColor ("OutSideRimColor", Color) = (1,1,1,1)//外边缘光颜色_OutSideRimSize("OutSideRimSize", Float) = 0 //因为外边缘光,需要把模型外扩,这是外扩大小_OutSideRimPower("OutSideRimPower", Range(0.0,5)) = 0 //边缘光强度  ,这个值可以控制菲涅尔影响范围的大小,这个值越大,效果上越边缘化_OutSideRimIntensity("OutSideRimIntensity", Range(0.0, 10)) = 0  //边缘光强度系数 这个值是反射的强度, 值越大,返回的强度越大,导致边缘的颜色不那么明显  }SubShader{Tags { "RenderType"="Opaque" }LOD 100Pass  //内边缘光pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"#include "Lighting.cginc"uniform float4 _MainColor;uniform float4 _InSideRimColor;uniform float  _InSideRimPower;uniform float _InSideRimIntensity;  struct appdata{float4 vertex : POSITION;float2 uv : TEXCOORD0;float3 normal : NORMAL;float4 tangent : TANGENT;};struct v2f{float2 uv : TEXCOORD0;float3 normal : TEXCOORD1;float4 vertex : SV_POSITION;float4 vertexWorld : TEXCOORD2;};v2f vert (appdata v){v2f o;o.normal = mul(unity_ObjectToWorld, float4(v.normal,0)).xyz;o.vertex = UnityObjectToClipPos(v.vertex);o.vertexWorld = mul(unity_ObjectToWorld, v.vertex);o.uv = v.uv;return o;}fixed4 frag (v2f i) : SV_Target{i.normal = normalize(i.normal);//下面计算方式套用菲涅尔计算float3 worldViewDir = normalize(_WorldSpaceCameraPos.xyz - i.vertexWorld.xyz);//获取单位视角方向   相机世界空间位置减去顶点世界空间位置half NdotV = max(0, dot(i.normal, worldViewDir));//计算法线方向和视角方向点积,约靠近边缘夹角越大,值约小,那就是会越在圆球中间约亮,越边缘约暗NdotV = 1.0-NdotV;//这里需求是越边缘约亮,所以需要反一下,这里用1 减下float fresnel =pow(NdotV,_InSideRimPower)*_InSideRimIntensity;//使用上面的属性参数,这里不多说float3  Emissive=_InSideRimColor.rgb*fresnel; //配置上属性里面的内边缘光颜色return _MainColor+float4(Emissive,1);//最后加在本体主颜色就即可}ENDCG}Pass  //外边缘光pass{Cull Front   //需要正面剔除,否则模型主pass渲染会看不到Blend SrcAlpha One // 需要设置成透明叠加CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"#include "Lighting.cginc"uniform float4 _OutSideRimColor;uniform float  _OutSideRimSize;uniform float  _OutSideRimPower;uniform float  _OutSideRimIntensity;  struct appdata{float4 vertex : POSITION;float2 uv : TEXCOORD0;float3 normal : NORMAL;float4 tangent : TANGENT;};struct v2f{float2 uv : TEXCOORD0;float3 normal : TEXCOORD1;float4 vertex : SV_POSITION;float4 vertexWorld : TEXCOORD2;};v2f vert (appdata v){v2f o;o.normal = mul(unity_ObjectToWorld, float4(v.normal,0)).xyz;v.vertex.xyz += v.normal*_OutSideRimSize;  //顶点进行外扩o.vertex = UnityObjectToClipPos(v.vertex);o.vertexWorld = mul(unity_ObjectToWorld, v.vertex);o.uv = v.uv;return o;}fixed4 frag (v2f i) : SV_Target{i.normal = normalize(i.normal);//**下面计算方式套用菲涅尔计算区别在下面2点**//float3 worldViewDir = normalize(_WorldSpaceCameraPos.xyz - i.vertexWorld.xyz);float3 worldViewDir = normalize(i.vertexWorld.xyz-_WorldSpaceCameraPos.xyz );//**区别1**:因为顶点外扩,法线不变, 这里需要反过来,顶点世界空间位置减去相机世界空间位置half NdotV =  dot(i.normal, worldViewDir);//NdotV = 1.0-NdotV;//**区别2**:因为需求是发光内强外弱,在模型外扩之后,这里就不需要反了float fresnel =pow(saturate(NdotV),_OutSideRimPower)*_OutSideRimIntensity;//配置上属性里面的外边缘光颜色return float4(_OutSideRimColor.rgb,fresnel);//这里最终计算的值,只需要用来处理返回颜色的Alpha透明度}ENDCG}}
}


对比上面图片, 可以设置,光源在左右,还上下,代码如下, 多加一行,fresnel*=i.normal.x; (左右)或者fresnel*=i.normal.y;(上下)即可

             i.normal = normalize(i.normal);//下面计算方式套用菲涅尔计算float3 worldViewDir = normalize(_WorldSpaceCameraPos.xyz - i.vertexWorld.xyz);//获取单位视角方向   相机世界空间位置减去顶点世界空间位置half NdotV = max(0, dot(i.normal, worldViewDir));//计算法线方向和视角方向点积,约靠近边缘夹角越大,值约小,那就是会越在圆球中间约亮,越边缘约暗NdotV = 1.0-NdotV;//这里需求是越边缘约亮,所以需要反一下,这里用1 减下float fresnel =pow(NdotV,_InSideRimPower)*_InSideRimIntensity;//使用上面的属性参数,这里不多说//********************************************************//fresnel*=i.normal.x;  //左右fresnel*=i.normal.y;//上下//********************************************************float3  Emissive=_InSideRimColor.rgb*fresnel; //配置上属性里面的内边缘光颜色return _MainColor+float4(Emissive,1);//最后加在本体主颜色就即可

unity shader 边缘光,内发光,外发光,轮廓边缘光,轮廓内边缘光,轮廓外边缘光相关推荐

  1. 【unity shader】unity游戏特效-遮挡显示效果 (含边缘光、描边效果版)

    不知道你们有没有在玩Black Squad这个游戏啊 在被对手干掉时会有敌人高亮显示效果 (未被做掉时) (被做掉后高亮显示敌人位置) 明明敌人被不透明物体挡住却仍然可以被渲染出来 这效果要是能扔进自 ...

  2. unity shader遮挡边缘光描边

    Shader "Unlit/遮挡边缘光描边" {Properties{_MainTex("Texture", 2D) = "white" { ...

  3. 【Unity Shader编程】之十四 边缘发光Shader(Rim Shader)的两种实现形态

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

  4. 【Unity Shader编程】之十四 边缘发光Shader Rim Shader 的两种实现形态

    分享一下我老师大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow 本系列文章由@浅墨 ...

  5. 2019年6月日记-Unity Shader Graph 菲尼尔简单边缘发光

    ShaderGraph 菲尼尔反射边缘光 创建菲尼尔反射节点,与Color节点相差获得边缘发光的颜色. 控制菲尼尔节点的大小,调出vector1节点来可视化调整. 新建Remap(重映射)节点,将Ti ...

  6. Unity Shader特效:人物模型动态流动光特效

    本文写于2017-6-6,转载请注明 以下为正文 ---------------------------------------------------------- 先上效果图: Shader界面图 ...

  7. Unity Shader - Custom DirectionalLight ShadowMap 自定义方向光的ShadowMap

    文章目录 思路 实践 在方向光的位置,放一个正交相机 调整光源相机参数 将光源投影空间的正交视锥体画出来 投射阴影 接收阴影 改进 超出Shadow map的默认为光照 添加光照处理 添加PCF柔滑整 ...

  8. Unity Shader学习:体积光/体积阴影

    Unity Shader学习:体积光/体积阴影 在前向渲染下实现平行光的体积光影效果,需要全屏深度图,延迟渲染会更划算. 思路:通过ray marching的步进点位置计算该点是否在阴影中,采样阴影贴 ...

  9. 【OpenCV-Python】——边缘和轮廓Laplacian/Sobel/Canny边缘检测查找/绘制轮廓及轮廓特征霍夫直线/圆变换

    目录 前言: 1.边缘检测 1.1 Laplacian边缘检测 1.2 Sobel边缘检测 1.3 Canny边缘检测 2.图像轮廓 2.1 查找轮廓 2.2 绘制轮廓 2.3 轮廓特征 3.霍夫变换 ...

最新文章

  1. 绘制你的世界:探索构图和真实的深度感
  2. go语言mysql视频_Go语言实战流媒体视频网站
  3. C# 使用 Lotus notes 公共邮箱发送邮件
  4. Dotnet全平台下APM-Trace探索
  5. [POJ1961 Period]
  6. jQuery对象和DOM对象相互转化
  7. 智慧医院建设方案_【聚焦医改】安泰创新智慧医院建设方案惊艳中国医院院长大会!...
  8. java 随机生成人员姓名
  9. 东北师范大学计算机研究生拟录取名单,东北师范大学2016年硕士研究生拟录取名单公示...
  10. 怎么从光缆缆标志区别是单模光缆还是多模光缆
  11. 直播预告:Envoy Core Maintainer 跨洋解读 Envoy 技术(中文)
  12. ODT(old driver tree)详解(带例题)
  13. 请问matlab里面exp函数怎么用啊,Matlab基本函数-exp函数
  14. 项目接入即时聊天客服系统(环信系统)PHP后端操作
  15. anna 跨域_认识anna morgiel的Android初级软件工程师和热情的社区组织者
  16. KVM虚拟化技术之virt-manager使用及KVM虚拟化平台网络模型介绍
  17. 道德沦丧的电商推广app开发①
  18. c mysql datasource_DataSource(mysql/oracle) - 随笔分类 - 我爱si搬砖 - 博客园
  19. 【转】85张PPT湖南2015年IPTV业务运营数据报告
  20. 用html写QQ音乐首页,使用HTML5仿制的QQ音乐PC版界面

热门文章

  1. python练习题:输入某年某月某日,判断这一天是这一年的第几天?
  2. opus编解码的使用
  3. 全息投影是计算机技术吗,全息投影、VR技术、AR增强现实技术的区别
  4. 开发技术-git修改用户名和邮箱地址
  5. 安全帽检测漏洞系统的初步总结
  6. 【Leetcode】1833. 雪糕的最大数量
  7. bootstrap table表头错位,火狐浏览器下滚动条挤像素问题解决方案。
  8. 如何更好的做计划-SMART原则
  9. AppScan 扫描web应用程序
  10. C语言程序设计李,C语言程序设计4--李2012.ppt