对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技术,给一个参数或者分布输入,就会产出很奇怪的效果。
而且因果关系又不是那么直观,所以说这一块是一个可以挖掘很多东西的地方,变化个分布就是一个效果。