FFTWater Revisited

来源:互联网 发布:弹幕点歌什么软件 编辑:程序博客网 时间:2024/05/16 10:53

对fft的水有了些新的理解。

 

傅立叶变换是讲时域空间域的东西变换到频域,反傅立叶变换则反之。

dft是计算机这种没法处理连续信号,必须将连续信号离散化的产物。

 

水的波动(自然波动,也叫ambientwave)也属于有周期性信号,起码是有规律可循的。

可以通过傅立叶变换来变换到频域来分析,或者在频域中作出一组参数,然后反傅立叶变换到时域&频域,得出水的波动方式。

 

tessendorf的fft的水就是这个路线。

 

其中逆离散傅立叶(idft)变换的参数是

 

其中比较关键的地方,有两个,一个是h0(k),一个是频率的计算w(k)。

 


frequency---w(k)

其中w(k)是和每个k相关的,每个k是wave vector component,不同的k对应不同的波长,这个计算方式文中没有给,简而言之是和k相关的参数,保证有不同就会让水看起来波动的更自然。我之前用了同一个波长,结果就是同一个频率,算出来的波就看起来很单一。

至于怎么算,insomniac的一个做法是

kx = HalfFFTWidth-abs(kx);

ky=HalfFFTWidth-abs(ky);

wave_number_sqr=kx*kx+ky*ky;

zhangjun同学做法是直接

wave_num_sqr=kx*kx+ky*ky;

效果都很不错。


然后是h0(k),这是对每个wave vector component的上scaler的一个描述。

可以很直白的都给同一个值,比如1.0f.

那么水出来就是自己上下波动的一个情况。

 

或者像文中说的用phillipse spectrum,加上风的影响,那么就会造成spectrum的分布变得不均匀,就会造成有风吹得效果。

我之前在做的时候,在每个wave vector component 上加一个偏移,也会改变spectrum分布(也是有个偏移),结果出来的水就是流动的感觉。


在进一步说,水几乎可以说是一种procedural技术,给一个参数或者分布输入,就会产出很奇怪的效果。

而且因果关系又不是那么直观,所以说这一块是一个可以挖掘很多东西的地方,变化个分布就是一个效果。