http://www.gamasutra.com/gdce/2001/jensen/jensen_01.htm
相当赞的文章,重述FFT来模拟水,并在水的细节polish上提出了些想法。
水的geometry animation
FFT
对水是基于统计与观察,用一系列sin,cos函数的合成来模拟。
FFT作为快速计算这些分解因子的方法引入。
再追一遍公式:
然后开始一个个定位这个公式中的每个部分是什么:
其中vector k的摸与水的波长的关系:
lamda---波长。
最后P这个是philips spectrum,这里面有可控的一些东西,比如可以滤掉过小的波。
最后一个未定的是波的频率:
有了这一切,FFT可以算了。
ChoppyWaves
其实在http://graphics.ucsd.edu/courses/rendering/2005/jdewall/tessendorf.pdf这里也提到,不过笔记没记,这里补上。
FFT模拟的水仍旧有一些不足,像水的顶端很圆,我们常常可以看见小水浪的头部是尖的。
这就需要做一些处理来获得天气较激烈的情况下水的行为。
做法是将水做一些平移,高度部分可以保持原来的做法,平移公式:
D(x,t) displacement vector computed with fft:
Water Surface under interaction
这部分主要是用流体模拟的东西来展示水在有外力影响的情况下(风,打击。。。)表面变化的情况。
这部分可以参见dark void里面的流体模拟做particle。
仍旧是以grid为单位,构建pressure和velocity,然后去更新经过各自的instance的position。
不过这里讲的非常粗略,没有很详细的说他们到底用这个干什么了。
但是这个思路是不错的。
刚体的浮力计算----基本的浮力运算,跳过。
折射反射
泡沫:水的泡沫,根据水的高度改变sample 泡沫贴图的uv和混合factor即可,简洁效果好。
水在对冲的时候喷点particle,效果更赞了。
summary:
模拟水的wave animation是重中之重。
这一点上使用的是依据统计和观察,使用一些数学模型来近似模拟,数学模型中各个部分是和水的属性相关,像水的频率,深度,张力,外力等。一方面可以很真实的模拟出水(titanic中的水)一方面可以根据需要进行参数的修改即可得到我们想要的水(风平浪静和比较激烈的环境)。相比美术生成normalmap然后来lerp的方法,这种就是灵活很多,也省了大量的内存,当然计算上要付出一定代价
另外流体模拟的想法做surface上的一些外力响应的思路很赞。
最后是泡沫浪花的想法很赞。