URP | 屏幕深度制作護盾特效

目的
URP管線下獲取深度方法。
實現(xiàn)菲尼爾效果。
使用頂點動畫制作一個簡單的效果。
設(shè)置
大開渲染管線確認(rèn)是否開啟深度(Depth)

獲取深度
前導(dǎo)入貼圖,獲取屏幕UV
獲取屏幕深度
在計算模型深度
使用 i.positionCS.z ? 獲取齊次裁剪空間 Z值就是物體像素的深度。XY是物體像素的坐標(biāo)。
使用模型深度減屏幕深度。增加一個控制深度邊緣大小的值。
獲取深度就得到了。

效果

擴展 齊次裁剪空間 | Homogeneous Clip Space
齊次裁剪空間(Homogeneous Clip Space)
positionCS.xyzw
positionCS.xy 是像素的位置坐標(biāo)
positionCS.z 是像素的深度。
在輕量管線中,w分量恒為1。至于為什么要有這個w分量。
齊次空間W分量的意義,是處理向量(方向、法線等,w=0)和矢量(頂點w=1)時可以使用統(tǒng)一的4x4變換矩陣。Unity的內(nèi)部的實現(xiàn),沒有遵照這一方式,在處理方向時都把4x4矩陣做了裁剪成為3x3矩陣忽略了W分量,或者把W分量用來存儲其他數(shù)據(jù)來節(jié)省插值寄存器的使用。

實現(xiàn)Fresnel效果
實現(xiàn)Fresnel的效果是 1 - NdotV的效果。
在頂點著色器階段計算出法線和世界空間頂點位置信息。
在片元著色器階段我們計算出視角V
這里_RimPower是控制Fresnel的大小的,_Emiss是自發(fā)光控制強度
效果

問題:這倆個效果有什么區(qū)別
深度獲取的是這樣的,不夠圓滑,只是在和邊緣接觸的地方有漸變效果

Fresnel 是均勻的產(chǎn)生漸變。


現(xiàn)在是把這倆種方式結(jié)合一下。

效果

這樣和模型交接也會產(chǎn)生邊緣效果。
輸入主貼圖

效果

簡單的護盾效果就實現(xiàn)了。
代碼

優(yōu)化效果
準(zhǔn)備一個需要的模型

增加流光
增加流光效果增加科技感。
添加變量

流光的顏色
流光速度
流光邊緣
在片元著色器階段,計算流光,輸出到顏色
效果

增加頂點動畫
定義屬性
上面是向量方向
下面是頂點動畫時間
頂點動畫是計算頂點數(shù)據(jù)完在增加到頂點位置信息里。在輸出到片元著色器。
_VectorF 是計算sin函數(shù),后面乘0.5 + 0.5是把數(shù)值轉(zhuǎn)換到 0 -1 都是正數(shù)。
SNormals 我們是想控制模型法線方向移動,所以對頂點法線處理,在乘一個Vector3類型的數(shù)據(jù)
SPosition ?這里計算出對頂點法線處理后,模型空間的新的位置。
在把這個位置增加到我們的模型頂點里傳入到片元著色器。

完成,就可以看到頂點動畫。
簡單理解頂點動畫是對模型頂點的計算,
效果

增加法線扭曲
上一章節(jié)學(xué)習(xí)到了法線扭曲,這次加入效果,這樣還是使用_CameraOpaqueTexture 來實現(xiàn)。
定義輸入變量
片元著色器階段輸入頂點控制法線
頂點著色器階段
片元著色器階段計算
單獨看一下效果

和其他效果增加起來。
效果
完成效果


代碼
總結(jié)
在URP管線下獲取深度和顏色數(shù)據(jù)都一樣,這樣比較簡單。

使用模型深度和屏幕深度計算出是否接觸。
這樣方法也可以使用到粒子里,實現(xiàn)粒子和模型接觸產(chǎn)生的邊緣。
頂點動畫是在頂點著色器(Vertex Shader)階段處理的過程,對頂點處理完在傳入到片元著色器階段。
頂點著色器通常用于實現(xiàn)坐標(biāo)變換,頂點空間變換,逐頂點光照計算

資料參考
草地的頂點動畫實現(xiàn)風(fēng)吹草動 - 知乎 (zhihu.com)
游戲特效模型分享 六邊面護盾1 max制作方法_嗶哩嗶哩_bilibili
【中文字幕】U3d能量盾牌特效制作_嗶哩嗶哩_bilibili