25.Shader進(jìn)階-TheWorld空間扭曲效果

所需技術(shù)
GrabPass屏幕抓取+uv偏移+顏色變化
GrabPass可見前篇

核心算法-uv偏移
主要理解下面兩句
dir是中心點(diǎn)uv的向量到當(dāng)前點(diǎn)uv向量
在cos函數(shù)周期, 原本等距分布的uv點(diǎn), 點(diǎn)會(huì)聚集在波峰/波谷,
便得到以半徑為作用范圍的局部擠壓 和 局部舒展 交替的圖像
由于len是uv計(jì)算而來的,長(zhǎng)度不超1,所以這部分看起來像凹陷的效果

當(dāng)cos函數(shù)輸入值超過1是,則會(huì)得到這樣的圖像,大部分的點(diǎn)都集中在radius的倍數(shù)上
由于cos是[-1,1]不斷更替,所以得到鏡像 拼接著 鏡像的圖像

為了在同一時(shí)間內(nèi)只顯示一圈, 需要把多余的外圈裁剪掉
增加一個(gè)[0,1]的進(jìn)度current_progress
得到的cut_factor乘上原來的uv_offset,決定是否顯示,就得到一個(gè)波紋

后續(xù)則需要對(duì)它的波次,半徑,寬度,弱化的等參數(shù)做處理,然后寫一個(gè)時(shí)間控制器讓它動(dòng)起來
看源碼和參考來源
https://github.com/smartgrass/ShaderProject/tree/main/Assets/Demo/TheWorld
參考來源(思路寫得很清晰)
https://github.com/dtysky/paradise/tree/master/src/collection/ShaderWaterRipple
關(guān)于Shader進(jìn)階要學(xué)什么
1.做感興趣的效果
2.跟著github做
https://github.com/QianMo/Awesome-Unity-Shader
https://github.com/JiepengTan/FishManShaderTutorial
3.都做一遍:
水面,草地,體積云,SS系列,復(fù)刻原神卡渲
URP/HDRP,抗鋸齒