DeepWaterAnimationandRendering

http://www.gamasutra.com/gdce/2001/jensen/jensen_01.htm

相当赞的文章,重述FFT来模拟水,并在水的细节polish上提出了些想法。

 

 

 

 

 

 

水的geometry animation

 

FFT

对水是基于统计与观察,用一系列sin,cos函数的合成来模拟。

FFT作为快速计算这些分解因子的方法引入。

 

再追一遍公式:

  • h(x,t)----水在时间t,水平位置x的高度
  • k是水的运动方向的vector,不是unit vector
  • 浪线h(k,t),水在时间t,运动方向k上的振幅与相位
  • y=Asin(ωx+φ)中ωx+φ就是相位,A是振幅

然后开始一个个定位这个公式中的每个部分是什么:

其中vector k的摸与水的波长的关系:

lamda---波长。

 

 

最后P这个是philips spectrum,这里面有可控的一些东西,比如可以滤掉过小的波。

 

最后一个未定的是波的频率:

  • w频率
  • g重力加速度
  • k水传播vector

有了这一切,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即可,简洁效果好。

DeepWaterAnimationandRendering

 

水在对冲的时候喷点particle,效果更赞了。

DeepWaterAnimationandRendering

summary:

模拟水的wave animation是重中之重。

这一点上使用的是依据统计和观察,使用一些数学模型来近似模拟,数学模型中各个部分是和水的属性相关,像水的频率,深度,张力,外力等。一方面可以很真实的模拟出水(titanic中的水)一方面可以根据需要进行参数的修改即可得到我们想要的水(风平浪静和比较激烈的环境)。相比美术生成normalmap然后来lerp的方法,这种就是灵活很多,也省了大量的内存,当然计算上要付出一定代价

 

另外流体模拟的想法做surface上的一些外力响应的思路很赞。

 

最后是泡沫浪花的想法很赞。

 


原文链接: http://blog.csdn.net/ccanan/article/details/5688618

你可能感兴趣的:(DeepWaterAnimationandRendering)