ue5学习文档:水材质
一个简单的水材质蓝图第一章表面系统1.1 为什么用“绝对世界位置”而不是默认UV使用世界坐标的XY意味着波浪的平铺是基于世界空间尺度的。无论水面怎么缩放波浪的物理大小都不会变。1.2 三层Panner怎么让水“动起来”且不假panner可以让UV坐标随时间平移实现纹理流动效果让水面动起来。一个panner的水面是不太贴合现实的我们一般要多加几个panner。还有个重要的点多个方向的波纹要用 DeriveNormalZ连起来理由是法线的长度总为1即[X^2 Y^2 Z^2 1]如果三个法线直接相加那么得到的最终法线的总长可能会大于1Z分量蓝色也会叠加这会让水面发灰、发白失去立体感甚至高光闪烁DeriveNormalZ的作用就是保留叠加后的xy方向通过法线长度的计算公式也就是上面的公式得到新的且符合要求的z值效果如下可以看到水面波动丰富起来了有个缺点水面是黑色的我们给自发光颜色一个0.05的值这才合理!第二章深度与颜色系统——水的“厚度”怎么体现水为什么有层次因为水深不同光被吸收的程度不同。2.1 SceneDepth 与 PixelDepth 的精确减法SceneDepth拿到的是水底或水后第一个不透明物体的距离PixelDepth是摄像机到当前水面像素的距离。两者相减Subtract得到的是视线方向上水面到水底的距离。**Depth SceneDepth-PixelDepth**2.2 Power连线走到Power指数设为了0.5。\[OutputInput^{Exponent}\]如果不用Power深度对颜色的影响是线性的浅水区过度会非常生硬、灰暗。开平方后它会“拉伸浅水区的数值压缩深水区的数值”。这意味着在浅水区深度的微小变化会引发颜色的快速变化而在深水区颜色变化趋于平缓。这完美模拟了真实水体中光在浅水区快速被吸收到深水区后趋于饱和的物理现象。2.3 Lerp 混色逻辑用经过深度处理的数据作为 Alpha在Lerp节点中混合浅水色和深水色。浅水色偏黄绿深水色偏青蓝随着z值的增加水面会变青蓝第三章光学与边缘系统3.1 Fresnel在上面的蓝图中 Fresnel 节点设置了Exponentin5.0和BaseReflectFractionIn0.04。BaseReflectFractionIn 0.04 的数值,对应的是水的折射率IOR1.33在垂直入射时的反射率F0。指数 5.0 意味着这是一个相对“锐利”的菲涅尔。只有视线与水面夹角非常小也就是看得很远、很平时反射才会急剧增强。这保证了近距离俯视水面时水是透明的能看到水底而远眺时水面像镜子一样反射天空。3.2 Depth FadeDepth Fade100连到不透明度的原因检测当前透明物体和后面不透明物体之间距离。如果距离太小说明水面靠近岸边输出0降低透明度如果距离太大反之输出1保持水正常颜色Depth Fade的输出和前面算出来的“深度颜色权重”进行Multiply然后才输入到Lerp的 Alpha的原因Opacity被 Depth Fade 控制水面靠近岸边时透明度会降低但颜色依然是深水色这会导致岸边边缘发黑。所以2的操作让在靠近岸边Depth Fade 趋近0时和前面深度颜色权重相乘得到0的结果根据lerp的公式[Output Lerp(A, B, Alpha) A (B - A) \times Alpha]Alpha为0输出A的颜色也就是浅水色。这样水面在靠近岸边时会自然地过渡为极浅的透明水色彻底消除了水面与岸边的硬切边。效果如下总结这是一整套**“坐标空间转换世界坐标→ 傅里叶波叠加多层Panner→ 向量场重构DeriveNormalZ→ 光线吸收与散射深度减法和Power→ 物理光学Fresnel 0.04→ 边缘抗锯齿Depth Fade 复用”**的实时渲染工程逻辑。此文档是学习文档非专业教学如有错误请指出节点参考视频【【UE5】虚幻5动态水材质教程(一)】 https://www.bilibili.com/video/BV1U94y1Z7Hu/?share_sourcecopy_webvd_source1db761baa3e453aebd572fb8d5056343