第1章 用物理模型进行高效的水模拟

方法:傅立叶变换

思路:由计算简单正弦函数之和,逐步扩展到更复杂的函数,像素shader使用正弦波函数的加和,来创建动态的平铺凹凸贴图,从而得到水面的细节。

两个表面模拟:一个是表面网格的几何波动,另一个是网格上法线图的扰动。两个模拟本质上是相同的。水面高度由简单的周期波叠加表示。

正弦函数叠加后得到一个连续函数,这个函数描述了水面上所有点的高度和方向.在处理顶点时,我们基于每个顶点的水平位置对函数取样,使得网格细分形成连续水面.在几何分辨率之下,将该技术继续用于纹理空间,通过对近似正弦叠加的法线取样,用简单像素shader渲染到目标纹理,从而产生表面的法线图。为每帧渲染法线图,允许有限数量的正弦波组相互独立地运动,这大大提高了渲染的逼真度。

水纹理的波纹好坏决定着模拟的逼真度,波纹表面的几何波动提供了呈现纹理的精细框架结构。

波的选择:波长,振幅,速度,方向。所有波的总表面是正弦波的叠加。Wi(x,y,t)=Ai*sin(Di(x,y)*yi+t*ki

为了提供场景动力学的变量,将在约束中随机产生这些波参数。随着时间的变化,不断将一个波淡出,再以一组不同的参数将其淡入。这些参数是相关的。

法线是副法线和切线的叉积 。副法线是对x求偏导,切线是对y求偏导。在表面上的三维位置p是p(x,y,t)=(x,y,H(x,y,t))。

几何波数量限制为4个。分为方向波和圆形波。方向波每个Di是波寿命常数。对于圆形波,方向必须在每个顶点计算,它是从波中心Ci到顶点的规范化向量。Di(x,y) = [ ((x,y)-Ci)/|(x,y)-Ci|].

对于大的水体,是水吹动产生模型,用方向波。对于较小的池塘中的水,产生波的原因不是由于风,用圆形波。

海水建模用Gerstner波函数,可以提供一些表面的微妙运动,顶点朝着每个浪头移动形成更尖的峰,在表面上浪头更尖。

扫描二维码关注公众号,回复: 2637363 查看本文章






猜你喜欢

转载自blog.csdn.net/directx3d_beginner/article/details/80519299