一. 正弦波
出于运行效率的考量,游戏中使用的“水面模拟”技术并不是真正的流体动力学计算,实际上大多是使用数学公式模拟水体的视觉效果。其中一种方法就是波形叠加法,通过叠加不同的随机周期函数来表现波涛起伏的水体表面。
说到周期函数,可以使用简单的正弦波来表达水波的模型,首先复习一下初高中知识,下面是标准的正弦函数:
而一般应用的正弦型函数公式为:
其中相关的数学变量如下:
: 振幅/波幅,其大小影响波峰的高度
:该变量影响波的周期(或者说波长),关系式为:
:初相,整个函数图像的水平偏移量
在应用中,我们使用如下函数求顶点的 y 轴坐标,其中输入为顶点的水平坐标 (x,z) 和时间 t:
其中,代表顶点的水平位置,是时间,是振幅,是水平运动方向(二维向量),为频率(影响周期),为初相。
仅仅使用一个正弦波是无法展示此起彼伏的水面的,于是可以将很多个不同周期,不同振幅的正弦函数叠加在一起,得到一个关于水平面位置和时间的高度函数:
在顶点着色器中,计算上述高度函数, 修改原始顶点的y坐标即可实现网格的几何波动,每一个顶点的坐标可表示为:
除此之外,还需要确定每一个顶点的法线,通过求副法线和切线的叉积求得法线。
其中副法线 和切线 向量分别为 和 方向的偏导数。