URP | 简单水效果

深度
使用上面定义好的函数计算,

不同深度使用不同颜色

顶点动画
因为我们需要使用贴图制作顶点动画,在顶点阶段计算
注意: SAMPLE_TEXTURE2D_LOD 因为是顶点着色器阶段使用这个。
输出到顶点坐标效果

下一步增加深度控制。
顶点着色器阶段,计算出世界空间顶点位置。
定义一个变量控制深度大小。
注意:注意这里使用了Get DepthFade函数,这个函数调用UV值了。
因为我们是在顶点着色器阶段,贴图使用 LOD的效果。
所以我们上面调用的UV函数需要改一下贴图方式。
使用世界空间顶点和控制深度值, 控制大小值
这个数值乘到 noise贴图上
这样就可以使用深度控制顶点在浅的地方产生动画
效果

代码

扭曲
引入函数库
对模型的UV进行噪波扭曲,
我们通过屏幕空间采样,得到物体背后的屏幕样式
UV函数控制纹理的移动
顶点着色器阶段,采样贴图的UV
通过采样我们的噪波贴图,对UV进行扭曲,以及提取出我们的深度,来根据深度大小来进行相对应的扭曲效果:
效果

代码块
注意:这里使用的方法和热扭曲类似

边缘水花
使用前面计算的边缘深度
参数

效果

计算向量
我们准备计算光照,反射效果,
前加light库
需要在顶点着色器阶段计算出需要的向量。
片元着色器阶段
使用法线贴图,把噪波贴图增加俩个属性转换成法线贴图。
获取顶点着色器阶段数据,和环境光。
增加场景反射探针
场景中增加反射探针

场景打开Window—Lighting

采样环境反射探针得到反射颜色,输出
效果

Dot 系列数值
PBR公式 DGF 分别求出来,这里unity里提供我们3个函数
需要 DistributionGGX函数,
GeometrySmith
函数FresnelSchlick
函数GeometrySchlickGGX 函数 是G 需要的小函数
我们计算DGF需要F0,这里求出F0
计算出DGF
直接光高光
开始计算直接光高光部分
效果

直接光漫反射
漫反射
效果

有环境的颜色,
合并水的基础效果
合并水的颜色和水花的效果
定义新变量_FoamColor 水花的颜色
效果

输出
输出
调整参数效果



全代码