FFT海浪模拟

本文公式的推导、FFT原理实现以及知乎上某图片的引用均来自此【学习笔记】Unity 基于GPU FFT海洋的实现-理论篇 - 知乎 (zhihu.com)

根据上面的学习笔记可知,FFT的实现经过三个阶段,分别是:

        生成频谱--->IDFT(逆离散傅里叶变换),得到偏移图--->法线、泡沫纹理,渲染

主要流程如下:可见,首要的事情是生成高度频谱。

第一阶段之生成频谱:

        生成高度频谱的公式如下:

       

 可见,要想得到高度频谱,我们不仅需要高斯随机数,还需要phillips频谱(方向波谱),其中公式中的k箭头是波长向量,k是波长向量的模。最后,我们就可以根据高度频谱生成对应的x\z位移频谱。

两个高斯随机数是互相独立服从均值为0,标准差为1的随机数。

下图是高斯随机数与phillips频谱生成高度频谱的流程。

 如下是根据高度频谱实现FFT海浪模拟的全部过程。

 第二阶段之使用IDFT:

利用IDFT由频谱图生成偏移图的过程。其中dx\dz\dy就是偏移图,displacement是偏移图合成的偏移纹理。

 FFT的推导

 

 

 

 根据推导可知,我们需要蝶形运算,并且采样点(或者说波数)是2的整数次幂。同时需要注意的是,蝶形运算会顺序输入、倒序输出,倒序输入、顺序输出。所以要采用Stockham算法来实现顺序的输入与输出。

快速傅里叶变换(FFT)——有史以来最巧妙的算法?_哔哩哔哩_bilibili的FFT推导理解:

1.n阶多项式由n+1个点来确实系数(这个由范德蒙行列式证明)

2.两个n阶多项式相乘得到n^2阶行列式,通过这种办法我们可以从系数表示法到值表示法,再到系数表示法得到n^2行列式。前者转化用DFT,后者用IDFT。

3.根据奇偶性可省去一半的计算量

4.用复数来解决平方后值为正而无法利用奇偶性减少计算量的问题

 

 

 

 第三阶段之泡沫的生成及海面渲染:

 

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值