欢迎光临散文网 会员登陆 & 注册

Unity效果篇-04-魔法盾原理

2023-01-30 16:56 作者:Lucas_dudu  | 我要投稿

知识点:菲尼尔节点的还原与去除亮斑bug,物体碰撞描边,世界屏幕贴图纹理组合运用。

效果展示:

最终效果+ScreenPosition
关闭ScreenPosition效果


Screen Position: 屏幕空间坐标

View Dir : 当前照相机视图方向。

Dot : 点积 ,它在几何上表示两个向量之间形成的角度的余弦乘以彼此的长度。

Depth Fade: 深度渐变, 对象表面与其后面几何图形之间的距离。梯度范围或淡入淡出距离可以通过调整距离参数来设置

World Normal : 世界空间表面法线的矢量,他垂直于物体的向量。

Component Mask : 拆分多通道,输出想要的通道。

Append : 把单个输出的通道组合成二维 或三维 或四维 向量或color。

Fresnel : 菲尼尔的原理是世界法线点积相机视角,然后反向得到的边缘光的渐变效果。


这里就以ASE为例:

首先要先创建一个shader ,设置为不受光照材质,减少不必要的poss和变体。

unlit


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

材质属性

根据图片分析 可以分为4个 步骤来实现:


首先咱们来实现frenel:

如果用默认的frenel 很容易就实现想要的菲尼尔效果,但是加上辉光以后会有高光闪烁的问题。解决方式是在Power后加牵制Saturate,限制在0-1区间。

运用世界法线与相机方向的点积得到一个中心为1边缘为0的渐变,one Minus反向得到了一个中心为0边缘为1的渐变描边,菲尼尔的效果里面有 power, scale,Blas属性,这里在分别用power ,Multiply,Add得到想要的开放浮点值。如初菲尼尔效果就已经实现。abs是为了解决偶尔报错的问题。

Frenel节点

Frenel效果


第二步深度渐变:

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

得到这样的渐变

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

Frenel+Depth Fade

得到的效果:

菲尼尔+深度渐变

第三步 屏幕空间纹理移动叠加:

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

屏幕空间纹理

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

贴图案例
屏幕空间贴图

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

相加
得到效果。

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

颜色和强度
强度顔色自己看喜歡調整

第四步 ,ramp贴图来得到菲尼尔渐变颜色效果。

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

通过菲尼尔输出的0-1空间在图片X轴采样
全节点展示
最终效果
关闭屏幕空间效果

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

Unity效果篇-04-魔法盾原理的评论 (共 条)

分享到微博请遵守国家法律