【GPU Gems 学习笔记】Effective Water Simulation from Physical Models

一. 正弦波出于运行效率的考量,游戏中使用的“水面模拟”技术并不是真正的流体动力学计算,实际上大多是使用数学公式模拟水体的视觉效果。其中一种方法就是波形叠加法,通过叠加不同的随机周期函数来表现波涛起伏的水体表面。说到周期函数,可以使用简单的正弦波来表达水波的模型,首先复习一下初高中知识,下面是标准的正弦函数:而一般应用的正弦型函数公式为:其中相关的数学变量如下:: ...
摘要由CSDN通过智能技术生成

一. 正弦波

出于运行效率的考量,游戏中使用的“水面模拟”技术并不是真正的流体动力学计算,实际上大多是使用数学公式模拟水体的视觉效果。其中一种方法就是波形叠加法,通过叠加不同的随机周期函数来表现波涛起伏的水体表面。


说到周期函数,可以使用简单的正弦波来表达水波的模型,首先复习一下初高中知识,下面是标准的正弦函数:

\large y = sin(x)

而一般应用的正弦型函数公式为:

\large y=A \cdot sin(\omega x+\varphi )

其中相关的数学变量如下:

A: 振幅/波幅,其大小影响波峰的高度

\omega:该变量影响波的周期(或者说波长),关系式为:L =2\pi /\omega

\varphi:初相,整个函数图像的水平偏移量

在应用中,我们使用如下函数求顶点的 y 轴坐标,其中输入为顶点的水平坐标 (x,z) 和时间 t:

 \large W(x,z,t)= A\times sin(D\cdot (x,z)\times \omega + t\times \varphi )

其中,(x,z)代表顶点的水平位置,t是时间,A是振幅,D是水平运动方向(二维向量),\omega为频率(影响周期),\varphi为初相。


仅仅使用一个正弦波是无法展示此起彼伏的水面的,于是可以将很多个不同周期,不同振幅的正弦函数叠加在一起,得到一个关于水平面位置和时间的高度函数:

 \large H(x,z,t) = W_1(x,z,t) +W_2(x,z,t) ......

 \large H(x,z,t) =\sum( A_i\times sin(D_i\cdot (x,z)\times \omega_i + t\times \varphi_i ))


在顶点着色器中,计算上述高度函数, 修改原始顶点的y坐标即可实现网格的几何波动,每一个顶点的坐标可表示为:

\large P(x,z,t) = (x,H(x,z,t),z)


除此之外,还需要确定每一个顶点的法线,通过求副法线和切线的叉积求得法线。

其中副法线 \large B 和切线 \large T 向量分别为 \large x 和 \large z 方向的偏导数。

\large B(x,z) = \left ( \frac{\partial x }{\partial x} ,\frac{\partial }{\partial x }(H(x,z,t)),\frac{\partial z }{\partial x}\right ) = (1,\frac{\partial }{\partial x }(H(x,z,t)),0)

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值