Unity效果篇-04-魔法盾原理
知识点:菲尼尔节点的还原与去除亮斑bug,物体碰撞描边,世界屏幕贴图纹理组合运用。
效果展示:


Screen Position: 屏幕空间坐标
View Dir : 当前照相机视图方向。
Dot : 点积 ,它在几何上表示两个向量之间形成的角度的余弦乘以彼此的长度。
Depth Fade: 深度渐变, 对象表面与其后面几何图形之间的距离。梯度范围或淡入淡出距离可以通过调整距离参数来设置
World Normal : 世界空间表面法线的矢量,他垂直于物体的向量。
Component Mask : 拆分多通道,输出想要的通道。
Append : 把单个输出的通道组合成二维 或三维 或四维 向量或color。
Fresnel : 菲尼尔的原理是世界法线点积相机视角,然后反向得到的边缘光的渐变效果。
这里就以ASE为例:
首先要先创建一个shader ,设置为不受光照材质,减少不必要的poss和变体。

材质属性,关闭双面显示,深度写入,RGB混合模式改为透明度混合。

根据图片分析 可以分为4个 步骤来实现:
首先咱们来实现frenel:
如果用默认的frenel 很容易就实现想要的菲尼尔效果,但是加上辉光以后会有高光闪烁的问题。解决方式是在Power后加牵制Saturate,限制在0-1区间。
运用世界法线与相机方向的点积得到一个中心为1边缘为0的渐变,one Minus反向得到了一个中心为0边缘为1的渐变描边,菲尼尔的效果里面有 power, scale,Blas属性,这里在分别用power ,Multiply,Add得到想要的开放浮点值。如初菲尼尔效果就已经实现。abs是为了解决偶尔报错的问题。


第二步深度渐变:
如今我们菲尼尔效果有了,但是与物体之间交接的地方没有出现描边,咱们用深度渐变来实现。用到节点Depth Fade 会得到一个中心为1边缘为0的渐变,用one Minus来反向,通过Saturate来限制他的区间。用浮点值Depth来控制范围。


咱们让他和前面咱们得到的菲尼尔相加

得到的效果:

第三步 屏幕空间纹理移动叠加:
用Screen Position来得到屏幕空间信息通过Compent Mask只输出XY的屏幕空间坐标信息,用UVSpeed四维向量来分别表示UV的缩放和 UV偏移。最后相乘得到屏幕空间的uv信息链接到贴图上,这里我加了一个Toggle Switch开关来控制屏幕空间贴图效果的开关。

这样做的好处是不会根据模型的放大uv会跟着放大。


然后用得到的效果与菲尼尔和深度相乘


當然这里我们再做一下颜色和强度值控制。


第四步 ,ramp贴图来得到菲尼尔渐变颜色效果。
这块可以理解为用菲尼尔的0-1空间来对应rampX轴向上的0-1UV空间。然后让他于上面第三步得到的结果相乘。这里加的Flart0是为了方便又Y轴向贴图采样控制。




最后可以给小球做一个缩放动画,就会得到想要的效果。