首先,我来介绍一下这次尝试中涉及的几大基本要素:水面运动波纹、菲涅尔效应、水下物体扭曲效果。
(1)在三维软件中,我们如何来让光滑的平面呈现出立体凹凸感?答案是使用法线贴图
选择合适的法线纹理来作为本次水面渲染的法线贴图。
海面不会风平浪静,波纹必会发生变化。
在ShaderGraph中,这一次用到的关键节点有这几个:
Time:获取游戏中的时间,用于法线贴图UV的移动(Offset)
Position:获取mesh 顶点对应的世界空间的位置,用于作为法线贴图的UV
Normal Blend:用于两个法线纹理混合。仔细查看,浅水区的海面波纹往往是由多个层次混合的。
这是法线部分节点图
(2)菲涅尔效应:如果你站在湖边,低头看脚下的水,你会发现水是透明的,反射不是特别强烈;如果你看远处的湖面,你会发现水并不是透明的,但反射非常强烈。这就是“菲涅尔效应”。简单的讲,就是视线垂直于表面时,反射较弱,而当视线非垂直表面时,夹角越小,反射越明显。如果你看向一个圆球,那圆球中心的反射较弱,靠近边缘较强。
ShaderGraph直接提供了Fresnel Effect节点(自己实现的话,无非是获取View Direction和 World Normal夹角的余弦值,余弦值越大,反射越强;余弦值越小,反射越弱。)
节点图
(3)水下物体扭曲效果:
我们可以获取第一步生成的混合法线纹理来作为水下物体的干扰因素,同时加上缩放因素,而Scene Position和Scene Color分别用来获取屏幕色彩缓存以及其UV,作为被扰动的主体,最终作为菲涅尔折射的部分和反射混合
最终完整节点图
最终效果
调整菲涅尔系数以及海水颜色
后续可能改动:1.受深度距离影响,从水上和水下观察水中物体时都会出现的模糊效果
2.物体落入水中以及水波撞到物体的波纹效果
暂无关于此日志的评论。