Unity效果篇-04-魔法盾原理
知識(shí)點(diǎn):菲尼爾節(jié)點(diǎn)的還原與去除亮斑bug,物體碰撞描邊,世界屏幕貼圖紋理組合運(yùn)用。
效果展示:


Screen Position: 屏幕空間坐標(biāo)
View Dir : 當(dāng)前照相機(jī)視圖方向。
Dot : 點(diǎn)積 ,它在幾何上表示兩個(gè)向量之間形成的角度的余弦乘以彼此的長(zhǎng)度。
Depth Fade: 深度漸變,?對(duì)象表面與其后面幾何圖形之間的距離。梯度范圍或淡入淡出距離可以通過調(diào)整距離參數(shù)來設(shè)置
World Normal : 世界空間表面法線的矢量,他垂直于物體的向量。
Component Mask : 拆分多通道,輸出想要的通道。
Append : 把單個(gè)輸出的通道組合成二維 或三維 或四維 向量或color。
Fresnel : 菲尼爾的原理是世界法線點(diǎn)積相機(jī)視角,然后反向得到的邊緣光的漸變效果。
這里就以ASE為例:
首先要先創(chuàng)建一個(gè)shader ,設(shè)置為不受光照材質(zhì),減少不必要的poss和變體。

材質(zhì)屬性,關(guān)閉雙面顯示,深度寫入,RGB混合模式改為透明度混合。?

根據(jù)圖片分析 可以分為4個(gè) 步驟來實(shí)現(xiàn):
首先咱們來實(shí)現(xiàn)frenel:
如果用默認(rèn)的frenel 很容易就實(shí)現(xiàn)想要的菲尼爾效果,但是加上輝光以后會(huì)有高光閃爍的問題。解決方式是在Power后加牽制Saturate,限制在0-1區(qū)間。
運(yùn)用世界法線與相機(jī)方向的點(diǎn)積得到一個(gè)中心為1邊緣為0的漸變,one Minus反向得到了一個(gè)中心為0邊緣為1的漸變描邊,菲尼爾的效果里面有 power, scale,Blas屬性,這里在分別用power ,Multiply,Add得到想要的開放浮點(diǎn)值。如初菲尼爾效果就已經(jīng)實(shí)現(xiàn)。abs是為了解決偶爾報(bào)錯(cuò)的問題。


第二步深度漸變:
如今我們菲尼爾效果有了,但是與物體之間交接的地方?jīng)]有出現(xiàn)描邊,咱們用深度漸變來實(shí)現(xiàn)。用到節(jié)點(diǎn)Depth Fade 會(huì)得到一個(gè)中心為1邊緣為0的漸變,用one Minus來反向,通過Saturate來限制他的區(qū)間。用浮點(diǎn)值Depth來控制范圍。


咱們讓他和前面咱們得到的菲尼爾相加

得到的效果:

第三步 屏幕空間紋理移動(dòng)疊加:
用Screen Position來得到屏幕空間信息通過Compent Mask只輸出XY的屏幕空間坐標(biāo)信息,用UVSpeed四維向量來分別表示UV的縮放和 UV偏移。最后相乘得到屏幕空間的uv信息鏈接到貼圖上,這里我加了一個(gè)Toggle Switch開關(guān)來控制屏幕空間貼圖效果的開關(guān)。

這樣做的好處是不會(huì)根據(jù)模型的放大uv會(huì)跟著放大。


然后用得到的效果與菲尼爾和深度相乘


當(dāng)然這里我們?cè)僮鲆幌骂伾蛷?qiáng)度值控制。


第四步 ,ramp貼圖來得到菲尼爾漸變顏色效果。
這塊可以理解為用菲尼爾的0-1空間來對(duì)應(yīng)rampX軸向上的0-1UV空間。然后讓他于上面第三步得到的結(jié)果相乘。這里加的Flart0是為了方便又Y軸向貼圖采樣控制。




最后可以給小球做一個(gè)縮放動(dòng)畫,就會(huì)得到想要的效果。