Building Worlds In Unreal 学习笔记——29-30 水坑与涟漪
本系列学习资料来源,Ben Cloward的油管空间,B站的搬运翻译
Lec29 地面水坑 Landscape Puddles
本节主要是创建水坑,下节会创建涟漪
我们先新建一个用于水坑显示的mask材质函数
1 水坑mask——世界坐标纹理叠加
最开始的版本,我们用世界坐标的XY当做UV采样依据,分别乘以倍数(其中一个换了下X和Y,增加随机性)
然后采样distortion纹理(这个纹理在Lec04和Lec17都用过,也就是用PS渲染一些云的图案)
我们直接连到base color看看情况
2 水坑mask——lerp参数插值
但是这明显不像水坑该有的样子,我们做一下调整
- 我们用一个input参数来控制水坑大小
- 插值一个二维向量(这个数值可以根据自己需要调整)
R通道代表除数(除的越小,相当于乘的越大,也就是白色变大,黑色变小,1-x之后,给水坑的白色mask越小)
G通道代表减去(减得越多,黑的越多,1-x之后反转,白色越多,给水坑的白色mask越大)
看看效果
3 水坑mask——范围确定
现在我们的水坑mask到处都有,肯定是不对的
我们取顶点法线的Z,然后各种调调对比度啥的,和原本的输出乘起来,得到mask
山坡上就没有水坑了
4 混合地形和水坑
我们编写一个材质函数
- 获取输入的地形材质属性,和水进行插值得到
- 关于BaseColor,使用指定颜色和地形原本颜色进行混合作为基色,按照开放的‘透明度’参数和地形原本颜色进行插值
- 剩下三个属性,按照遮罩进行固定值插值
把这个材质函数放进来
看看效果,还行
5 高度图校正
如果开启了细分的话,会发现我们的水坑也被细分了,也就是此时水坑的高度图还是用的草地的高度图
所以为了函数的健壮性,我们做一些调整
- 第一个lerp,把水坑的高度调到0.5,其他的调低;第二个lerp,水坑使用0.5的height,其他地方用正常地图原本的height
(其实思想就是让水坑的高度维持在0.5左右,当高度是0.5左右时,细分高度变化的非常少,Ben佬做了这两个lerp,是让水坑以外的height小于0.5,产生细分下移,水坑则不变)
连到材质上
这是效果
这是直接赋值常量的效果,差别就是边缘没有下落
不过细分似乎耗性能,我也就不会开,节点先这么连着
6 草与河底水坑去除
现在我们的草会长在水坑上,河底也会有
这很没有必要,我们可以去除它们
加上一个mask参数乘一下,也输出一个mask
然后在我们的主材质中去减掉它(sample river代表有河流的地方是白的,其他是黑的,所以反转)
原视频的这种做法似乎河底依然有点东西
看了下mask似乎河底并没有处理干净,只是颜色淡了点
于是我又给sample river做了些调整
现在河底就没有了
对于草长水坑的情况,这是改进前
这是改进后的,有些还是会长在水坑上,可能是模型大小问题,不过整体上是不长了
Lec30 水坑涟漪 Landscape Puddle Ripples
这节主要就是加上涟漪和雨波纹(大部分在雨shader的时候就做过,只要拿过来用就好了)
简单写一个材质函数(关于中间这个函数可以去看雨材质那几节)
加入到主材质中(如果需要渲染RVT,最好不要在它之前加入动画效果,我们一般在最后加入动画)
我们也可以加入雨水的效果,后面那个1是伪造法线,用意说是节省性能,个人理解可能是用了add以后,本来就不是归一化的法线
然后就取前俩法线的XY,加个Z=1,来糊弄一下当做法线
不过好像看不太出来,可能涟漪函数内部实现的参数可以大一点
之后看Ben佬要更新啥再跟了