25.Shader进阶-TheWorld空间扭曲效果

所需技术
GrabPass屏幕抓取+uv偏移+颜色变化
GrabPass可见前篇

核心算法-uv偏移
主要理解下面两句
dir是中心点uv的向量到当前点uv向量
在cos函数周期, 原本等距分布的uv点, 点会聚集在波峰/波谷,
便得到以半径为作用范围的局部挤压 和 局部舒展 交替的图像
由于len是uv计算而来的,长度不超1,所以这部分看起来像凹陷的效果

当cos函数输入值超过1是,则会得到这样的图像,大部分的点都集中在radius的倍数上
由于cos是[-1,1]不断更替,所以得到镜像 拼接着 镜像的图像

为了在同一时间内只显示一圈, 需要把多余的外圈裁剪掉
增加一个[0,1]的进度current_progress
得到的cut_factor乘上原来的uv_offset,决定是否显示,就得到一个波纹

后续则需要对它的波次,半径,宽度,弱化的等参数做处理,然后写一个时间控制器让它动起来
看源码和参考来源
https://github.com/smartgrass/ShaderProject/tree/main/Assets/Demo/TheWorld
参考来源(思路写得很清晰)
https://github.com/dtysky/paradise/tree/master/src/collection/ShaderWaterRipple
关于Shader进阶要学什么
1.做感兴趣的效果
2.跟着github做
https://github.com/QianMo/Awesome-Unity-Shader
https://github.com/JiepengTan/FishManShaderTutorial
3.都做一遍:
水面,草地,体积云,SS系列,复刻原神卡渲
URP/HDRP,抗锯齿