Unity Shader编程之-模拟Highlighting System给物体边缘加高光轮廓的实现

 

用过Highlighting System插件的童鞋都知道,该款可以给物体轮廓外发光高亮特效,那么本篇文章我们来动手学习下自己实现,下面开始正文。

1.边缘光方法(Rim Light):
Unity官方教程里有例子,其中核心是这两句代码:

half rim = 1.0 – saturate(dot (normalize(IN.viewDir), IN.worldNormal));
o.Emission = _RimColor.rgb * pow (rim, _RimPower);
IN.viewDir是当前视角向量,IN.worldNormal是物体的法线。dot是计算视角和法线的点积,等于视角和法线夹角的cos值,如下图:
[unity Shader 着色器]给物体边缘加高光轮廓的办法,付Demo(增加一组算法) - 踏浪星空 - 踏浪的编程小屋

Cos的值域是1-0,1-cos就成了0-1,在夹角90度时达到最大值,正好用来模拟侧光的强度(与视角成90度的部分光线最强,就是边缘光了)
把这个值的变化率用一个pow函数(rim的_rimPower次方)进行放大,就能强化边缘发亮的效果。比较一下:

More